Apakah ada hal-hal yang bisa dilakukan Elixir yang tidak bisa dilakukan Erlang, atau sebaliknya?

102

Pertanyaan ini ada dalam konteks Beam VM dan kapabilitas yang disediakannya, bukan dalam konteks umum tentang apa yang dapat dilakukan oleh bahasa lengkap Turing. Saya ingin menginvestasikan waktu untuk mempelajari Erlang murni atau Elixir. Saya mendapatkan perbedaan mendasar antara keduanya dan saya condong ke Elixir karena makro, sintaks yang lebih baik, dan pengembangan bahasa yang lebih cepat hari ini.

Pertanyaan saya adalah: jika saya memilih Elixir, apakah saya akan tersandung pada sesuatu yang tidak dapat saya lakukan di dalamnya, tetapi dapat dilakukan di Erlang? Dapatkah saya menggunakan semua OTP, semua perpustakaan Erlang, pemuatan ulang kode, dll. Dengan Elixir?

Saya tidak menanyakan preferensi seseorang di antara keduanya; hanya fakta tentang kemungkinan bahasa. Lebih disukai dari seseorang yang menggunakan keduanya dalam produksi.

Saša Šijak
sumber
19
@ landak bukan opini, fakta. Pertanyaannya adalah "Pertanyaan saya adalah jika saya memilih Elixir, apakah saya akan tersandung pada sesuatu yang tidak dapat saya lakukan, tetapi dapat dilakukan di Erlang? Dapatkah saya menggunakan semua OTP, semua perpustakaan Erlang, memuat ulang kode, dll. dengan Elixir?" dan jawabannya berdasarkan fakta bukan opini.
Saša Šijak
4
Untuk pertanyaan itu, jawabannya adalah: semua yang dapat Anda lakukan di Erlang dimungkinkan di Elixir. Tetapi judulnya menunjukkan bahwa pertanyaannya adalah apa yang harus Anda investasikan dan di sini jawabannya adalah "tergantung". Apa yang ingin kamu lakukan? Untuk aplikasi web Elixir jauh lebih bagus, karena dibuat untuk mengatasi masalah ini. Untuk beberapa jenis sistem terdistribusi, Anda dapat menemukan kesederhanaan superior Erlang. Kekurangan fitur seringkali merupakan hal yang baik. Belajar hanya Erlang akan membantu Anda fokus pada hal yang paling penting: OTP.
tkowal
2
@ SašaŠijak Saya mengubah judul pertanyaan, menjadi IMO yang lebih mencerminkan tentang apa - kembalikan jika Anda tidak setuju.
Paweł Obrok
2
@ PawełObrok hasil edit yang bagus, ini dengan tepat merangkum apa yang ingin saya ketahui
Saša Šijak
3
setiap kali saya membuat pertanyaan semacam ini, saya mendapatkan -10
suara negatif

Jawaban:

37

Sekadar pengantar - Saya hanya menggunakan Elixir dalam produksi dan bukan Erlang.

Jujur saya akan merekomendasikan Elixir. Ini adalah pendapat saya dan belum tentu tepat untuk Anda, tetapi di bawah ini saya akan mencantumkan alasan saya mengapa.

  1. Produktivitas: Saya berasal dari latar belakang Ruby / Rails sehingga sintaks dan gaya Elixir adalah sesuatu yang sangat saya kenal. Salah satu faktor utama yang membantu saya menentukan apakah akan belajar suatu bahasa atau tidak adalah seberapa produktif saya di dalamnya - terutama mengapa saya memilih Ruby. Elixir juga sama. Saya bisa bekerja secepat saya bisa menggunakan Ruby dengan semua manfaat tambahan dari concurrency dan pencocokan pola.
  2. Erlang: Karena Elixir dibangun di atas Erlang dan dikompilasi ke erlang dan beam vm, Anda memiliki akses ke setiap modul dan paket erlang. Jadi jika Anda khawatir tentang penggunaan elixir dan kehilangan semua fitur Erlang, Anda tidak boleh begitu. Elixir bahkan memiliki implementasi sendiri untuk sebagian besar fitur Erlang / OTP yang lebih besar seperti GenServer, GenEvent, dll.
  3. Komunitas / Sumber: Komunitas Elixir benar-benar hebat. Saluran slack sangat populer dan merupakan cara yang bagus untuk mendapatkan jawaban atas pertanyaan pemula. Sudah ada beberapa buku bagus yang ditulis dalam bahasa tersebut (Programming Elixir 1.2 - Dave Thomas, Author of the Ruby Pickaxe) juga yang membuat mempelajari bahasa ini sangat mudah.

Sungguh, jika Anda memiliki masalah dengan keduanya, Anda mungkin akan sampai pada keputusan yang sama bahwa Elixir adalah bahasa yang jauh lebih baik dengan semua fitur Erlang + Lainnya. Ini sedang meningkat juga, saya tidak dapat mengingat angka pastinya tetapi saya ingat membaca sesuatu dari situs web Hex (manajer paket) tentang peningkatan yang cukup besar dalam unduhan paket.

Harrison Lucas
sumber
14
Elixir tidak mengkompilasi ke Erlang, itu mengkompilasi ke kode BEAM. Elixir TIDAK mirip dengan coffeescript, et. Al. yang hanya menulis JS.
Peter R
64

Anda tidak boleh tersandung pada apa pun yang dapat Anda lakukan di salah satu yang tidak dapat Anda lakukan di yang lain, karena Anda dapat dengan bebas memanggil kode Elixir dari Erlang dan sebaliknya. Anda bahkan dapat dengan mudah mencampur file Erlang dan Elixir dalam satu proyek.

Dalam Elixir:

:erlang_module.erlang_function(args)

dalam bahasa Erlang:

'Elixir.ElixirModule':elixir_function(args)
Paweł Obrok
sumber
2
Terkadang bisa sedikit rumit saat membuat rilis dengan dependensi bersarang atau kasus yang sangat spesifik lainnya, tetapi saya pikir ini pasti jawaban yang tepat. CATATAN : jika berjalan pada mesin yang sangat terbatas sumber daya, menambahkan ketergantungan Elixir dan Elixir ke rilis bisa lebih berat dalam hal memori. Jadi, jika saya tidak salah, terkadang dapat terjadi bahwa tetap menggunakan Erlang murni mungkin memiliki manfaat untuk menghemat beberapa Megabyte memori, sehingga lebih mudah untuk menghindari kerusakan saat tidak ada ruang tersisa untuk memperluas VM.
Laymer
37

TL; DR - Mulailah dengan Elixir

Erlang memiliki kurva belajar yang lebih curam dibandingkan dengan Elixir. Setelah Anda mulai mempelajari Elixir, Anda akan secara otomatis mulai mempelajari Erlang. Oleh karena itu, mulailah dengan Elixir. Elixir ditulis dalam Erlang dan Elixir. Lihat distribusi di Github (karena Elixir penuh dengan makro alias pemrograman meta). Distribusi Kode Proyek Elixir

Anda dapat menggunakan Elixir dengan Erlang dan sebaliknya, karenanya ekosistem Erlang penuh dengan 20+ tahun perpustakaan.

Lebih detail dari Erlang Solutions

Produktivitas 'di luar kotak' Elixir dicapai dengan fokus yang kuat pada perkakas dan kenyamanan dalam ekspresi manipulasi data. Desain sistem sama di Elixir dan Erlang, tetapi Elixir menghapus banyak kode boilerplate dan lebih mudah untuk diperluas. Penghapusan boilerplate meningkatkan produktivitas dan memungkinkan pemrogram mendapatkan umpan balik lebih cepat - sangat penting saat Anda ingin meluncurkan produk ke pasar secepat mungkin. Lebih sedikit boilerplate juga menghasilkan pengembang yang bahagia, dan pengembang yang bahagia adalah pengembang yang produktif dan tidak mengejutkan.

Posting blog Joe Armstrong (penemu Erlang) tentang Elixir

Mulailah di sini untuk mempelajari tentang Elixir - Memulai

Setelah Anda merasa ini berjalan dengan baik, lanjutkan ke latihan Latihan dan sumber daya lainnya .

Sairam
sumber
3

Ada beberapa hal. Saya pikir Anda tidak dapat membuat fungsi anon rekursif di Elixir. Sekarang untuk bersikap adil, ini adalah sesuatu yang dalam 8+ tahun Erlang saya rasa saya tidak pernah perlu melakukannya, dan jika saya melakukannya, itu dapat dilakukan dengan mudah dengan cara lain. Mungkin ada beberapa hal lain seperti itu yang sejujurnya bisa Anda abaikan.

Secara umum, untuk hal-hal yang kebanyakan orang peduli tentang apa pun yang dapat Anda Lakukan di Erlang, Anda dapat melakukannya di Elixir dan sebaliknya. Komunitas di sisi Elixir tampaknya lebih aktif jadi saya sarankan untuk memulainya dari sana. Saya baru saja pindah dari Erlang ke Elixir dan dengan pengecualian beberapa hal mewah di Proper saya dapat mengatakan bahwa ini adalah transisi yang cukup mudah

Zachary K
sumber