Điều gì đặt hai phương ngữ ML khác nhau?Sự khác nhau giữa SML và OCaml là gì?
Trả lời
Có rất nhiều sự khác biệt, một số kỹ thuật, một số chính trị xã hội. Tôi đã cố gắng đặt những khác biệt quan trọng hơn trước.
SML là ngôn ngữ có định nghĩa và tiêu chuẩn. Nó ổn định (và trên thực tế đã bị đóng băng nên nó không thể phát triển). Caml mục tiêu là một thực hiện được kiểm soát bởi một nhóm nhỏ tại INRIA. Nó tiếp tục phát triển. (IMO sự tiến hóa được quản lý tốt.)
SML có nhiều triển khai; Caml chỉ có một.
Caml mục tiêu có một số tính năng bổ sung, trong đó nổi bật nhất có lẽ là đối tượng và biến thể đa hình.
Hai ngôn ngữ có các kiểu bản ghi khác nhau đáng kể. Tóm lại, trong Caml, tên của các trường bản ghi phải là duy nhất, trong SML, hai loại bản ghi khác nhau trong cùng phạm vi có thể có tên trường chung. Quirk này có thể làm cho việc chuyển từ SML sang Caml một chút phức tạp.
Có một vài khác biệt về cú pháp.
Các thư viện và chức năng tiêu chuẩn khác nhau đáng kể. Thư viện Caml là rất cấp bách, trong khi Thư viện cơ sở tiêu chuẩn SML là chức năng hơn. Ví dụ, thành phần hàm là một nguyên thủy cấp cao nhất trong SML; nó không phải là một phần của thư viện Caml. Thư viện chuỗi Caml không cung cấp chức năng gấp (ít nhất là không phải phiên bản 3.08). Việc triển khai nhiều chức năng của Caml
List
không an toàn cho các danh sách rất dài; họ thổi đống.Các hệ thống loại là tinh tế khác nhau: Trong CAML, một loại chú thích trên một biểu
e : ty
được chấp nhận nếu kiểuty
thống nhất với loạie
. Trong SML,e : ty
chỉ được chấp nhận nếu loạity
là một ví dụ của loạie
. Sự khác biệt này ám chỉ chú thích trong Caml ít hữu ích hơn trong thực tế, bởi vì không thể sử dụng chú thích kiểu để nhấn mạnh rằng một biểu thức là đa hình.CAML có một mối quan hệ lành mạnh hơn và hợp lý giữa các giao diện (gọi tắt là loại mô-đun hoặc chữ ký) và (bê tông) triển khai (gọi tắt là module hoặc cấu trúc) so với SML. Trong SML có khá nhiều thứ và bạn phải dựa vào lập trình viên để thiết lập các quy ước tốt. Trong Caml, các quy ước tốt được thiết lập và thực thi bởi trình biên dịch.
Trong SML, toán tử số học bị quá tải để áp dụng cho cả dữ liệu dấu phẩy động và số nguyên. Trong Caml, các toán tử không bị quá tải; toán tử dấu phẩy động được ký hiệu với dấu chấm phụ.
Trong SML, người lập trình có thể kiểm soát ưu tiên và tính tương thích của các toán tử kết xuất. Trong Caml, chúng được xác định bởi ký tự đầu tiên của tên của toán tử.Hạn chế này giới hạn các lợi ích của việc có thể xác định ký hiệu infix của riêng bạn.
Để có phân tích chi tiết hơn, hãy xem Adam Chlipala's comparison page.
rất nhiều thông tin! +1 của tôi cho điều này. –
Bạn quên bình đẳng (không bị hạn chế và không an toàn trong OCaml so với các loại bình đẳng an toàn nhưng bị giới hạn trong SML), các biến kiểu không tổng quát ('_a in OCaml), printf, giải thích tên tập tin như tên mô-đun trong OCaml, nhiều currying hơn trong OCaml's stdlib . Bạn đã viết giao diện hai lần khi bạn có ý nghĩa gì đó khác (thực hiện?) Lần thứ hai. –
và OCaml hoặc mẫu và bảo vệ trong khớp mẫu. –
OCaml thêm đối tượng định hướng đối tượng và có một số khác biệt cú pháp nhỏ.
Để biết chi tiết liên quan đến sự khác biệt cú pháp mà Norman Ramsey đã đề cập, đây là một vài trang web:
- Comparing Objective Caml and Standard ML: có lời giải thích tốt về sự khác biệt, và "thực tế" và biểu tượng "tinh khiết" là vui quá
- Standard ML and Objective Caml, Side by Side
- 1. Sự khác nhau giữa mô-đun và gói Ocaml
- 2. Sự khác nhau giữa WPF và WinForms là gì?
- 3. Sự khác nhau giữa JavaScript và Java là gì?
- 4. Sự khác nhau giữa ODBC và OleDB là gì?
- 5. Sự khác nhau giữa SGML và XML là gì?
- 6. Sự khác nhau giữa DefaultSelenium và RemoteWebDriver là gì?
- 7. Sự khác nhau giữa RMI và Corba là gì?
- 8. Sự khác nhau giữa scgi và wsgi là gì?
- 9. Sự khác nhau giữa wsHttpBinding và ws2007HttpBinding là gì?
- 10. Sự khác nhau giữa Pingback và Trackback là gì?
- 11. Trong Python, sự khác nhau giữa ".append()" và "+ = []" là gì?
- 12. Sự khác nhau giữa AxInterop và Interop là gì?
- 13. Sự khác nhau giữa CellClick và CellMouseClick là gì?
- 14. Sự khác nhau giữa .bashrc, .bash_profile và .environment là gì?
- 15. Sự khác nhau giữa JSP và Facelets là gì?
- 16. Sự khác nhau giữa hg quên và hg là gì?
- 17. Sự khác nhau giữa GDI và GDI + là gì?
- 18. Sự khác nhau giữa đá quý và plugin là gì?
- 19. Sự khác nhau giữa metaClass.methods và metaClass.metaMethods là gì?
- 20. Sự khác nhau giữa kEND và $ end là gì?
- 21. Sự khác nhau giữa java và jsp là gì?
- 22. Sự khác nhau giữa Application.Run() và Form.ShowDialog() là gì?
- 23. Sự khác nhau giữa -0 và 0 là gì?
- 24. Sự khác nhau giữa HTTP 1.0 và 1.1 là gì?
- 25. Sự khác nhau giữa java.lang.Math và java.lang.StrictMath là gì?
- 26. Sự khác nhau giữa " " và "" là gì?
- 27. Sự khác nhau giữa Spring BeanFactoryAware và ApplicationContextAware là gì?
- 28. sự khác nhau giữa SCRIPT_FILENAME và SCRIPT_NAME là gì?
- 29. Sự khác nhau giữa JSP và JSTL là gì?
- 30. Sự khác nhau giữa JSF và Facelets là gì?
so sánh cú pháp: http://adam.chlipala.net/mlcomp/ – nawfal