Pemrograman adalah seni dan ilmu dalam menciptakan perangkat lunak yang efisien dan efektif. Dalam dunia ini, terdapat berbagai macam bahasa pemrograman, masing-masing dengan keunikan dan tujuan penggunaan tertentu. Salah satu bahasa pemrograman yang mungkin belum begitu populer tetapi memiliki ciri khas unik adalah Erlang.
Apa itu Erlang
Erlang adalah sebuah bahasa pemrograman yang dikembangkan oleh Ericsson pada awal tahun 1980-an. Nama Erlang diambil dari nama matematikawan Denmark, Agner Krarup Erlang. Awalnya, bahasa ini diciptakan untuk memenuhi kebutuhan dalam pengembangan sistem telekomunikasi yang membutuhkan kehandalan tinggi, kemampuan konkurensi, dan toleransi terhadap kesalahan (fault-tolerance).
Salah satu fitur utama Erlang adalah fokusnya pada konkurensi dan distribusi. Bahasa ini dirancang untuk mengelola proses yang sangat ringan dan bersifat independen, memungkinkan ribuan proses kecil berjalan secara bersamaan. Hal ini membuatnya sangat cocok untuk pengembangan aplikasi real-time yang memerlukan respons cepat dan penanganan konkurensi yang efisien.
Sejarah Erlang
Sejarah Erlang dimulai pada awal tahun 1980-an di Ericsson, perusahaan telekomunikasi asal Swedia. Bahasa ini diciptakan sebagai respons terhadap kebutuhan pengembangan sistem telekomunikasi yang dapat memberikan kehandalan tinggi, toleransi terhadap kesalahan, dan kemampuan konkurensi yang baik. Berikut adalah kilas balik sejarahnya:
1980: Kelahiran Erlang
Pada tahun 1980, Joe Armstrong, Robert Virding, dan Mike Williams, para insinyur di Ericsson, memulai pengembangannya. Namanya diambil dari nama matematikawan Denmark, Agner Krarup Erlang, yang dikenal karena kontribusinya dalam teori antrian.
1986: Rilis Erlang Pertama
Bahasa pemrograman dirilis untuk penggunaan internal di Ericsson pada tahun 1986. Pada awalnya, bahasa ini dirancang untuk memenuhi kebutuhan sistem telekomunikasi yang kompleks, terdistribusi, dan bersifat real-time.
1992: Erlang di Publikasikan
Meskipun bahasa ini awalnya dikembangkan untuk kebutuhan internal Ericsson, pada tahun 1992, Ericsson memutuskan untuk mengumumkannya sebagai open source. Hal ini membuka pintu bagi pengembang di luar Ericsson untuk mulai menggunakan dan berkontribusi pada bahasa ini.
1998: Pembentukan Erlang/OTP
Erlang/OTP (Open Telecom Platform) mulai dikembangkan pada tahun 1998. Ini merupakan kerangka kerja (framework) dan kumpulan perpustakaan (libraries) yang menyediakan alat bantu untuk pengembangan aplikasi yang memanfaatkan keunggulannya dalam konkurensi, distribusi, dan fault-tolerance.
2005: Erlang/OTP di Bawah Lisensi Open Source
Pada tahun 2005, Erlang/OTP sepenuhnya berada di bawah lisensi open source. Hal ini mendorong pertumbuhan komunitas pengembangnya di seluruh dunia.
2010-an: Penggunaan Erlang di Industri
Pada tahun 2010-an, Erlang mulai mendapatkan perhatian lebih luas di industri, terutama di sektor-sektor yang membutuhkan aplikasi dengan tingkat keandalan tinggi, seperti komunikasi, perbankan, dan pusat data.
Cara Kerja Erlang
Dalam struktur fungsionalnya, program ditulis sebagai sekumpulan fungsi yang mendefinisikan hubungan matematis antara input dan output. Keunggulan utama bahasa pemrograman terletak pada kemampuannya untuk mengelola ribuan proses kecil secara konkuren, di mana setiap proses terisolasi sepenuhnya dan berkomunikasi melalui pertukaran pesan. Bahasa ini juga menonjolkan fault-tolerance, memastikan bahwa jika satu proses mengalami kegagalan, hal tersebut tidak memengaruhi proses lainnya. Konsep inovatif “Hot Code Swapping” memungkinkan penggantian kode program tanpa menghentikan sistem, mendukung pembaruan perangkat lunak tanpa menyebabkan downtime.
Erlang tidak hanya mengandalkan paradigma konkurensi, tetapi juga memanfaatkan pola-pola (pattern matching) dalam pemrogramannya. Pola-pola ini digunakan untuk mencocokkan parameter fungsi dan memproses pesan, memungkinkan pengkodean yang ringkas dan ekspresif. Dalam pemrograman Erlang, kesalahan atau crash dalam satu proses tidak menyebar ke proses-proses lainnya berkat isolasi proses yang ketat. Komunikasi antar proses dalam Erlang didasarkan pada model aktor, di mana proses-proses berkomunikasi melalui pertukaran pesan. Sejak diumumkan sebagai open source pada tahun 1992, bahasa pemrograman telah berkembang menjadi alat yang dihargai dalam pengembangan sistem real-time, distribusi, dan fault-tolerant. Dengan sejarah dan fitur-fiturnya yang unik, bahasa ini terus mempertahankan relevansinya di dunia pemrograman modern.
Kelebihan dan Kekurangan Erlang
Kelebihan Erlang
Konkurensi dan Distribusi
Bahasa ini dirancang khusus untuk menangani konkurensi dan distribusi dengan baik. Kemampuannya mengelola ribuan proses konkuren dengan overhead yang rendah membuatnya ideal untuk aplikasi yang membutuhkan respons cepat.
Fault-Tolerance
Keunggulan utama bahasa pemrograman ini adalah fault-tolerance yang tinggi. Proses-prosesnya terisolasi sepenuhnya, sehingga kesalahan dalam satu proses tidak merambat ke proses lainnya. Bahasa ini dapat mendeteksi dan mengatasi kesalahan tanpa mengganggu keseluruhan sistem.
Hot Code Swapping
Kemampuan untuk melakukan penggantian kode program tanpa menghentikan sistem atau proses berjalan, dikenal sebagai “Hot Code Swapping,” memungkinkan pembaruan perangkat lunak tanpa downtime, mendukung pengembangan aplikasi yang terus-menerus aktif.
Pengembangan Real-Time
Bahasa ini cocok untuk pengembangan aplikasi real-time karena dapat menangani tugas-tugas yang memerlukan respons cepat dan dapat diandalkan.
Pola-Pola (Pattern Matching)
Penggunaan pola-pola dalam pemrogramannya memudahkan pengkodean dan pemrosesan pesan, membuatnya menjadi bahasa yang ekspresif dan mudah dipahami.
Kekurangan Erlang
Kurangnya Populeritas Umum
Meskipun bahasa ini sangat kuat dalam bidang konkurensi dan fault-tolerance, namun kurang populer jika dibandingkan dengan bahasa-bahasa pemrograman lainnya seperti Java atau Python. Ini dapat membuat sulit untuk menemukan pengembang yang terampil dalam bahasa ini.
Keterbatasan Ekosistem dan Pustaka
Ekosistem dan pustakanya lebih terbatas dibandingkan dengan beberapa bahasa pemrograman lainnya. Hal ini dapat membuat pengembang menghadapi keterbatasan dalam opsi dan dukungan alat bantu.
Kurangnya Dukungan untuk Pemrograman Umum
Bahasa ini, awalnya dirancang untuk kebutuhan telekomunikasi, mungkin tidak sesuai untuk semua jenis proyek dan tidak memiliki dukungan yang kuat untuk pemrograman umum di luar lingkup aplikasi tertentu.
Kurva Pembelajaran yang Curam
Bahasa pemrograman ini memiliki konsep dan paradigma yang unik, seperti pemrograman konkuren dan pemrosesan pesan. Ini bisa membuat kurva pembelajaran yang curam bagi pengembang yang tidak terbiasa dengan paradigma tersebut.
Performa untuk Tugas Umum
Meskipun bahasa ini sangat unggul dalam aplikasi real-time dan konkurensi tinggi, performanya mungkin tidak sebaik beberapa bahasa dalam tugas-tugas umum yang tidak memerlukan karakteristik khusus bahasa ini.
Struktur dan Elemen Erlang
1. Modul
Erlang program terdiri dari satu atau lebih modul. Modul adalah unit dasar dalam bahasa ini yang berisi fungsi-fungsi terkait dan definisi-definisi lainnya. Nama modul harus sama dengan nama file yang berisi definisi modul tersebut.
2. Fungsi
Fungsi dalam bahasa ini didefinisikan menggunakan kata kunci fun. Setiap fungsi memiliki nama, parameter, dan tubuh fungsi yang mendefinisikan operasi yang dilakukan oleh fungsi tersebut.
% Contoh definisi fungsi
my_function(Param1, Param2) ->
% Tubuh fungsi
Result = Param1 + Param2,
Result.
3. Variabel
Variabel digunakan untuk menyimpan nilai. Hal ini dalam Erlang dimulai dengan huruf kapital atau garis bawah dan dapat diikuti oleh huruf besar, angka, atau garis bawah.
% Contoh penggunaan variabel
X = 10,
Y = X * 2.
4. Aturan Matching (Pattern Matching)
Hal ini menggunakan pola-pola untuk mencocokkan nilai. Aturan matching memungkinkan pemrosesan pesan dan pola-pola yang mendalam dalam definisi fungsi.
% Contoh aturan matching
factorial(0) ->
1;
factorial(N) ->
N * factorial(N – 1).
5. Proses
Proses adalah unit konkuren utama dalam Erlang. Setiap proses memiliki keberadaan terpisah dan berkomunikasi melalui pertukaran pesan. Proses dibuat dengan menggunakan fungsi spawn.
% Contoh pembuatan proses
start_process() ->
Pid = spawn(fun() -> process_function() end),
Pid ! {message, “Hello from main process”}.process_function() ->
receive
{message, Msg} ->
io:format(“Received message: ~p~n”, [Msg])
end.
6. Pertukaran Pesan
Komunikasi antar proses dalam Erlang dilakukan melalui pertukaran pesan. Pesan dapat dikirimkan dan diterima oleh proses menggunakan operator ! dan receive.
% Contoh pertukaran pesan
sender() ->
ReceiverPid = spawn(fun() -> receiver() end),
ReceiverPid ! {message, “Hello from sender”}.receiver() ->
receive
{message, Msg} ->
io:format(“Received message: ~p~n”, [Msg])
end.
7. Record
Record adalah struktur data yang digunakan untuk menyimpan sejumlah besar nilai terkait dalam satu entitas. Hal ini didefinisikan dengan menggunakan record dan dapat digunakan untuk membuat data yang lebih terstruktur.
% Contoh definisi record
-record(person, {name, age, address}).% Contoh penggunaan record
Person = #person{name=”John”, age=30, address=”123 Main St”}.
Framework Erlang
Erlang dilengkapi dengan Erlang/OTP (Open Telecom Platform), sebuah kerangka kerja yang menyediakan berbagai alat dan perpustakaan untuk memudahkan pengembangan aplikasi yang bersifat konkuren, fault-tolerant, dan distribusi. Berikut adalah beberapa komponen utama dari Erlang/OTP:
1. Supervisor
Supervisor adalah salah satu komponen utama dalam Erlang/OTP yang bertanggung jawab untuk mengelola dan mengawasi proses-proses lainnya. Supervisors dapat memonitor status proses dan memberikan tindakan yang sesuai jika terjadi kegagalan.
2. GenServer
GenServer (Generic Server) adalah salah satu jenis proses di Erlang/OTP yang menyediakan kerangka kerja untuk membuat server konkuren yang dapat menerima pesan dan menjalankan operasi berdasarkan pesan tersebut. Hal ini berguna untuk mengelola keadaan dan operasi yang bersifat konkuren.
3. GenFsm
GenFsm (Generic Finite State Machine) adalah komponen untuk membuat mesin keadaan yang dapat digunakan untuk mengelola keadaan atau status dalam suatu proses. Ini berguna untuk memodelkan perilaku yang kompleks dengan berbagai keadaan.
4. Application
Komponen Application memungkinkan pengembang untuk mengorganisir dan mengelola aplikasi secara modular. Ini dapat digunakan untuk menentukan dependensi aplikasi, menginisialisasi modul, dan mengontrol siklus hidup aplikasi.
5. Erlang Port
Erlang Port menyediakan mekanisme untuk berkomunikasi dengan program eksternal atau kode yang ditulis dalam bahasa pemrograman lain. Hal ini memungkinkan bahasa ini untuk berintegrasi dengan komponen eksternal atau sistem yang ditulis dalam bahasa lain.
6. Observer
Observer adalah utilitas bawaan yang disediakan oleh Erlang/OTP untuk memantau dan menganalisis kinerja sistemnya secara real-time. Ini memberikan informasi tentang proses-proses, penggunaan memori, dan kinerja aplikasi.
7. Erlang Distribution
Erlang Distribution memungkinkan node-node Erlang untuk berkomunikasi dan berkolaborasi dalam suatu sistem terdistribusi. Ini mendukung pembuatan aplikasi yang dapat dijalankan di lingkungan terdistribusi.
8. Distributed Database
Erlang/OTP juga menyediakan mekanisme untuk membangun basis data terdistribusi dengan menerapkan fitur seperti Mnesia, yang dapat digunakan untuk menyimpan dan mengambil data secara terdistribusi.
9. Distributed Process Registry
Komponen ini memungkinkan proses di berbagai node Erlang untuk mendaftarkan diri dalam suatu sistem terdistribusi, sehingga memungkinkan referensi proses di berbagai node.
Library Erlang
1. stdlib
Standar Library (stdlib) Erlang adalah perpustakaan dasar yang menyediakan berbagai modul dengan fungsi-fungsi umum. Modul-modul ini mencakup operasi dasar pada list, manipulasi string, pengaturan waktu, dan fungsi-fungsi pemrograman fungsional lainnya. stdlib adalah fondasi yang diperlukan untuk sebagian besar aplikasinya.
2. kernel
Kernel adalah bagian dari sistem operasinya yang menyediakan fungsi-fungsi dasar yang digunakan oleh aplikasi. Ini mencakup manajemen proses, waktu, serta operasi-operasi sistem lainnya. Kernel memastikan berbagai elemen sistem bekerja secara harmonis dalam lingkungan runtimenya.
3. crypto
Modul crypto menyediakan fungsionalitas kriptografi yang melibatkan enkripsi, hash, serta pembangkitan angka acak. Ini menjadi kunci dalam pengembangan aplikasi yang memerlukan lapisan keamanan yang kuat.
4. ssl
Perpustakaan ssl memungkinkan penggunaan protokol keamanan SSL/TLS untuk komunikasi aman melalui jaringan. Dengan ssl, bahasa ini dapat digunakan untuk membangun aplikasi yang menjaga keamanan data di transit.
5. mnesia
Mnesia adalah perpustakaan yang menyediakan basis data terdistribusi untuk aplikasinya. Basis data ini dapat diakses oleh berbagai node, menjadikannya solusi yang kuat untuk sistem terdistribusi yang memerlukan penyimpanan data bersama.
6. ets
Modul ets (Erlang Term Storage) menyediakan mekanisme penyimpanan dan pencarian data yang efisien untuk data yang dapat berubah di dalam proses. Ini membantu dalam menyimpan dan mengambil data dengan kecepatan tinggi.
7. wx
Perpustakaan wx memungkinkan pengembangan antarmuka pengguna grafis (GUI) dalam aplikasi Erlang. Dengan wx, pengembang dapat membuat aplikasi dengan antarmuka yang responsif dan menarik.
8. erl_interface
erl_interface adalah perpustakaan yang memungkinkan komunikasi antara aplikasi Erlang dan aplikasi eksternal yang ditulis dalam bahasa pemrograman lain. Ini memfasilitasi integrasi yang lancar antara Erlang dan komponen eksternal.
9. dialyzer
Dialyzer adalah alat analisis tipe statis yang membantu mendeteksi kesalahan tipe pada kodenya. Ini memungkinkan pengembang untuk meningkatkan keamanan dan kestabilan kode mereka.
Kesimpulan
Dalam dunia yang terus berkembang ini, pemrograman Erlang muncul sebagai pemain yang menarik dengan pendekatan yang berbeda. Keunikan dalam pemrograman konkuren, fault-tolerance, dan hot code swapping menjadikan bahasa inipilihan yang layak untuk sistem yang membutuhkan kinerja tinggi dan keandalan. Meskipun belum menjadi bahasa pemrograman yang sangat umum, keberlanjutan dan kontribusi dari komunitasnya menunjukkan bahwa bahasa ini memiliki potensi untuk terus bersinar dalam dunia pemrograman.
Jangan lewatkan peluang untuk mengasah potensimu dan menjadi bagian dari revolusi teknologi dan menjadi bagian perkembangan Digital Development bersama Wangsit. Daftarkan dirimu sekarang dan wujudkan impianmu dalam dunia teknologi!