Saya melihat banyak omong kosong online tentang bagaimana Erlang menendang pantat node.js 'di hampir setiap kategori yang mungkin. Jadi saya ingin belajar Erlang, dan mencobanya, tapi inilah masalahnya. Saya menemukan bahwa saya memiliki waktu yang lebih sulit untuk mengambil Erlang daripada saya mengambil node.js. Dengan node.js, saya dapat memilih proyek yang relatif kompleks, dan dalam sehari saya memiliki sesuatu yang berfungsi. Dengan Erlang, saya menghadapi hambatan, dan tidak berjalan secepat itu.
Jadi .. bagi mereka yang lebih berpengalaman, apakah Erlang rumit untuk dipelajari, atau apakah saya hanya melewatkan sesuatu? Node.js mungkin tidak sempurna, tapi sepertinya aku bisa menyelesaikannya.
Jawaban:
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:
Kemudian Anda memiliki acara tambahan untuk dipertimbangkan, seperti penghentian waktu untuk menghindari kebuntuan:
Kemudian Anda juga memiliki acara yang tidak terikat:
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:
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.
sumber
Erlang tidak rumit untuk dipelajari, itu hanya asing bagi pola pikir bahwa Constant Chambers (99,44%) dari coders telah belajar sebagai cara kerja pemrograman. Masalah yang Anda hadapi kemungkinan hanya disorientasi konseptual daripada kompleksitas yang sebenarnya.
Berikut adalah beberapa fitur alien dari Erlang yang akan menggigit programmer yang khas:
Jadi, belajar Erlang akan lebih menjadi tantangan bagi sebagian besar programmer daripada belajar Node.js - terutama jika programmer sudah terbiasa dengan JavaScript. Pada akhirnya, bagaimanapun, setelah Anda melewati penghalang konseptual, saya serahkan bahwa pengkodean Erlang akan menjadi lebih kompleks daripada pengkodean Node.js yang setara. Ini untuk beberapa alasan:
Lanjutkan slogging di Erlang jika Anda bisa, dan jika Anda belum melakukannya, kunjungi Visit You Some Erlang for Great Good untuk pengenalan yang lembut dan (kebanyakan-) lucu untuk konsep-konsep Erlang.
sumber
Ada beberapa perbedaan signifikan antara Erlang dan Node
Yang pertama adalah simpul itu Javascript, yang artinya adalah bahasa yang sangat umum yang berbagi banyak sifat dengan bahasa yang banyak orang kenal sehingga biasanya lebih mudah untuk bangkit dan berjalan. Erlang memiliki sintaksis yang sering aneh dan asing bagi kebanyakan orang, dan meskipun sebagai bahasa jauh lebih sederhana daripada javascript, Erlang sedikit lebih terbiasa karena keunikannya.
Yang kedua adalah bahwa Erlang memiliki model konkurensi berbagi apa pun yang sangat khusus, mengharuskan Anda untuk berpikir dengan cara yang berbeda untuk menyelesaikan masalah, yang merupakan hal yang baik (TM)
Yang penting terakhir adalah bahwa Erlang dikembangkan oleh perusahaan komersial dan open source setelah fakta, hanya 2 tahun yang lalu atau lebih orang dapat benar-benar melihat komitmen individu dalam kontrol sumber dan bahkan sekarang saya tidak berpikir semua pengembang erlang telah pindah untuk repo github publik untuk perkembangan mereka. node.js dibangun di dalam komunitas sejak awal, ini berarti dukungan komunitasnya jauh lebih baik, sudah ada jauh lebih banyak perpustakaan untuk node, lebih banyak dokumentasi komunitas, lebih banyak contoh langsung, manajer paket yang ada di mana-mana dll. Erlang mengejar ketinggalan dalam hal ini tetapi masih jauh lebih besar untuk bangkit.
Node akan membiarkan Anda memprogram hal-hal yang menyenangkan dengan cukup cepat dan relatif bebas rasa sakit, itu masih memiliki rasa sakit yang tumbuh sehubungan dengan aplikasi besar yang erlang telah dipecahkan untuk waktu yang lama. Erlang akan mengubah cara Anda memprogram dan (imo) menjadikan Anda seorang programmer yang lebih baik, namun itu tidak akan membuat hidup Anda lebih mudah pada awalnya. Keduanya menyenangkan dengan cara yang berbeda.
sumber