2011-03-04 28 views
8

Tôi muốn tìm hiểu và sử dụng ML nhưng có rất nhiều trình biên dịch trên mạng. Tôi cần:Học/sử dụng ML. Tôi nên sử dụng hệ thống nào?

  • tốc độ
  • sử dụng bộ nhớ thấp
  • luồng
  • mảng có thể thay đổi và các loại hồ sơ
  • continuations
  • sẵn sàng cho mã sản xuất
  • dễ ffi
  • cập nhật
  • ... trợ giúp thư viện ful
  • di động ở một mức độ

Tôi không cần:

  • đối tượng
  • GUI hỗ trợ
  • cho các cửa sổ

Ví dụ tôi thấy OCaml, OCaml Batteries includeMLton. Bất kỳ lời khuyên nào cho tôi nên chọn loại nào?

+0

Tôi nghĩ Ocaml Pin Bao gồm không phải là một ngôn ngữ riêng, nhưng một nền tảng Phát triển Ocaml. – phimuemue

Trả lời

5

Vâng cho MLton:

  • Speed ​​
    • Chương trình toàn optimisa tions definetley cung cấp cho bạn tốc độ tốt hơn so với OCaml, tuy nhiên hình phạt bạn phục vụ cho mỗi và mọi biên dịch lại có thể khá khó chịu. Xem this link cho một sự so sánh không chính thức đơn giản của MLton và OCaml
  • Threading
    • Không có vấn đề ở đây, bạn có một trong hai MLton.Thread hoặc CML
  • mảng Biên Đổi và các loại hồ sơ
  • continuations
    • tôi đã không sử dụng nó trước, nhưng nó là present như trong SML/NJ
  • sẵn sàng cho mã sản xuất
    • Rõ ràng phụ thuộc vào các thư viện bạn sử dụng. Nhưng thư viện cơ sở là vững chắc, tuy nhiên MLton có additions riêng của mình và một số khác có repos với các phần mở rộng được liệt kê here. Tuy nhiên, MLton library project chứa một số mã đẹp. Tuy nhiên như với nhiều thư viện/mở rộng như vậy, chúng có xu hướng dựa vào các phần mở rộng khác do chúng tự tạo ra và do đó rất khó để chỉ sử dụng các phần nhỏ của chúng.
  • Dễ ffi
    • ForeignFunctionInterfaceNoLonger-FFI là tuyệt vời. Tuy nhiên tôi đã có vấn đề tốc độ với NL-FFI trên codebases C lớn, mà tôi nghĩ là do MLton không loại bỏ các loại ma hoàn thành. Tuy nhiên đây chỉ là một phỏng đoán, tôi có thể đã làm điều gì đó sai trái.
  • di động ở một mức độ
+1

Lưu ý rằng MLTon, trong khi nó có "chủ đề", không thực sự thực hiện những chủ đề đồng thời. Tất cả chúng đều hoạt động trong một chuỗi hệ điều hành duy nhất. Vì vậy, bạn sẽ không nhận được lợi ích từ nhiều lõi CPU. –

+0

thậm chí trang mlton.org về ocaml thừa nhận rằng ocaml biên dịch nhanh hơn mlton: http://mlton.org/OCaml – johnbakers

9

SML có hỗ trợ tốt hơn cho việc tiếp tục. Nếu bạn có nhu cầu mạnh mẽ về sự tiếp tục, thì đó là lựa chọn tốt hơn; OCaml không có hỗ trợ ngôn ngữ cho họ, nhưng có thư viện Delimcc bởi Oleg để tiếp tục giới hạn; bên ngoài, nó có thể chậm hơn so với triển khai của SML. Nếu không, OCaml có vẻ có nhiều lực kéo hơn trong những ngày này, vì vậy bạn nên mong đợi các công cụ và thư viện sẽ tốt hơn một chút.

Nói chung, SML có xu hướng thanh lịch hơn, trong khi OCaml có một số tính năng, người dùng và người dùng nâng cao hơn. Hiệu suất-khôn ngoan họ đều tốt.

(Xem this để so sánh cú pháp của các mảnh vỡ chủ yếu-chung của cả hai ngôn ngữ; các đối tượng dĩ nhiên OCaml và các biến thể đa hình không được trình bày.)

+0

+1 "Các tính năng nâng cao, tính năng quirks và người dùng". (và cho câu trả lời thường tốt) –

+1

Ngoài ra, @knivil, bạn nên biết rằng hỗ trợ luồng OCaml không hỗ trợ các chủ đề tính toán song song tại thời điểm này - có một khóa giữ nhiều luồng chạy song song. Các luồng OCaml vẫn còn khá hữu ích cho I/O (các mô đun I/O tiêu chuẩn giải phóng khóa luồng khi chặn cho IO), và mã C hoặc FORTRAN có thể chạy trong luồng riêng của nó trong khi các mã OCaml khác chạy.Đối với tính song song thực sự/đồng thời, có Plasma (bản đồ phân phối/giảm), Functory (tính toán song song) và OCamlNet 3 có các cơ sở đa xử lý. –

5

Ocaml đáp ứng tất cả các yêu cầu từ danh sách của bạn với ngoại lệ của continuations . Đó là nhanh chóng, bộ nhớ hiệu quả, di động, có chủ đề ràng buộc posix và thư viện tốt cho các chủ đề hợp tác nhẹ. Thư viện chuẩn khá hạn chế nhưng có rất nhiều third-party libraries.

Có nhiều công ty sử dụng OCaml trong sản xuất cho tất cả mọi thứ. Một số công ty được đề cập trên trang web Caml consortium.

Tôi cũng khuyên bạn nên đọc một số báo cáo kinh nghiệm OCaml tuyệt vời:

OCaml at Jane Street Capital

OCaml at XenSource

+2

Tôi cũng sử dụng Ocaml, mặc dù tôi đã viết mã cho MLton trong ngày. Vấn đề là SML là ngôn ngữ trang nhã và học thuật, trong đó OCaml là một con thú được thực hiện công việc trong thực tế. Vì vậy, nó phụ thuộc vào những gì bạn đang cố gắng làm. –

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