Topik ini memperkenalkan Erlang dari tiga sisi: asal-usulnya sebagai bahasa untuk sistem telekomunikasi, mekanisme konkurensi berbasis model aktor (actor model) di atas VM BEAM, dan karakter bahasanya yang fungsional. Setelah membaca, kerangka besar platform ini sudah dikenal sehingga proses pemasangan pada topik penyiapan lebih mudah diikuti.
Latar munculnya Erlang#
Erlang dirancang di laboratorium penelitian Ericsson mulai tahun 1986 oleh Joe Armstrong, Robert Virding, dan Mike Williams. Sasarannya spesifik, yaitu perangkat lunak untuk pusat telepon (switch) yang harus melayani jutaan panggilan secara bersamaan, tidak boleh berhenti saat diperbaiki, dan harus tetap hidup meski jaringannya terganggu. Persyaratan itu membentuk keputusan desain bahasa: konkurensi menjadi bagian inti, kegagalan ditangani secara eksplisit, dan pembaruan kode dilakukan tanpa menghentikan sistem.
Nama Erlang sering dikaitkan dengan singkatan dari Ericsson Language dan dengan Agner Krarup Erlang, matematikawan Denmark yang menghitung lalu lintas telepon. Ericsson membuka kode Erlang/OTP untuk publik pada tahun 1998, dan sejak itu bahasa ini dipakai di luar dunia telekomunikasi, antara lain pada pesan instan, basis data, dan sistem pembayaran. Kisah skala yang sering dikutip adalah sistem pesan instan WhatsApp yang dilaporkan melayani dua juta koneksi pada satu node server dengan BEAM sebagai tulang punggungnya, contoh nyata bahwa desain konkurensi ini memang dirancang untuk beban berat. Klaim ketersediaan yang sering dikutip pada materi Ericsson adalah sembilan angka sembilan (nine nines), yakni 99,9999999 persen per tahun, dan angka itu menggambarkan target desain platform, bukan jaminan bagi setiap aplikasi yang dibangun di atasnya.
Proses ringan dan pesan asinkron#
Unit konkurensi Erlang adalah proses, dan proses di sini bukan proses sistem operasi ataupun thread. Proses Erlang berjalan di atas VM BEAM yang menugaskannya pada sejumlah kecil thread sistem operasi. Pembuatan proses sangat murah, memori setiap proses terisolasi, dan pengumpulan sampah (garbage collection) dikerjakan per proses sehingga satu proses yang menyapu memori tidak menghentikan proses lain. Karena tidak ada memori bersama, satu-satunya cara proses berkomunikasi adalah mengirim pesan secara asinkron: pengirim tidak menunggu, dan pesan masuk ke mailbox penerima.
Diagram berikut memperlihatkan alurnya. Proses A mengirim pesan dan langsung melanjutkan pekerjaannya, sedangkan pesan menunggu di mailbox Proses B sampai B membacanya.
Let it crash dan OTP#
Erlang menangani kegagalan dengan pola yang dikenal sebagai let it crash. Alih-alih menangkap setiap error agar program tetap berjalan dalam keadaan yang meragukan, bagian yang gagal dibiarkan mati, lalu proses pengawas memulai ulang bagian itu ke kondisi yang bersih. Pola ini masuk akal karena dua alasan. Pertama, state program setelah gagal sulit dipercaya, sehingga memulai ulang dari kondisi bersih lebih aman daripada melanjutkan. Kedua, proses terisolasi, sehingga kegagalan satu proses tidak merusak memori proses lain.
Pengawasan itu tidak perlu dibangun sendiri dari nol. OTP menyediakan behaviour standar seperti gen_server untuk server generik, supervisor untuk mengawasi dan memulai ulang proses, serta mekanisme application untuk menyusun semuanya. Dengan behaviour, keandalan yang dirancang untuk switch telepon tersedia sebagai pustaka bawaan, dan sebagian besar kode produksi Erlang dibangun di atasnya.
Karakter bahasa#
Bahasa Erlang sendiri bersifat fungsional. Setiap variabel diikat sekali saja dan nilainya tidak berubah (single assignment), keputusan diambil lewat pencocokan pola (pattern matching), dan pengulangan dilakukan dengan fungsi rekursif karena bahasa ini tidak memiliki pernyataan perulangan. Kode tidak memakai kelas dan objek, melainkan fungsi-fungsi yang dikelompokkan dalam modul.
Sesi shell berikut adalah kontak pertama dengan bahasa ini pada OTP 29. Ekspresi pertama dihitung, ekspresi kedua memanggil fungsi lists:sum/1 dari pustaka standar dengan argumen berupa list:
Erlang/OTP 29 [erts-17.1.1] [source] [64-bit] [smp:2:2] [ds:2:2:10] [async-threads:1] [jit:ns]
Eshell V17.1.1 (press Ctrl+G to abort, type help(). for help)
1> 2 + 3.
5
2> lists:sum([1, 2, 3]).
6Shell erl akan menjadi alat kerja harian: setiap ekspresi dievaluasi segera dan hasilnya dicetak. Semua contoh pada jalur ini dieksekusi nyata pada Erlang/OTP 29, dan keluaran yang ditampilkan selalu berasal dari eksekusi tersebut.
Ringkasan#
- Erlang dirancang di Ericsson sejak 1986 untuk pusat telepon yang andal dan dibuka untuk publik pada 1998.
- Unit konkurensi adalah proses ringan dengan memori terisolasi yang berkomunikasi lewat pesan asinkron ke mailbox, dijalankan di atas VM BEAM.
- Kegagalan ditangani dengan pola let it crash dan pengawasan OTP, bukan dengan menangkap error di setiap baris.
- OTP menyediakan behaviour standar seperti gen_server dan supervisor yang menjadi kerangka kerja aplikasi Erlang profesional.
- Bahasanya fungsional dengan single assignment, pencocokan pola, dan rekursi sebagai pengganti perulangan.
Referensi#
- Erlang Reference Manual: Introduction — Ericsson — Pengantar resmi karakteristik bahasa Erlang dan konvensi manualnya.
- Learn You Some Erlang for Great Good! — Fred Hebert — Buku daring gratis yang memperkenalkan sejarah dan model konkurensi Erlang.
- Download Erlang/OTP — Ericsson — Halaman unduhan resmi dengan nomor versi rilis terkini.