Có thực hiện trong C++, trong số Damas-Hindley-Milner suy luận kiểu kiểu, tốt nhất là sử dụng các kỹ thuật C++ hiện đại?Loại suy luận được thực hiện trong C++
Trả lời
Tôi nghi ngờ bạn sẽ không có nhiều may mắn; những kẻ chức năng viết những thứ này thường không làm điều đó trong C++! Hầu hết các trình biên dịch bạn có thể truy cập được sử dụng để biên dịch bản thân (ví dụ: đối với OCaml, hoặc GHC).
Vì vậy, nếu ai đó đã làm Hindley-Milner như một dự án đồ chơi, có thể không có trên mạng; nếu nó là một phần của trình biên dịch, thì nó không thể ở trong C++.
điềuthể mà tôi suy nghĩ:
- Hugs cho Haskell là trong C; sẽ có một số nguồn C trong đó một nơi nào đó làm những gì bạn muốn, và Haskell là một đường quen thuộc tốt đẹp. Không phải là C++ bạn muốn mặc dù.
- Tôi không biết gì về F #, nhưng tôi nghĩ đó là HM, và nếu ai đó đã viết một trình biên dịch chức năng chất béo trong C++ với các kỹ thuật hiện đại, nó có thể là MS. Rõ ràng là nguồn đóng.
Dưới đây là my implementation of Hindley-Milner type inference in C++11, dựa trên Python code by Robert Smallshire, các Scala code by Andrew Forrest, mã Perl bởi Nikita Borisov và paper "Basic Polymorphic Typechecking" by Cardelli.
Nó sử dụng nhiều boost::variant
và boost::apply_visitor
.
Bạn cũng có thể tìm thấy 'boost :: disjoint_sets' hữu ích cho các hoạt động tìm kiếm công đoàn. – max
Chúng tôi có loại công cụ suy luận ở đây (https://github.com/ltcmelo/psychec). Cách tiếp cận của chúng tôi được thực hiện sau thuật toán HM (X) của Pottier và Remy, với các giai đoạn riêng biệt để tạo ra ràng buộc và suy luận kiểu đúng cách. Tạo ràng buộc được thực hiện trong C++, nhưng độ phân giải kiểu được thực hiện trong Haskell (xin lỗi!). Thuật toán đưa các kiểu cho các chương trình C, để xây dựng lại mã một phần có sẵn. Công cụ có sẵn trực tuyến: http://cuda.dcc.ufmg.br/psyche-c/. Bạn nhập một phần của chương trình C và nó tạo ra các khai báo kiểu đủ để biên dịch nó.
Kính trọng,
Fernando
- 1. Java Generics - loại suy luận
- 2. Hindley Milner Loại suy luận trong F #
- 3. "var" suy luận kiểu trong C#
- 4. Tai họa suy luận loại GHC
- 5. Loại chung được suy luận như thế nào ở đây?
- 6. loại scala suy luận với _ giữ chỗ
- 7. C# 3.0 Func/OrderBy suy luận kiểu
- 8. Loại suy luận về phương thức trả về loại
- 9. Phương pháp loại suy luận trong đặc tả Java
- 10. Tại sao tôi không thể khai báo loại suy luận?
- 11. Làm thế nào là loại `([] ==) []` haskell suy luận?
- 12. Suy luận chương trình con
- 13. Suy luận kiểu Scala Tuple trong Java
- 14. C++ 11 suy luận kiểu với lambda và std :: function
- 15. Loại suy luận về các hàm chung lồng nhau
- 16. Làm thế nào để tránh hoặc phát hiện suy luận ủy nhiệm tiềm ẩn trong C#?
- 17. Loại suy luận từ phải sang trái đoạn mã
- 18. Suy luận kiểu C# tốt như thế nào?
- 19. Suy luận sử dụng Jena
- 20. Loại suy luận/kiểm tra loại lỗi khi sử dụng tính toán mức loại
- 21. suy luận Generic trong nhà thầu
- 22. Scala suy luận kiểu câu hỏi
- 23. suy luận kiểu với rvalue initializer_list
- 24. Vấn đề kiểu Scala (suy luận)?
- 25. pandas read_csv vấn đề suy luận dtype
- 26. Lẫn lộn với Haskell suy luận kiểu
- 27. Loại suy luận hạn chế hơn trong JDK 7 so với JDK 6?
- 28. Upper-bound/Lower-ràng buộc Suy luận và sửa chữa
- 29. Chuỗi Scala vs java.lang.String - kiểu suy luận
- 30. Suy luận tập hợp NP-complete?
Erm ... những gì là Damas-Hindley-Milner phong cách suy luận kiểu? Bất kỳ liên kết nào cũng sẽ tốt đẹp. Cũng lưu ý rằng C++ 11 thêm 'auto' cho kiểu suy luận kiểu, và' template 'là các kiểu in-nature inferencing khi được sử dụng như các tham số hàm. – Xeo
Bạn có thể giải thích về "suy luận kiểu kiểu Damas-Hindley-Milner" không? Tôi không cảm thấy như googling nó. –
@ BenjaminLindley: Tôi tưởng tượng rằng đây là một tình huống mà nếu bạn phải tìm kiếm nó, bạn có lẽ sẽ không có câu trả lời, ... –