2012-01-08 37 views
11

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++

+1

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

+0

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ó. –

+10

@ 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, ... –

Trả lời

1

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ều

thể 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.
0

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

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