it-swarm-vi.com

Haskell vs Erlang cho các dịch vụ web

Tôi đang tìm cách bắt đầu một dự án thử nghiệm bằng ngôn ngữ chức năng và đang cố gắng quyết định giữa Erlang và Haskell, và cả hai đều có một số điểm mà tôi thực sự thích.

Tôi thích hệ thống loại mạnh mẽ và tinh khiết của Haskell. Tôi có cảm giác nó sẽ giúp việc viết mã thực sự đáng tin cậy dễ dàng hơn. Và tôi nghĩ rằng sức mạnh của Haskell sẽ làm cho một số điều tôi muốn làm dễ dàng hơn nhiều.

Về mặt trừ, tôi có cảm giác rằng một số Khung để thực hiện các công cụ web trên Haskell như Yesod không tiên tiến như các bộ phận truy cập Erlang của chúng.

Tôi thích cách tiếp cận Erlang với các luồng và khả năng chịu lỗi. Tôi có cảm giác rằng khả năng mở rộng của Erlang có thể là một điểm cộng lớn.

Điều đó dẫn đến câu hỏi của tôi, kinh nghiệm của mọi người là gì khi triển khai các phụ trợ ứng dụng web trong cả Haskell và Erlang. Có gói nào để Haskell cung cấp một số chủ đề và diễn viên nhẹ mà người ta có trong Erlang không?

29
Zachary K

Câu hỏi duy nhất tôi có là dịch vụ web của bạn đang làm gì? Nếu dịch vụ web thực sự là một vấn đề chức năng, thì Haskell sẽ phù hợp hơn.

Erlang không nhất thiết phải là một ngôn ngữ chức năng. Đó là một ngôn ngữ thủ tục với mô hình thực thi rất mạnh cho các hệ thống song song ồ ạt. Nó được thiết kế cho ngành công nghiệp viễn thông, và nó chắc chắn sẽ phù hợp tuyệt vời để đáp ứng các yêu cầu dịch vụ web.

Xem trang này * để biết tổng quan về sự khác biệt giữa lập trình thủ tục và lập trình chức năng. (Lời xin lỗi trước cho màu đen xấu xí trên trang màu lục lam).

Nếu dịch vụ web của bạn đang thực hiện một số lượng lớn các quy tắc khớp mẫu và áp dụng quy tắc, thì Haskell là lựa chọn của bạn. Nếu bạn chỉ muốn một cơ sở hạ tầng có thể mở rộng không quá khác biệt với các ngôn ngữ bạn có thể đã biết, hãy chọn Erlang.

(* liên kết qua máy Wayback. Tệp gốc đã bị xóa)

19
Berin Loritsch

Giữa hai bạn đề cập, chắc chắn Haskell là học thuật, trong khi Erlang được sử dụng trong các dự án có khả năng mở rộng cao trong cuộc sống thực. Vì vậy, hai trong số các dịch vụ web tôi sẽ chọn Erlang.

Nhưng tôi muốn nói rằng bạn có lựa chọn thứ ba: Scala , một ngôn ngữ chịu ảnh hưởng lớn từ cả Haskell và Erlang. Nó được sử dụng để xây dựng các dịch vụ web hàng đầu như Twitter hoặc Foursquare. Thậm chí còn có Nâng , một khung web lấy cảm hứng từ Rails và Django, mặc dù với một chút khác biệt, cách tiếp cận nhiều chức năng hơn. Foursquare đang sử dụng thang máy.

10
vartec

Thông thường tôi nói: "học những thứ càng xa càng tốt từ vùng thoải mái của bạn, nó sẽ giúp bạn trở thành một lập trình viên tốt hơn ngay cả khi bạn không bao giờ sử dụng nó trong thực tế".

Trong trường hợp này, điều đó có thể có nghĩa là Haskell; nhưng Erlang không chỉ trở thành gần như được xã hội chấp nhận; nhưng những điểm chính (quy trình nhẹ, thông điệp truyền qua, khả năng mở rộng lớn) đang xuất hiện trên nhiều nền tảng 'thực tế' khác, vì vậy những bài học kinh nghiệm có khả năng áp dụng lớn và ngay lập tức vào công việc 'thực tế' hơn.

lời khuyên của tôi: nếu đó là để giải trí, hãy làm Haskell. nếu đó là để đào tạo, hãy đi Erlang.

6
Javier

Haskell (GHC) có hỗ trợ vượt trội cho các luồng màu xanh lá cây ('quy trình' của Erlang). Ví dụ forkIO sinh ra một luồng màu xanh lá cây mới và trả về id luồng của nó.

forkIO :: IO () -> IO ThreadId

cơ chế truyền thông điệp được gói thực hiện process-process nhưng nó không được duy trì tốt.
[.__.] Cơ chế chia sẻ dữ liệu của Haskell khác với Erlang. Haskell nắm bắt ý tưởng về các quốc gia toàn cầu có thể thay đổi và thêm phần trừu tượng để làm cho nó an toàn khi sử dụng. Một ví dụ điển hình của việc này là TVar ( [~ # ~] t [~ # ~] ransactioal Var iable) cho phép giao dịch nguyên tử có thể kết hợp .
[.__.] Haskell cũng có một số thư viện dịch vụ web rất cao sử dụng hệ thống loại biểu cảm của nó (loại phụ thuộc), ví dụ, người phục vụ. Nó cho phép bạn chỉ định API REST API bằng cách sử dụng DSL cấp độ loại có thể được sử dụng tại thời gian biên dịch để đảm bảo an toàn loại.

Biên tập:
[.__.] Rõ ràng đóng phân tán cũng thực hiện tuần tự hóa đóng với sự trợ giúp của staticptr

1
Poscat

Bạn cũng có thể xem xét Rust .

  • Nó không hoàn toàn là chức năng, nhưng nó khuyến khích một phong cách bán chức năng [.__.]
    • Đóng cửa
    • Bất biến theo mặc định
    • Nó có một hệ thống macro mạnh mẽ, an toàn, cho phép bạn viết các macro (hoặc sử dụng các macro do cộng đồng tạo ra) để viết mã theo kiểu nhiều chức năng hơn
  • Nó có thư viện/khung cho mọi mức độ trừu tượng
  • Nó nhấn mạnh vào an toàn bộ nhớ hiệu quả
  • Nó có một hệ thống loại mạnh
  • Nó làm cho tất cả các loại đồng thời thực sự dễ dàng (miễn là bạn đáp ứng tất cả các yêu cầu an toàn)
  • Nó có một cộng đồng tích cực
  • Nó là nguồn mở (như những người khác mà bạn đã đề cập)
  • vân vân.
0
Solomon Ucko