Hiệu suất F # so với hiệu suất Erlang, có bằng chứng VM của Erlang nhanh hơn không?


19

Tôi đã dành thời gian để học lập trình chức năng và tôi đã đến phần mà tôi muốn bắt đầu viết một dự án thay vì chỉ học hỏi các hướng dẫn / ví dụ.

Khi thực hiện nghiên cứu của mình, tôi đã thấy rằng Erlang dường như khá mạnh khi viết phần mềm đồng thời (đó là mục tiêu của tôi), nhưng tài nguyên và công cụ để phát triển không trưởng thành như các sản phẩm phát triển của Microsoft.

F # có thể chạy trên linux (Mono) để đáp ứng yêu cầu đó, nhưng trong khi tìm kiếm trên internet, tôi không thể tìm thấy bất kỳ so sánh nào giữa F # vs Erlang. Ngay bây giờ, tôi đang nghiêng về Erlang chỉ vì nó dường như có nhiều báo chí nhất, nhưng tôi tò mò liệu thực sự có bất kỳ sự khác biệt về hiệu suất giữa hai hệ thống.

Vì tôi đã quen với việc phát triển .NET, tôi có thể tăng tốc với F # nhanh hơn Erlang rất nhiều, nhưng tôi không thể tìm thấy bất kỳ tài nguyên nào để thuyết phục tôi rằng F # có khả năng mở rộng như Erlang.

Tôi quan tâm nhất đến mô phỏng, sẽ bắn rất nhiều tin nhắn được xử lý nhanh đến các nút liên tục.

Nếu tôi chưa hoàn thành tốt công việc với những gì tôi đang cố gắng yêu cầu, vui lòng yêu cầu xác minh thêm.


12
Ngôn ngữ không có tốc độ. Việc triển khai ngôn ngữ cụ thể chạy một chương trình cụ thể trên một đầu vào cụ thể (điều này có thể bao gồm toàn bộ thế giới bên ngoài, tùy thuộc vào chương trình) có tốc độ.

1
F # chạy trên thời gian chạy .NET và Erlang chạy trên VM của chính nó. Các quy trình của Erlang được coi là nhẹ so với các ngôn ngữ trong miền của nó (như Scala). Đối với một nút sinh sản mô phỏng và truyền nhiều thông báo, thời gian chạy .NET / Mono có tốt như VM của Erlang hay VM của Erlang vượt trội?
afuzzyllama

3
@delnan: Ngôn ngữ có đặc điểm hiệu suất.
Jon Harrop

2
@JonHarrop Làm sao vậy? Một ngôn ngữ lập trình chỉ là một số cú pháp và ngữ nghĩa liên quan.

1
@delnan: Ngữ nghĩa đặt giới hạn về tối ưu hóa. Ví dụ, các ngôn ngữ được gõ động rất khó để tối ưu hóa trong thực tế. Việc thiếu các loại giá trị trên JVM dẫn đến việc phân bổ heap nhiều hơn so với trên .NET và do đó, căng thẳng lớn hơn nhiều đối với GC. Giống như trình tạo mã, người thu gom rác có thể và khai thác thông tin như tính bất biến để cải thiện hiệu suất. Thiết kế của một ngôn ngữ lập trình có ảnh hưởng rất lớn đến điều này.
Jon Harrop

Câu trả lời:


21

Bạn có ý nghĩa gì bởi "khả thi?" "Có nhiều báo chí nhất" không nhất thiết là cách tốt nhất để chọn ngôn ngữ.

Yêu cầu nổi tiếng của Erlang là khả năng song song hóa lớn. Đó là lý do tại sao nó thường được sử dụng trong các thiết bị chuyển mạch điện thoại của Ericsson. Erlang là thời gian thực mềm, vì vậy bạn có thể đảm bảo hiệu suất nhất định về nó.

Lợi ích F # từ khả năng tối ưu hóa của .NET Jitter. Ngoài ra, bản thân ngôn ngữ này được thiết kế để trở thành ngôn ngữ chức năng có hiệu suất cao (nó là một biến thể của OCaml, được sử dụng rộng rãi trong ngành tài chính vì tốc độ của nó).

Cuối cùng, trừ khi bạn có kế hoạch chạy hàng triệu tác nhân nhỏ cùng một lúc (đó là những gì Erlang được tối ưu hóa), F # sẽ hoàn thành nhiệm vụ.

Trang này giải thích các trường hợp sử dụng thích hợp cho Erlang.


"Khả thi" tôi có nghĩa là có thể mở rộng. Tôi biết rằng có báo chí không có nghĩa là ngôn ngữ đó thực sự tốt hơn, nhưng có vẻ như Erlang đã được chứng minh (ít nhất là bởi Ericsson). Bạn có ý nghĩa gì bởi các đại lý? Quy trình?
afuzzyllama

1
Vâng. Erlang đã được chứng minh để xử lý nhiều cuộc gọi điện thoại trên một công tắc của Ericsson cùng một lúc. Bạn phải tìm ra nếu trường hợp sử dụng của bạn là tương tự. Tôi thấy đó là một trường hợp sử dụng tương đối chuyên biệt; nếu đặc điểm này không có trong ứng dụng của bạn , tôi không thấy bất kỳ lợi thế nào khi sử dụng Erlang và trang Erlang thực sự mô tả một số trường hợp sử dụng mà Erlang không phù hợp.
Robert Harvey

2
Đại lý, diễn viên, đó là một khái niệm thiết kế xuất hiện rất nhiều trong các cuộc thảo luận ngôn ngữ chức năng; Tôi ngạc nhiên khi bạn chưa chạy qua nó. vi.wikipedia.org/wiki/Agent-basing_model
Patrick Hughes

Nói cách khác, bạn có cần khả năng mở rộng lớn (bây giờ hoặc cuối cùng) của loại Erlang cung cấp không? Hầu hết các chương trình không.
Robert Harvey

1
F # cũng có mô hình tác nhân - sử dụng 'MailboxProcessor' có tên hơi khó hiểu , giống như trong Erlang. Tôi không thể nhận xét về các đặc tính hiệu suất tương đối của từng mặc dù.
FinnNk

7

Rất ít tuyên bố khách quan có thể được đưa ra về chủ đề này bởi vì hiệu suất của hai ngôn ngữ này phụ thuộc rất nhiều vào phong cách ứng dụng và lập trình.

Lời khuyên duy nhất tôi có thể đưa ra là F # có lợi thế về hiệu suất của hệ thống loại tĩnh và CLR thực hiện tốt công việc này để cải thiện hiệu suất. F # không có các tác nhân và thông báo không đồng bộ truyền nhưng nó chưa được tối ưu hóa và mã đồng bộ thường nhanh hơn 10 ×.

Erlang được gõ một cách linh hoạt khiến nó gặp bất lợi đáng kể về hiệu suất (mong đợi nhiều quyền anh hơn) nhưng nó được xây dựng từ đầu để hỗ trợ tin nhắn nhanh chuyển giữa các tác nhân không đồng bộ để có thể nhanh hơn rất nhiều so với F # tương đương . Tuy nhiên, tôi không có kết quả điểm chuẩn để sao lưu điều này: đó chỉ là mong đợi của tôi.

Bên cạnh đó, cả Erlang và F # đều là những ngôn ngữ tương đối với các cộng đồng nhỏ và do thị trường mục tiêu khác nhau của họ, những người quen thuộc với cả hai đều rất hiếm. Người duy nhất tôi có thể nghĩ về người gần như đủ điều kiện là Jesper Louis Andersen nhưng tôi không chắc anh ấy đã làm được bao nhiêu F #.


4

Bạn nên đọc bài đăng này của Joe Armstrong: http://erlang.org/pipermail/erlang-questions/2012-F/2/064277.html

Tóm lại là Erlang không được thiết kế để nhanh! Nó khá nhanh trong nhiều trường hợp nhưng đó là vấn đề thứ yếu như khả năng chịu lỗi và ổn định.

Sự thật là cả Erlang và F # đều là những ngôn ngữ hay và trong khi tôi chỉ xem qua F #, tôi đã viết một cuốn sách về Erlang: Xây dựng các ứng dụng web với Erlang và tôi có thể nói rằng đó là một ngôn ngữ thú vị để làm việc.

Tôi cũng sẽ chỉ ra rằng dường như có một sự bùng nổ trong sách ngôn ngữ chức năng sẽ được xuất bản trong 6-9 tháng tới. Tôi biết ít nhất 4 trên Erlang (bao gồm cả của tôi), Một trên Haskell, cũng như các Tiêu đề trên OCaml, Clojure và F #.

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.