2012-06-26 25 views
10

Khi bắt đầu lập trình Erlang, có:Điều gì khiến Erlang không phù hợp với công việc tốn kém về tính toán?

Điều gì khiến Erlang là lựa chọn tốt nhất cho dự án của bạn? Nó phụ thuộc vào những gì bạn đang tìm kiếm để xây dựng. Nếu bạn đang xem xét việc viết một ứng dụng số-crunching, một hệ thống chuyên sâu đồ họa hoặc hoặc phần mềm máy khách chạy trên một chiếc điện thoại di động, sau đó xin lỗi, bạn đã mua nhầm cuốn sách.

Thông điệp ngụ ý là Erlang không phù hợp cho công việc tốn kém về tính toán. Điều gì làm cho Erlang trở nên không phù hợp, hoặc tôi đã hiểu sai?

+0

Một phần của ngôn ngữ đó là các ngôn ngữ khác * phù hợp hơn; Bộ mạnh của Erlang không phải là thuật toán số. Cho rằng bạn sẽ sử dụng C/Fortran/etc. –

+2

của nó bởi vì cái gì khác là tốt hơn so với Erlang tại tính toán. Erlang vẫn làm tính toán và nếu một vấn đề tính toán có thể được 'parallerised', erlang thậm chí có thể thực hiện tốt hơn. –

Trả lời

9

Erlang chiếu sáng cho các ứng dụng I/O-ràng buộc, tức là các vấn đề có yếu tố hạn chế là độ trễ và thông lượng của các hoạt động I/O thay vì tốc độ hướng dẫn có thể được đẩy thông qua một đường ống CPU. Các máy chủ và cơ sở dữ liệu web là những ví dụ tốt về các ứng dụng I/O-bound: các yếu tố giới hạn có thể là đĩa và mạng chứ không phải là CPU. Các ứng dụng "tính toán nặng" truyền thống bao gồm các công cụ mã hóa và mô phỏng khoa học.

Là tại sao Erlang không phù hợp với các ngôn ngữ như C và Fortran khi nói đến tính toán các vấn đề chuyên sâu, chúng ta phải xem xét những thứ như thế hệ mã và bộ nhớ cache thân thiện ... Tôi sẽ cung cấp cho nó một thử:

  • Tạo mã: Thông thường khi bạn bắt đầu chương trình Erlang, chương trình sẽ chạy ở BEAM, virtual machine dựa trên threaded code. Trong khi BEAM thực hiện đủ tốt cho hầu hết các mục đích, nó có chi phí cao hơn nhiều cho mỗi lệnh "logic" hơn là loại mã được tạo ra bởi trình biên dịch C tối ưu hóa hiện đại. Dự án HiPE cung cấp trình biên dịch mã gốc cho Erlang được tích hợp vào cây nguồn OTP chính vài năm trước *. Trong khi nó chắc chắn cải thiện khả năng crunching số của Erlang, nó vẫn sẽ có một thời gian khó khăn phù hợp với một chương trình C hay Fortran được viết tốt.
  • Thân thiện với bộ nhớ cache: Hệ thống bộ nhớ là một nút cổ chai lớn trong các máy tính hiện đại: đọc từ bộ nhớ chính có thể mất hàng trăm chu trình xử lý! Để giải quyết vấn đề này, các nhà thiết kế CPU giới thiệu một số mức cache để ẩn độ trễ của bộ nhớ. Bộ nhớ cache khai thác hai thuộc tính chính của chương trình máy tính: tạm thờikhông gian địa phương - nghĩa là vùng bộ nhớ gần đây được tham chiếu (và các vùng lân cận) có thể được tham chiếu lại. Các ngôn ngữ như C và Fortran cung cấp rất nhiều quyền kiểm soát đối với vị trí và cách thức phân bổ bộ nhớ, cho phép lập trình viên điều chỉnh các thuật toán để chơi độc đáo với bộ đệm. Điều tương tự thường không giữ cho các ngôn ngữ động như Erlang, nơi cấp phát bộ nhớ bị ẩn khỏi lập trình viên và được xử lý tự động bởi máy ảo.
  • Kích thước mã: Đối số về địa phương không gian cũng giữ mã; Mã Erlang, dù ở dạng gốc hay mã byte, thường sẽ lớn hơn mã C đã biên dịch tương ứng. Điều này dẫn đến việc thường xuyên bị bỏ sót trong bộ nhớ cache lệnh.

Hãy nhớ rằng đây chỉ là đỉnh của tảng băng trôi, và rằng tôi không có nghĩa là chuyên gia về Erlang hoặc thực hiện ngôn ngữ. Đừng để thực tế là Erlang có lẽ sẽ không bao giờ chạy mô phỏng khoa học khiến bạn sợ; cho nhiều ứng dụng, đó là một ngôn ngữ tuyệt vời.

* HiPE có sẵn thông qua gói erlang-base-hipe trong Debian hoặc ./configure --enable-hipe từ tarball nguồn.

+2

Bài đăng hay! Để đặt hiệu suất tối đa trong ngắn hạn, "Càng gần bạn đến máy bạn đang lập trình nhanh hơn bạn _can_ nhận được vì nó có thể thêm ít chi phí cho mỗi hướng dẫn hợp lý." –

+0

Cảm ơn bạn đã gửi lời cảm ơn và một bản tóm tắt thú vị! –

9

Nó chỉ là mã C có thể nhanh hơn đáng kể hầu hết thời gian. Erlang là tuyệt vời ở khả năng chịu lỗi, tính toán phân tán và đồng thời. Các lập trình viên có xu hướng thành thạo như nhau trong việc viết erlang hoặc các ngôn ngữ khác, nhưng nếu bạn muốn tốc độ, hãy sử dụng C hoặc C++, có thể từ một cổng erlang, vì vậy mã này có thể sử dụng từ ứng dụng erlang của riêng bạn.

8

Erlang là một ngôn ngữ lập trình chức năng đồng thời được thiết kế để lập trình các hệ thống thời gian thực công nghiệp lớn. Không có gì đặc biệt ngăn cản bạn phát triển "một ứng dụng crunching số hoặc một hệ thống đồ họa chuyên sâu", nhưng ngôn ngữ tỏa sáng trong xử lý sự kiện thời gian thực.

Các vấn đề liên quan