01 – Mari Belajar Bahasa Pemrograman Fungsional Elixir! (Bagian 1)

RMAG news

Daftar Isi

Paradigma Pemrograman Fungsional

Prinsip Dasar Pemrograman Fungsional

Platform Pengembangan Erlang

Sistem Yang Selalu Tersedia
Konkurensi Di Mesin BEAM
Sistem Berbasis Server
Platform Pengembangan Yang Lengkap

Referensi

Paradigma Pemrograman Fungsional

Setiap bahasa pemrograman memiliki paradigmanya sendiri yang memandu pemrogram dalam memecahkan masalah dan mengatur kode yang mereka tulis. 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 tertua dan paling sering digunakan. 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 menawarkan pendekatan kebalikan dari imperative programming. Dalam paradigma ini, kita lebih fokus pada apa yang ingin kita capai dibandingkan bagaimana melakukannya secara detail. Misalnya pada SQL, kita hanya perlu menulis query untuk mengambil data tanpa harus memikirkan bagaimana DBMS memproses data tersebut. Elixir juga mengikuti paradigma ini, di mana kita mendefinisikan fungsi tanpa mengkhawatirkan implementasinya.

Object-Oriented Programming (OOP) adalah paradigma yang banyak digunakan dalam bahasa pemrograman populer. Dalam paradigma ini, kode dibagi menjadi beberapa kelas yang mewakili cetak biru objek dengan properti dan perilaku tertentu yang dapat digunakan kembali berkali-kali. Bahasa seperti JavaScript, Python dan PHP juga mengadopsi pendekatan ini.

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

Functional Programming, paradigma ini adalah paradigma pemrograman di mana program dibuat dengan merangkai fungsi-fungsi kecil untuk melakukan tugas tertentu. Dalam paradigma ini, fungsi dianggap sebagai warga kelas satu (first-class citizen) dan program dibangun dengan menggabungkan fungsi-fungsi tersebut. Erlang dan Elixir adalah contoh bahasa yang menggunakan paradigma ini.

Prinsip Dasar Pemrograman Fungsional

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

Imutablilitas / kekekalan data (Immutability): Dalam pemrograman fungsional, data tidak dapat diubah lagi 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.

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 I/O. Hal ini membuat alur kode yang kita tulis dapat diprediksi dan mudah untuk diuji.

Fungsi sebagai warga kelas-satu (First-Class Functions): Dalam pemrograman fungsional, fungsi diperlakukan sebagai warga kelas-satu. Artinya, fungsi dapat disimpan dalam variabel, diteruskan sebagai argumen, dan mengembalikan fungsi lainnya. Pendekatan ini memberikan banyak fleksibilitas dalam menulis dan menggunakan fungsi, yang memungkinkan Kita menulis kode dengan lebih jelas dan mudah dipahami.

Fungsi rekursif (Recursion): Rekursi adalah metode pemrograman fungsional yang menggantikan iterasi tradisional 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 imutabilitas data 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 1980an. 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, platform ini dikembangkan oleh Joe Armstrong, Robert Virding, dan Mike Williams. Perangkat lunak ini awalnya dimiliki oleh Ericsson, namun kemudian dirilis sebagai perangkat lunak open source pada tahun 1998. Sejak itu, Erlang telah digunakan oleh berbagai perusahaan di bidang telekomunikasi, keuangan, pengembangan game multiplayer, dan banyak lainnya. 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.”

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

Dapat menoleransi kesalahan (Fault Tolerant): Erlang dirancang untuk memastikan sistem terus bekerja meskipun ada gangguan, seperti kegagalan perangkat lunak atau perangkat keras. Sistem ini dapat pulih dengan sendirinya dan terus beroperasi tanpa intervensi.

Skalabilitas perangkat keras (Scalability): Erlang memungkinkan sistem untuk ditingkatkan tanpa perlu melakukan boot ulang (reboot).

Sistem terdistribusi (Distributed System): Operasi sistem dapat diredundansi dan didistribusikan ke lebih dari satu mesin untuk mengantisipasi terjadinya single point of failure, yang dapat menyebabkan seluruh sistem berhenti berfungsi jika satu komponen mengalami kegagalan.

Sistem yang responsif (Responsiveness): Sistem Erlang dirancang untuk merespons beban kerja berat dan permintaan dengan volume yang besar secara mendadak.

Pembaruan secara langsung (Live Update): Erlang memungkinkan pembaruan sistem dilakukan secara langsung tanpa mematikan server, meminimalkan waktu henti, dan memastikan layanan tidak terganggu.

Konkurensi Di Mesin BEAM

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

Toleransi Kesalahan (Fault Tolerance): Setiap proses Erlang berjalan secara independen, tidak berbagi memori, dan kegagalan satu proses tidak mempengaruhi proses lainnya. Berkat deteksi otomatis proses yang gagal dan mekanisme pemulihan (recovery), ini menjamin stabilitas luar biasa untuk 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 yang mendukung terciptanya sistem terdistribusi. Ini meningkatkan skalabilitas dan keandalan seluruh sistem dengan menjalankan proses pada banyak mesin.

Responsivitas (Responsivity): Erlang dilengkapi dengan penjadwalan proaktif yang memastikan distribusi waktu yang adil di antara semua proses, sehingga menghindari dominasi CPU oleh satu proses saja. Manajemen I/O yang cerdas memungkinkan pengaturan efektif terhadap data yang masuk dan keluar, meningkatkan responsivitas sistem. Selain itu, pengumpulan sampah (garbage collection) yang dilakukan secara terpisah per proses membantu menjaga kinerja sistem agar tetap efisien dengan memastikan bahwa aktivitas satu proses tidak membebani proses lain.

Dengan semua fitur tersebut, Erlang sangat cocok untuk aplikasi di server-side yang memerlukan keandalan dan skalabilitas tinggi, serta sering digunakan untuk mengembangkan aplikasi yang besar dan kompleks.

Sistem Berbasis Server

Erlang merupakan platform serbaguna yang tidak hanya digunakan untuk aplikasi desktop atau perangkat tertanam (embedded), tetapi juga sangat baik untuk menjalankan sistem di sisi server. Dalam kasus server, fungsi Erlang tidak terbatas pada mengelola server yang merespons permintaan klien. Erlang juga mengelola sistem yang lebih kompleks, mengelola berbagai proses latar belakang (background process), dan mengelola penggunaan memori antar server.

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

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

Platform Pengembangan Yang Lengkap

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

Bahasa pemrograman Erlang: Erlang adalah bahasa pemrograman fungsional yang dirancang untuk membuat pengembangan program secara konkuren menjadi lebih efisien dan mudah. Kode yang ditulis dalam Erlang diubah menjadi bytecode yang dapat dieksekusi di mesin virtual yang disebut BEAM (Bogdan/Björn Erlang Abstrak Machine). Mesin virtual ini memungkinkan program Erlang berjalan di berbagai platform tanpa modifikasi, menjadikannya sangat portabel dan efisien untuk menyelesaikan tugas-tugas yang memerlukan konkurensi.

Mesin Virtual BEAM: BEAM adalah inti dari sistem operasi Erlang. Mesin ini bertanggung jawab untuk mengelola isolasi antar-proses—memastikan bahwa proses berjalan secara independen tanpa mengganggu proses lain—dan komunikasi antar-proses yang efisien. Selain itu, BEAM juga mengelola penyeimbangan beban kerja dan memastikan responsivitas seluruh sistem.

Kerangka kerja Open Telecom Platform (OTP): Open Telecom Platform (OTP) adalah kerangka kerja serbaguna yang dirancang untuk menyederhanakan pengembangan aplikasi berbasis Erlang. Kerangka kerja ini membantu menyederhanakan banyak tugas pengembangan umum, seperti manajemen konkurensi dan distribusi, deteksi dan pemulihan kesalahan, mengemas kode ke dalam pustaka (library), deployment sistem, dan pembaruan kode secara langsung. OTP telah terbukti keandalannya di banyak dan sering dianggap tidak terpisahkan dari Erlang, sehingga sering disebut sebagai Erlang/OTP.

Alat Pengembangan: Pengembangan Erlang memiliki beberapa alat (tools) yang mendukung proses mulai dari pembuatan kode hingga manajemen aplikasi. Alat Ini berisi utilitas untuk membuat kode, menginisialisasi instance BEAM, membuat rilis yang dapat digunakan, menjalankan shell interaktif, dan menghubungkan ke instance BEAM yang aktif. Alat-alat ini dirancang untuk mendukung berbagai sistem operasi seperti Linux, Unix dan Windows. Hal ini membuat Erlang mudah digunakan di berbagai lingkungan pengembangan, sehingga memudahkan pengembang untuk menerapkan dan mengelola aplikasi Erlang di mana saja.

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

Pada artikel berikutnya, kita akan membahas tentang Elixir, yang menjadi fokus utama. Mari kita jelajahi lebih lanjut aspek dan keunggulan yang ditawarkan oleh Elixir serta perbandingannya dengan Erlang!

Referensi

Imperative programming. (2024, May 23). IONOS Digitalguide. Retrieved from https://www.ionos.com/digitalguide/websites/web-development/imperative-programming

Declarative programming. (2024, May 23). Toptal. Retrieved from https://www.toptal.com/software/declarative-programming

Juric, S. (2024). Elixir in action (3rd ed.). Manning Publications.

Please follow and like us:
Pin Share