DEV Community

Cover image for Berkenalan Dengan Bahasa Pemrograman Fungsional Elixir (Bagian 1)
Muzhawir Amri
Muzhawir Amri

Posted on • Updated on

Berkenalan Dengan Bahasa Pemrograman Fungsional Elixir (Bagian 1)

Daftar Isi

Paradigma Pemrograman Fungsional

Setiap bahasa pemrograman memiliki paradigmanya tersendiri yang memandu pengembang perangkat lunak dalam memecahkan masalah dan mengatur kode yang ditulisnya. Paradigma pemrograman adalah seperangkat aturan dan prinsip yang memandu proses pembuatan perangkat lunak. Ada banyak paradigma pemrograman, dan berikut adalah beberapa paradigma yang paling umum:

Imperative Programming (dari kata Latin imperare, yang berarti perintah) adalah salah satu paradigma pemrogaman tertua dan paling umum. Dalam paradigma ini, instruksi diberikan langkah demi langkah secara detail kepada komputer untuk menyelesaikan suatu tugas. Contoh bahasa yang menggunakan pendekatan ini antara lain JavaScript, Python, dan PHP.

Declarative Programming adalah paradigma yang menawarkan pendekatan berbeda dari imperative programming. Dalam paradigma ini, kita lebih fokus pada apa yang ingin dicapai, daripada bagaimana mencapai tujuan tersebut secara rinci. Sebagai contoh, dalam SQL, kita menulis query untuk menentukan data yang ingin diambil tanpa perlu memikirkan detail bagaimana DBMS memproses data tersebut. Begitu pula dalam Elixir, kita mendefinisikan fungsi berdasarkan hasil yang diinginkan tanpa harus mengkhawatirkan detail implementasinya. Pendekatan ini mengutamakan hasil akhir dan mengabstraksi proses eksekusinya.

Object-Oriented Programming (OOP) adalah paradigma yang banyak digunakan dalam bahasa pemrograman populer. Dalam OOP, kode diorganisir ke dalam objek yang dibuat dari kelas. Kelas bertindak sebagai template (blue print) yang mendefinisikan data dan fungsi objek, sehingga kode bisa digunakan kembali dan lebih mudah dikelola. Bahasa seperti Java, Python, dan JavaScript mengadopsi pendekatan ini.

Dan terakhir, paradigma yang akan kita bahas lebih lanjut di artikel ini.

Functional Programming adalah paradigma pemrograman di mana program dibuat dengan merangkai fungsi-fungsi kecil untuk menyelesaikan suatu tugas. Dalam paradigma ini, fungsi dianggap sebagai warga kelas satu (first-class citizen), artinya fungsi dapat diperlakukan seperti data biasa, dapat diteruskan sebagai argumen, dikembalikan dari fungsi lain, dan disimpan dalam sebuah variabel. Pendekatan ini berfokus pada penggunaan fungsi-fungsi murni yang menghindari perubahan data (mutable). Erlang dan Elixir adalah contoh bahasa yang mengadopsi paradigma ini.

Bahasa pemrograman Erlang dan Elixir menerapkan dua paradigma, yaitu declarative programming dan functional programming.

Prinsip Dasar Pemrograman Fungsional

Dengan menggunakan paradigma functional programming, prinsip dasar Elixir sangat berbeda dari, misalnya, empat pilar paradigma OOP. Berikut adalah beberapa prinsip dasar pemrograman fungsional:

  1. Kekekalan data (Immutability): Dalam pemrograman fungsional, data tidak dapat diubah setelah dibuat. Jika kita memerlukan "versi data yang dimodifikasi", kita harus membuat salinan baru, memodifikasinya, dan menyimpannya di lokasi memori yang berbeda. Pendekatan ini mengurangi kemungkinan kesalahan akibat perubahan data yang tidak diinginkan.
  2. Fungsi tanpa efek samping (Pure Function): Fungsi murni adalah fungsi yang hasilnya (output) sepenuhnya ditentukan oleh masukannya (input) dan tidak menimbulkan efek samping seperti mengubah variabel global atau melakukan operasi Input/Output. Dengan demikian, alur kode yang kita tulis dapat dengan mudah diprediksi dan lebih mudah untuk diuji.
  3. Fungsi sebagai warga kelas-satu (First-Class Function): Dalam pemrograman fungsional, fungsi diperlakukan sebagai warga kelas-satu (first-class citizen), yang berarti fungsi dapat diperlakukan seperti data biasa. Fungsi dapat diteruskan sebagai argumen, dikembalikan dari fungsi lain, dan disimpan dalam variabel. Pendekatan ini memberikan fleksibilitas dalam menulis dan menggunakan fungsi.
  4. Fungsi rekursif (Recursion): Rekursi adalah metode pemrograman fungsional yang menggantikan iterasi seperti for atau while. Alih-alih menggunakan variabel eksternal untuk mengontrol iterasi, fungsi rekursif memanggil dirinya sendiri berulang kali hingga mencapai keadaan khusus yang disebut base case yaitu menghentikan pengulangan lebih lanjut, sehingga fungsi dapat kembali ke panggilan sebelumnya. Pendekatan ini menjaga data tidak berubah sesuai dengan prinsip immutability pada poin pertama.

Platform Pengembangan Erlang

Sebelum kita membahas bahasa pemrograman Elixir, penting untuk memahami platform Erlang, mengapa? Karena Elixir dibangun di atas platform ini.

Erlang adalah platform pengembangan yang dibuat oleh perusahaan telekomunikasi Swedia, Ericsson, pada pertengahan tahun 1980-an. Tujuan utamanya adalah untuk mengembangkan jaringan telepon yang dapat beroperasi terus menerus tanpa terpengaruh oleh volume panggilan yang besar, bug perangkat lunak yang tidak terduga, atau pembaruan perangkat keras.

Erlang awalnya dikenal sebagai Ericsson Language, dan dikembangkan oleh Joe Armstrong, Robert Virding, dan Mike Williams. Meskipun awalnya dimiliki oleh Ericsson, Erlang dirilis sebagai perangkat lunak open source pada tahun 1998. Sejak saat itu, Erlang telah digunakan oleh berbagai perusahaan dalam bidang telekomunikasi, keuangan, pengembangan game multiplayer, dan masih banyak lagi. Mari kita bahas beberapa fitur platform ini:

Sistem Yang Selalu Tersedia

Joe Armstrong, salah satu pencipta Erlang, pernah mengatakan dalam sebuah wawancara dengan Rackspace pada tahun 2013 bahwa "Jika Java adalah tulis sekali, jalankan di mana saja, maka Erlang adalah tulis sekali, jalankan selamanya."

Ini mencerminkan tujuan dari desain Erlang: untuk menciptakan sistem yang selalu tersedia, mampu berjalan terus-menerus dan secara efisien menangani masalah yang tidak terduga. Untuk mencapai tujuan ini, Erlang harus memenuhi syarat-syarat berikut:

  • Dapat menoleransi kesalahan (Fault Tolerant): Erlang dirancang untuk memastikan sistem terus berfungsi meskipun terjadi gangguan, seperti kegagalan perangkat lunak atau perangkat keras. Sistem ini dapat pulih secara otomatis dan terus beroperasi tanpa memerlukan intervensi manual.
  • Skalabilitas perangkat keras (Scalability): Erlang memungkinkan sistem untuk ditingkatkan kapasitasnya tanpa perlu melakukan proses reboot. Ini memungkinkan penyesuaian dengan beban kerja yang meningkat tanpa mengganggu operasi yang sedang berlangsung.
  • Sistem terdistribusi (Distributed System): Erlang mendukung distribusi operasi sistem ke beberapa mesin, mengurangi risiko single point of failure yang dapat menghentikan seluruh sistem jika salah satu komponen gagal. Ini meningkatkan keandalan dan ketersediaan sistem.
  • Sistem yang responsif (Responsiveness): Sistem Erlang dirancang untuk menangani beban kerja berat dan permintaan yang tinggi dengan cepat, bahkan dalam situasi yang memerlukan respons mendadak.
  • Pembaruan secara langsung (Live Update): Erlang memungkinkan pembaruan sistem dilakukan tanpa harus mematikan server. Hal ini meminimalkan waktu henti dan memastikan layanan tetap tersedia selama pembaruan.

Konkurensi Di Mesin BEAM

Konkurensi adalah elemen inti Erlang, dan bahasa ini menggunakan pendekatan konkurensi yang berbeda dari model tradisional yang mengandalkan thread atau process berat pada sistem operasi. Konsep konkurensi di Erlang dikenal sebagai Erlang Process, yang sangat berbeda dari process atau thread pada sistem operasi konvensional. Erlang dapat mengelola ribuan bahkan jutaan proses ini dengan efisien. Mesin Virtual Erlang, juga dikenal sebagai Bogdan/Björn’s Erlang Abstract Machine (BEAM), menggunakan penjadwal (scheduler) sendiri untuk mendistribusikan proses di antara inti CPU yang tersedia. Kelebihan Erlang Process meliputi:

  • Toleransi Kesalahan (Fault Tolerance): Setiap proses Erlang berjalan secara independen dan tidak berbagi memori. Kegagalan satu proses tidak mempengaruhi proses lainnya. Dengan deteksi otomatis untuk proses yang gagal dan mekanisme pemulihan (recovery), Erlang menjamin stabilitas luar biasa bagi keseluruhan sistem.
  • Skalabilitas (Scalability): Erlang Process berkomunikasi melalui pesan asinkron, menghilangkan kebutuhan akan sinkronisasi yang rumit (seperti menggunakan locks atau semaphore). Pendekatan ini memungkinkan pengembangan sistem besar menjadi lebih terstruktur dan mudah dikelola.
  • Sistem Terdistribusi (Distribution System): Proses-proses dapat berkomunikasi secara efisien baik dalam satu server maupun antar server, mendukung terciptanya sistem terdistribusi. Ini meningkatkan skalabilitas dan keandalan sistem dengan menjalankan proses pada banyak mesin.
  • Responsivitas (Responsivity): Erlang dilengkapi dengan penjadwalan proaktif yang memastikan distribusi waktu yang adil di antara semua proses, mencegah dominasi CPU oleh satu proses. Manajemen I/O yang efisien memungkinkan pengaturan data masuk dan keluar dengan baik, meningkatkan responsivitas sistem. Selain itu, pengumpulan sampah (garbage collection) yang dilakukan secara terpisah untuk setiap proses membantu menjaga kinerja sistem tetap efisien, memastikan aktivitas satu proses tidak membebani proses lain.

Dengan semua fitur tersebut, Erlang sangat cocok untuk aplikasi server-side yang memerlukan keandalan dan skalabilitas tinggi. Karena kemampuannya dalam menangani sistem besar dan kompleks.

Sistem Berbasis Server

Erlang adalah platform serbaguna yang tidak hanya cocok untuk aplikasi desktop atau perangkat tertanam (embedded), tetapi juga sangat efektif untuk menjalankan sistem di sisi server. Dalam konteks server, Erlang tidak hanya mengelola server yang merespons permintaan klien, tetapi juga sistem yang lebih kompleks, termasuk manajemen berbagai proses latar belakang (background processes) dan penggunaan memori antar server.

Sistem server-side biasanya terdiri dari beberapa komputer yang bekerja bersama untuk menyediakan layanan bisnis. Setiap komputer menangani bagian berbeda dari keseluruhan tugas, membantu mendistribusikan beban kerja secara merata. Jika satu server mengalami masalah, sistem dapat diatur sehingga server lain dapat mengambil alih, meminimalkan gangguan layanan.

Dalam skenario seperti ini, Erlang sangat berguna karena mendukung aplikasi yang berjalan di beberapa server secara bersamaan, mudah diskalakan sesuai kebutuhan, dan dapat mendistribusikan tugas ke server yang berbeda dengan efisien. Kemampuan Erlang dalam mengelola sistem besar dan kompleks memungkinkan pengembang merancang sistem yang tidak hanya efisien dan efektif, tetapi juga tahan terhadap kesalahan.

Platform Pengembangan Yang Lengkap

Erlang lebih dari sekadar bahasa pemrograman; ia adalah platform pengembangan lengkap yang terdiri dari beberapa komponen utama:

  • Bahasa pemrograman Erlang: Erlang adalah bahasa pemrograman fungsional yang dirancang untuk pengembangan aplikasi konkuren secara efisien. Kode Erlang dikompilasi menjadi bytecode yang dapat dijalankan di mesin virtual BEAM (Bogdan/Björn Erlang Abstract Machine). Mesin virtual ini memungkinkan program Erlang berfungsi di berbagai platform tanpa modifikasi, menjadikannya sangat portabel dan efisien untuk tugas-tugas yang memerlukan konkurensi.
  • Mesin Virtual BEAM: inilah inti dari sistem Erlang, mengelola isolasi antar-proses untuk memastikan proses berjalan independen tanpa saling mengganggu, serta komunikasi antar-proses yang efisien. BEAM juga bertanggung jawab atas penyeimbangan beban kerja dan memastikan responsivitas sistem secara keseluruhan.
  • Kerangka kerja Open Telecom Platform (OTP): OTP adalah kerangka kerja yang menyederhanakan pengembangan aplikasi berbasis Erlang. Ini mempermudah manajemen konkurensi, distribusi, deteksi dan pemulihan kesalahan, pengemasan kode ke pustaka (library), deployment sistem, dan pembaruan kode secara langsung. OTP dianggap sangat andal dan sering dianggap tidak terpisahkan dari Erlang, sehingga distribusi rilisnya disebut sebagai Erlang/OTP.
  • Alat Pengembangan: Erlang menyediakan berbagai alat (tools) yang mendukung pembuatan kode, pengelolaan aplikasi, dan administrasi. Alat-alat ini termasuk utilitas untuk inisialisasi instance BEAM, pembuatan rilis, shell interaktif, dan koneksi ke instance BEAM yang aktif. Alat ini mendukung berbagai sistem operasi seperti Linux, Unix, dan Windows, memudahkan penerapan dan pengelolaan aplikasi Erlang di berbagai lingkungan pengembangan.

Erlang adalah proyek open source, yang berarti kodenya tersedia secara bebas dan dapat diakses melalui situs web resmi Erlang atau repositori GitHub Erlang. Ericsson, yang berperan penting dalam pengembangan awalnya, terus aktif berkontribusi dalam pengembangan dan rilis versi baru secara rutin.

Artikel berikutnya akan membahas Elixir, yang menjadi fokus utama. Mari kita eksplorasi lebih dalam aspek dan keunggulan yang ditawarkan oleh Elixir serta perbandingannya dengan Erlang!

Referensi

Top comments (0)