Có những điều Elixir có thể làm mà Erlang không thể, hoặc ngược lại?


102

Câu hỏi này nằm trong ngữ cảnh của Beam VM và các khả năng mà nó cung cấp, không phải trong bối cảnh chung về những gì một ngôn ngữ hoàn chỉnh Turing có thể làm. Tôi muốn đầu tư thời gian để học Erlang hoặc Elixir thuần túy. Tôi nhận ra sự khác biệt cơ bản giữa hai ngôn ngữ này và tôi đang nghiêng về Elixir vì macro, cú pháp tốt hơn và ngôn ngữ ngày nay phát triển nhanh hơn.

Câu hỏi của tôi là: nếu tôi chọn Elixir, liệu tôi có vấp phải điều gì đó mà tôi không thể làm trong đó, nhưng có thể làm ở Erlang không? Tôi có thể sử dụng tất cả nội dung OTP, tất cả thư viện Erlang, tải lại mã, v.v. với Elixir không?

Tôi không yêu cầu ai đó ưu tiên giữa hai người; chỉ là sự thật về khả năng của các ngôn ngữ. Tốt hơn là từ một người đã sử dụng cả hai trong sản xuất.


19
@hedgehog không phải là một ý kiến, thực tế. câu hỏi là "Câu hỏi của tôi là nếu tôi chọn Elixir, liệu tôi có vấp phải điều gì đó mà tôi không thể làm được, nhưng có thể làm trong Erlang không? Tôi có thể sử dụng tất cả nội dung OTP, tất cả thư viện Erlang, tải lại mã, v.v. với Elixir không?" và câu trả lời dựa trên sự thật chứ không phải quan điểm.
Saša Šijak

4
Đối với câu hỏi đó, câu trả lời là: mọi thứ bạn có thể làm trong Erlang đều có thể thực hiện được trong Elixir. Nhưng tiêu đề gợi ý rằng câu hỏi là bạn nên đầu tư vào cái gì và ở đây câu trả lời là "nó phụ thuộc". Bạn muốn làm gì? Đối với các ứng dụng web Elixir đẹp hơn nhiều, vì nó được tạo ra để giải quyết vấn đề này. Đối với một số loại hệ thống phân tán, bạn có thể tìm thấy sự đơn giản của Erlang vượt trội. Thiếu các tính năng thường là điều tốt. Chỉ học Erlang sẽ giúp bạn tập trung vào bit quan trọng nhất: OTP.
tkowal

2
@ SašaŠijak Tôi đã thay đổi tiêu đề của câu hỏi để IMO phản ánh rõ hơn nội dung của câu hỏi - hoàn nguyên nếu bạn không đồng ý.
Paweł Obrok

2
@ PawełObrok chỉnh sửa lớn, nó đúng tóm tắt những gì tôi đang quan tâm để biết
Saša Šijak

3
Mỗi khi tôi đưa ra những câu hỏi kiểu này, tôi nhận được -10
phiếu phản đối

Câu trả lời:


37

Chỉ để nói đầu - Tôi chỉ sử dụng Elixir trong sản xuất chứ không phải Erlang.

Tôi thành thật muốn giới thiệu Elixir. Đây là ý kiến ​​của tôi và không nhất thiết phải phù hợp với bạn, nhưng dưới đây tôi sẽ liệt kê những lý do tại sao.

  1. Năng suất: Tôi xuất thân từ nền tảng Ruby / Rails nên cú pháp và kiểu Elixir là thứ rất quen thuộc với tôi. Một trong những yếu tố chính giúp tôi xác định có nên học một ngôn ngữ hay không là tôi có thể học ngoại ngữ hiệu quả như thế nào - chủ yếu là lý do tôi chọn Ruby. Elixir cũng vậy. Tôi có thể làm việc nhanh như Ruby với tất cả các lợi ích bổ sung của tính đồng thời và đối sánh mẫu.
  2. Erlang: Vì Elixir được xây dựng trên Erlang và biên dịch xuống erlang và chùm vm, bạn có quyền truy cập vào mọi mô-đun và gói erlang. Vì vậy, nếu bạn lo lắng về việc sử dụng elixir và bỏ lỡ tất cả các tính năng của Erlang, bạn không nên. Elixir thậm chí còn có các triển khai riêng của hầu hết các tính năng Erlang / OTP lớn hơn như GenServer, GenEvent, v.v.
  3. Cộng đồng / Tài nguyên: Cộng đồng Elixir thực sự là một cộng đồng tuyệt vời. Kênh slack thực sự phổ biến và là cách tuyệt vời để nhận một số câu trả lời cho các câu hỏi dành cho người mới bắt đầu. Đã có một số cuốn sách thực sự tốt được viết về ngôn ngữ này (Lập trình Elixir 1.2 - Dave Thomas, Tác giả của Ruby Pickaxe) cũng giúp việc tiếp cận ngôn ngữ này trở nên thực sự dễ dàng.

Thực sự, nếu bạn có vấn đề với cả hai, bạn có thể sẽ đi đến cùng một quyết định rằng Elixir là một ngôn ngữ đẹp hơn nhiều với tất cả các tính năng của Erlang + More. Nó cũng đang tăng lên, tôi không thể nhớ con số chính xác nhưng tôi nhớ đã đọc một cái gì đó từ trang web Hex (trình quản lý gói) về sự gia tăng đáng kể trong lượt tải xuống gói.


14
Elixir không biên dịch xuống Erlang, nó biên dịch xuống mã BEAM. Elixir KHÔNG tương tự như coffeescript, et. al. mà chỉ cần viết JS.
Peter R

64

Bạn không nên vấp phải bất cứ điều gì bạn có thể làm trong cái mà bạn không thể làm ở cái kia, vì bạn có thể thoải mái gọi mã Elixir từ Erlang và ngược lại. Bạn thậm chí có thể dễ dàng trộn các tệp Erlang và Elixir trong một dự án.

Trong Elixir:

:erlang_module.erlang_function(args)

ở Erlang:

'Elixir.ElixirModule':elixir_function(args)

2
Đôi khi có thể hơi phức tạp khi xây dựng các bản phát hành với các phụ thuộc lồng nhau hoặc các trường hợp rất cụ thể khác nhưng tôi nghĩ đây chắc chắn là câu trả lời đúng. LƯU Ý : nếu chạy trên các máy hạn chế tài nguyên, việc thêm phụ thuộc Elixir và Elixir vào bản phát hành có thể nặng hơn về bộ nhớ. Vì vậy, nếu tôi không nhầm, đôi khi có thể xảy ra trường hợp gắn bó với Erlang thuần túy có thể có lợi ích là tiết kiệm một vài Megabyte bộ nhớ, giúp tránh sự cố dễ dàng hơn khi không còn dung lượng để mở rộng VM.
Lớp học

37

TL; DR - Bắt đầu với Elixir

Erlang có đường cong học tập dốc hơn so với Elixir. Khi bạn bắt đầu học Elixir, bạn sẽ tự động bắt đầu học Erlang. Do đó, hãy bắt đầu với Elixir. Elixir được viết bằng Erlang và Elixir. Xem phân phối trên Github (vì Elixir chứa đầy macro hay còn gọi là lập trình siêu). Elixir Project Code distribution

Bạn có thể sử dụng Elixir với Erlang và ngược lại, do đó có đầy đủ hệ sinh thái Erlang với hơn 20 năm thư viện.

Thêm chi tiết từ Giải pháp Erlang

Năng suất 'out of the box' của Elixir được thực hiện nhờ sự tập trung mạnh mẽ vào công cụ và sự tiện lợi khi thể hiện thao tác dữ liệu. Thiết kế hệ thống giống nhau trong Elixir và Erlang, nhưng Elixir loại bỏ rất nhiều mã viết sẵn và dễ mở rộng hơn. Việc loại bỏ boilerplate làm tăng năng suất và cho phép các lập trình viên nhận được phản hồi nhanh hơn - điều quan trọng khi bạn muốn tung sản phẩm của mình ra thị trường càng nhanh càng tốt. Ít boilerplate cũng giúp cho các nhà phát triển hài lòng và các nhà phát triển hạnh phúc là những nhà phát triển có năng suất đáng kinh ngạc.

Bài đăng trên blog của Joe Armstrong (nhà phát minh Erlang) về Elixir

Bắt đầu tại đây để tìm hiểu về Elixir - Bắt đầu

Một khi bạn cảm thấy nó diễn ra tốt đẹp, hãy tập theo cách của bạn để thực hành theo Chủ nghĩa tập thể dụccác nguồn khác .


3

Có một số điều. Tôi nghĩ rằng bạn không thể tạo một hàm anon đệ quy trong Elixir. Công bằng mà nói, đây là điều mà trong hơn 8 năm ở Erlang, tôi không nghĩ rằng mình cần phải làm, và nếu tôi làm được, nó có thể được thực hiện dễ dàng theo một cách khác. Có thể có một vài điều khác tương tự như vậy mà bạn có thể bỏ qua.

Nói chung, đối với những thứ mà hầu hết mọi người quan tâm về bất cứ điều gì bạn có thể Làm trong Erlang, bạn có thể làm trong Elixir và ngược lại. Cộng đồng bên Elixir dường như hoạt động tích cực hơn nên tôi khuyên bạn nên bắt đầu từ đó. Gần đây tôi đã chuyển từ Erlang sang Elixir và ngoại trừ một số thứ lạ mắt trong Right, tôi có thể nói rằng đó là một quá trình chuyển đổi khá dễ dàng

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.