Những ngôn ngữ nghiên cứu nào có hệ thống kiểu mạnh hơn Haskell và tại sao?


14

Ở đây tôi đọc rằng:

Haskell chắc chắn không có hệ thống loại tiên tiến nhất (thậm chí không đóng nếu bạn đếm ngôn ngữ nghiên cứu) nhưng trong số tất cả các ngôn ngữ thực sự được sử dụng trong sản xuất, Haskell có thể đứng đầu.

Vì vậy, tôi đang hỏi hai điều:

  1. ngôn ngữ nghiên cứu nào có hệ thống loại mạnh hơn Haskell;
  2. họ cải thiện điều gì

Tôi chỉ là một lập trình viên, vì vậy tôi không biết nhiều đối tượng toán học được sử dụng trong lý thuyết loại, vui lòng cung cấp các giải thích nhẹ nhàng nếu bạn có thể.


3
"Tốt hơn" là gì?
David Richerby

2
@DavidRicherby Tôi đoán đó có nghĩa hệ thống kiểu mạnh hơn
Виталий Олегович

2
Một khi bạn đã chứng minh rằng một hệ thống loại là Turing-Complete , nó có thực sự quan trọng không? ;-)
DevSolar

7
Máy Turing đã hoàn tất Turing, tại sao bạn không sử dụng chúng cho các tác vụ lập trình hàng ngày của mình?
gallais

4
Xin lưu ý rằng văn bản gốc đề cập đến các ngôn ngữ có hệ thống loại nâng cao hơn và không làm cho bất kỳ xác nhận nào trở nên 'tiên tiến hơn' là tốt hơn hoặc tồi tệ hơn đối với hệ thống loại.
Peteris

Câu trả lời:


25

Câu hỏi có phần có vấn đề, vì nó dựa trên một định nghĩa chủ quan về "tốt hơn".

Các ngôn ngữ được gõ phụ thuộc như Agda , IdrisCoq có hệ thống loại mạnh hơn Haskell. Điều này có nghĩa là, bạn có thể sử dụng các loại trong các ngôn ngữ này để chứng minh chính xác nhiều thuộc tính về mã của bạn hơn trong Haskell. Đó là, có nhiều chương trình không chính xác sẽ bị bắt.

Tuy nhiên, điều này có giá: suy luận kiểu và kiểm tra xem có tồn tại bất kỳ giá trị nào của một loại nhất định không. Điều này có nghĩa là đối với các ngôn ngữ này, bạn cần chú thích rõ ràng mã của bạn với các loại. Về cơ bản, điều này giúp ghi lại các bằng chứng chính xác cho mã của bạn.

Vậy những ngôn ngữ này "tốt" hơn Haskell? Họ có thể kiểm tra bằng chứng nâng cao về tính chính xác cho mã của bạn, nhưng họ không thể tự động chứng minh các thuộc tính về mã của bạn theo cách mà Haskell có thể.

Một ngôn ngữ nghiên cứu khác "tốt hơn" Haskell là LiquidHaskell . Về cơ bản, đây là Haskell với các loại sàng lọc được bắt vít trên đầu, được phân tích cú pháp từ các nhận xét đặc biệt.

Các loại sàng lọc cho phép bạn tinh chỉnh các loại với các thuộc tính. Ví dụ: thay vì có một Int, bạn có thể chỉ định {i : Int | i > 0}, đưa ra loại của tất cả các số nguyên dương. Kiểu suy luận có thể quyết định với các loại sàng lọc, nhưng bạn không thể chứng minh gần như nhiều thuộc tính chính xác với chúng như bạn có thể với các loại phụ thuộc.

Có những hệ thống loại sàng lọc khác ngoài kia, nhưng tôi không quen thuộc lắm với bất kỳ hệ thống nào trong số chúng.


Cảm ơn bạn! Có thể chứng minh rằng hệ thống loại Haskell là hệ thống mạnh nhất vẫn cho phép suy luận kiểu?
Hôm nay,

3
Haskell chắc chắn KHÔNG phải là người mạnh nhất cho phép suy luận kiểu. Các loại sàng lọc mà tôi đã đề cập cho phép suy luận kiểu và nhiều tiện ích mở rộng GHC đang được thêm vào Haskell, cho phép hệ thống loại mạnh hơn một chút.
jmite

4
Trên hết, có nhiều hệ thống loại, và nhiều hệ thống không thể so sánh được: chúng sẽ mạnh hơn Haskell về mặt nào đó, nhưng yếu hơn Haskell ở các hệ thống khác. Không có thứ tự tuyến tính của các hệ thống loại từ mạnh nhất đến yếu nhất.
jmite

5
Bây giờ tôi muốn chứng minh rằng không có hệ thống loại mạnh nhất cho phép suy luận kiểu. Phải chống lại việc chứng minh sự thật vô dụng.
Andrej Bauer

1
Thực tế dường như không vô dụng với tôi. Kiến thức rằng tồn tại một hệ thống loại mạnh nhất với suy luận kiểu sẽ rất đáng quan tâm, đặc biệt là nếu nó trở nên khả thi để thực hiện.
rationalis

10

Họ ngôn ngữ ML (StandardML, OCaml ) phát sinh từ một truyền thống tương tự như Haskell và do đó có các hệ thống loại tương tự. Tuy nhiên, chúng không hoàn toàn giống với Haskell và một số tính năng của chúng có thể phù hợp với bạn hơn (không có hệ thống loại nào tốt hơn vì hệ thống loại trong ngôn ngữ lập trình tồn tại để giúp con người ). Dưới đây là một số tính năng của OCaml mà Haskell không có (nhưng có thể có một khái niệm tương tự tương ứng) hoặc Haskell có nhưng được thực hiện khác nhau:

  1. Các biến thể đa hình .
  2. Các đối tượng với phân nhóm độ sâucác lớp .
  3. Functor , là bản đồ giữa các mô-đun (Haskell có các mô-đun) và thậm chí các mô-đun hạng nhất

Và xin vui lòng, không cần phải biến điều này thành loạt đá luân lưu ML-Haskell, nếu không tôi sẽ bắt đầu liên kết với các bài đăng trên blog của Bob Harper ;-)


9

Ngôn ngữ nghiên cứu Clean có hệ thống loại tốt hơn Haskell, vì nó có các loại duy nhất . Các ý tưởng đằng sau các loại duy nhất có liên quan chặt chẽ với logic tuyến tính , gần với "thế giới thực" giới hạn tài nguyên hơn logic cổ điển.

Ngôn ngữ chống nghiên cứu Rust cũng có một hệ thống loại với các tính năng độc đáo gần với "thế giới thực" hơn các hệ thống loại thuần túy cổ điển. Hầu hết các ý tưởng ảnh hưởng đến hệ thống loại đã được xuất bản hoàn toàn độc lập với Rust từ lâu trước khi nó tồn tại. Nhưng cách những ý tưởng cũ này được kết hợp với nhau là độc nhất, và cũng xứng đáng với các ấn phẩm nghiên cứu thực sự, ngay cả khi tồn tại những sơ hở và sự không nhất quán.


3
Bằng cách nào đó "xuất bản" và "chống nghiên cứu" không đi đôi với nhau.
Andrej Bauer

1
Tính độc đáo chắc chắn là một khái niệm thú vị, nhưng IMO nói nhiều về ngữ nghĩa, hơn là một tính năng hệ thống kiểu như vậy. Và điều này thực sự làm cho hệ thống loại tốt hơn ? Làm sạch có thể làm những thứ mới hơn mà Haskell đã thêm vào hệ thống loại của nó, đa hình cấp cao hơn, v.v. - một số trong số này thậm chí có thể khi hệ thống loại đã cần phải xử lý tính duy nhất?
rẽ trái

1
@leftaroundabout Bạn quen thuộc với các loại duy nhất hoặc logic tuyến tính như thế nào? Nếu x có một kiểu duy nhất, ví dụ f (x, x) không được gõ tốt. Có thể mở rộng Haskell để hỗ trợ các loại duy nhất. Các ngữ nghĩa di chuyển trong C ++ cũng có thể được coi là cải thiện sự hỗ trợ cho các loại duy nhất trên đầu của một hệ thống loại hiện có.
Thomas Klimpel

Tôi quen thuộc với ngữ nghĩa di chuyển của C ++, có lẽ đó là lý do tại sao ấn tượng về tính độc đáo của tôi là vì không phải là một thứ thuộc hệ thống loại. Điều tôi cảm thấy thú vị là, các kiểu duy nhất lan truyền đầy đủ ra bên ngoài có cản trở các tính năng khác của hệ thống loại tiên tiến không?
rẽ trái

1
@leftaroundabout Tài liệu tham khảo Rvalue nghe giống như một thứ hệ thống kiểu đối với tôi. Tại sao các loại tính duy nhất cản trở các tính năng loại nâng cao khác? Trong trường hợp xấu nhất, các tính năng nâng cao đó đơn giản sẽ không áp dụng cho các loại duy nhất. Tất nhiên, các tính năng "thế giới thực" như các loại duy nhất có nghĩa là đi theo chiều rộng thay vì chiều sâu và thời gian bạn dành cho việc đi rộng hơn sẽ không còn ở đó để đi sâu hơn nữa. Nhưng tôi có ấn tượng rằng các loại duy nhất cung cấp một sự cân bằng tốt giữa lý thuyết và thực hành, vì vậy tôi nghĩ rằng thời gian sẽ được chi tiêu tốt.
Thomas Klimpel
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.