Pertama-tama, saya setuju dengan jawaban OPINI SAYA yang benar tentang mempelajari Erlang. Ini sebagian besar bahasa fungsional (meskipun concurrency memainkan peran besar), dan semua fitur-fiturnya ditambahkan untuk menuju toleransi kesalahan dan kekokohan, yang tidak persis sama dengan tujuan desain seperti Javascript.
Kedua, meninggalkan Node.js untuk masuk ke Erlang agak salah tempat. Node.js adalah satu server / kerangka kerja yang berfungsi untuk melakukan segala sesuatu dengan cara yang digerakkan oleh peristiwa dengan bantuan panggilan balik. Erlang memiliki kerangka kerjanya sendiri (OTP), tetapi tidak pada tingkat yang sama sekali.
Jika Anda berencana untuk belajar Erlang, saya sarankan entri blog saya Surat Terbuka untuk Pemula Erlang (atau Penonton) sebagai bacaan intro sebelum menyelam ke tutorial.
Satu-satunya hal yang dapat Anda bandingkan dengan Erlang dan Node.js, dalam hal pola dan penggunaan adalah bagaimana mereka dikendalikan oleh peristiwa. Namun, ada dua perbedaan besar di sini. Model Node.js didasarkan pada callback yang terikat pada acara. Erlang didasarkan pada antrian pesan dan penerimaan selektif. Apa implikasinya di sana?
Pertama-tama, jika Anda melakukan hal-hal dengan cara berbasis panggilan balik, satu-satunya cara Anda membawa negara sekitar adalah baik itu global atau masuk ke pemrograman gaya kelanjutan-lewat. Kedua, Anda harus merawat matriks acara lengkap sendiri. Salah satu contohnya adalah jika kita membayangkan sebuah mesin state hingga yang sangat sederhana: sebuah mutaph semaphore, event-driven.
Semaphore mutex memiliki dua status: terkunci dan gratis. Setiap kali unit perhitungan tertentu (pekerja, proses, fungsi, atau utas) ingin mendapatkan akses ke mutex, ia harus memecat suatu peristiwa yang memberi tahu 'Saya tertarik'. Sekarang Anda harus memperhatikan jenis acara berikut:
- Mutex gratis dan Anda meminta untuk mendapatkan kunci
- Mutex dikunci oleh orang lain dan Anda ingin mendapatkan kunci
- Mutex dikunci sendiri dan Anda ingin membebaskan mutex
Kemudian Anda memiliki acara tambahan untuk dipertimbangkan, seperti penghentian waktu untuk menghindari kebuntuan:
- Mutex telah dikunci dan Anda menunggu terlalu lama, timer untuk melepaskan api
- Mutex telah dikunci dan Anda menunggu terlalu lama, mendapatkan kunci, lalu batas waktu dipadamkan
Kemudian Anda juga memiliki acara yang tidak terikat:
- Anda baru saja mengunci mutex sementara beberapa pekerja mengharapkannya gratis. Sekarang permintaan pekerja harus antri sehingga ketika gratis itu ditangani kembali
- Anda harus membuat semua pekerjaan tidak sinkron
Matriks acara menjadi kompleks sangat cepat. FSM kami di sini hanya memiliki 2 negara. Dalam kasus Erlang (atau bahasa apa pun dengan penerimaan selektif dan asinkron dengan peristiwa yang berpotensi sinkron), Anda harus memperhatikan beberapa kasus:
- Mutex gratis dan Anda meminta untuk mendapatkan kunci
- Mutex dikunci oleh orang lain dan Anda ingin mendapatkan kunci
- Mutex dikunci sendiri dan Anda ingin membebaskan mutex
Dan itu saja. Pengatur waktu ditangani dalam kasus yang sama seperti penerimaan dilakukan, dan untuk segala sesuatu yang berkaitan dengan 'tunggu sampai gratis', pesan-pesan secara otomatis diantrekan: pekerja hanya perlu menunggu balasan. Modelnya jauh, jauh lebih sederhana dalam kasus ini.
Ini berarti bahwa dalam kasus umum, CPS dan model berbasis callback seperti yang ada di node.js baik meminta Anda untuk menjadi sangat pintar dalam cara Anda menangani acara, atau meminta Anda untuk mengurus seluruh matriks peristiwa kompleks secara penuh, karena Anda harus dipanggil kembali pada setiap kasus tidak penting yang dihasilkan dari masalah waktu aneh dan perubahan negara.
Penerimaan selektif biasanya memungkinkan Anda untuk fokus hanya dalam subkelompok dari semua peristiwa potensial dan memungkinkan Anda untuk mempertimbangkan dengan lebih mudah tentang peristiwa dalam kasus itu. Perhatikan bahwa Erlang memiliki perilaku (pola desain / implementasi kerangka kerja) dari sesuatu yang disebut gen_event
. Implementasi gen_event memungkinkan Anda untuk memiliki mekanisme yang sangat mirip dengan apa yang digunakan di node.js jika itu yang Anda inginkan.
Akan ada poin lain yang membedakan mereka; Erlang memiliki penjadwalan preemptive sementara node.js membuatnya kooperatif, Erlang lebih cenderung untuk beberapa aplikasi skala besar (distribusi dan semua), tetapi Node.js dan komunitasnya biasanya lebih web-apt dan berpengetahuan tentang tren web terbaru. Ini masalah memilih alat terbaik, dan ini akan tergantung pada latar belakang Anda, jenis masalah Anda, dan preferensi Anda. Dalam kasus saya, model Erlang sangat cocok dengan cara berpikir saya. Ini belum tentu demikian untuk semua orang.
Semoga ini membantu.