2013-07-25 49 views
11

Có nhiều phương ngữ của ML, và SML và OCaml là các phương ngữ phổ biến nhất. Có nhiều sự khác nhau giữa SML và OCaml, nhưng cả hai đều được coi là phương ngữ của ML. Vì vậy,Tại sao SML và OCaml được coi là phương ngữ của ML? Định nghĩa ML là gì?

  1. Tại sao SML và OCaml được coi là phương ngữ của ML?
  2. Ngôn ngữ có thể được coi như một phương ngữ của ML như thế nào?
  3. Nếu ML không phải là SML/OCaml, định nghĩa của ML là gì?

Tôi đoán ML là một số giao điểm của SML và OCaml, nhưng tôi không thể tìm thấy một số định nghĩa chi tiết.

+12

http://caml.inria.fr/about/history.en.html Quan điểm từ OCaml thế giới – camlspotter

+2

Tôi đoán rằng hệ thống kiểu có nhiều thứ nhất để làm, tại sao chúng được coi là một phương ngữ. Rõ ràng cũng là một số cú pháp. –

Trả lời

7

Liên kết từ trình thu thập thông tin có tổng quan tốt đẹp về lịch sử ML và đề cập đến việc triển khai bởi Luca Cardelli được gọi là "Cardelli's ML". Tôi chọc quanh đó và tìm thấy bài báo này: ML under Unix. Luca Cardelli mô tả một thực hiện "ML", và tôi chắc rằng điều này sẽ có trước Standard ML vì nó ra tháng năm 1983. Đây là danh sách các tính năng một cách trừu tượng:

  • tương tác
  • mạnh mẽ gõ
  • hệ thống kiểu đa hình
  • kiểu dữ liệu trừu tượng
  • ngoại lệ
  • module

Đây là một danh sách khá tốt, mặc dù một số phần có vẻ không rõ ràng. Tôi nghĩ rằng danh sách này có thể phục vụ như là một định nghĩa không chính thức về những gì các tính năng một ngôn ngữ nên có để được "coi là một ML", tuy nhiên có một vài điều đáng chú ý.

Yêu cầu hệ thống là "tương tác" là một chi tiết triển khai phần nào khó tính, có lẽ cụ thể cho việc triển khai được mô tả trong bài báo này. Trình biên dịch ML tiêu chuẩn MLton không có một REPL tương tác (vì nó là một trình biên dịch tối ưu hóa toàn bộ chương trình), tuy nhiên tôi nghi ngờ bất cứ ai nghiêm túc đề xuất ngôn ngữ MLton thực hiện không phải là ML.

Bên cạnh đó, "mạnh mẽ gõ" là khá mơ hồ, vì vậy nó có giá trị đọc phần còn lại của đoạn đó cho bối cảnh nhiều hơn:

Mỗi ML biểu hiện có một loại, được xác định tĩnh. Loại biểu thức thường được hệ thống tự động suy ra, mà không cần loại xác định. Hệ thống loại ML đảm bảo rằng bất kỳ biểu thức nào mà có thể được nhập sẽ không tạo ra lỗi loại tại thời gian chạy. Bẫy đánh máy tĩnh tại thời gian biên dịch một tỷ lệ lớn các lỗi trong chương trình.

Danh sách này cũng không đề cập đến mô hình phù hợp chút nào, tuy nhiên giấy làm bìa mô hình phù hợp, mặc dù tôi không biết nếu ur-ML sử dụng trong LCF có phù hợp với mô hình, và nếu không, làm thế nào người ta có thể thao tác các kiểu dữ liệu mà không có nó. Tôi cho rằng vào năm 2013, một ngôn ngữ với các tính năng này, nhưng thiếu sự phù hợp với mẫu, sẽ là một khó khăn khi bán dưới dạng ML.

Lưu ý rằng Haskell chủ yếu tuân theo danh sách này, nếu bạn nheo mắt một chút.Nhưng trong thực tế nó phân kỳ đủ mà tôi nghĩ rằng hầu hết mọi người xem xét Haskell lấy cảm hứng từ ML, nhưng "không phải là một ML", chủ yếu là vì Haskell là tinh khiếtlười biếng trong khi ML trong lịch sử được bất tịnhnghiêm ngặt. Hơn nữa, hệ thống mô-đun ML, trong cả SML và OCaml, khác với Haskell một chút, và không phải của các ML có typeclasses.

Đây không phải là câu trả lời đầy đủ cho tất cả các câu hỏi của bạn, nhưng tôi hy vọng nó sẽ giúp ích cho bạn.

+0

Cảm ơn bạn đã bình luận và liên kết tới ML Under Unix. Tôi đọc các tài liệu tham khảo và tìm kiếm trên web và cuối cùng đã phát hiện ra một bài báo xuất bản năm 1978 '[Một ngôn ngữ kim loại cho chứng minh tương tác trong LCF] (http://www-public.int-evry.fr/~gibson/Teaching/CSC4504/ReadingMaterial/GordonMMNW78 .pdf) '. Và trong các tác giả paoer này đã viết, 'Một mô tả đầy đủ về ML, và việc sử dụng nó với PPλ, tồn tại như một báo cáo công nghệ: Edinburgh LCF, 1977'. Tôi đoán đây có thể là giấy gốc của ML. Nhưng tôi đã không tìm thấy một phiên bản trực tuyến n của nó. – InsaneRabbit

+0

Và tôi đoán không có định nghĩa nghiêm ngặt về việc là một phương ngữ của ML. Nếu một số ngôn ngữ có đủ các tính năng của SML, nó có thể được bán dưới dạng phương ngữ của ML. Cũng giống như 'Điện toán đám mây', không có định nghĩa nghiêm ngặt (có thể tồn tại nhưng ai quan tâm). Ngày nay, mọi sản phẩm của mọi người đều có mây. – InsaneRabbit

+0

Thú vị, tốt đẹp tìm thấy với giấy khác, tôi tự hỏi nếu đây là báo cáo kỹ thuật được đề cập: http://www.amazon.com/Edinburgh-LCF-Mechanized-Computation-Computer/dp/3540097244. Có vẻ là một vài phần mô tả ML trong mục lục. – spacemanaki