Вывод типа, реализованный в С++

Есть ли реализация в С++, типа типа типа Damas-Hindley-Milner, предпочтительно используя современные методы С++?

Ответ 2

Я подозреваю, что вам не повезет больше; функциональные парни, которые пишут этот материал, вообще не делают этого в С++! Большинство компиляторов, к которым вы можете обратиться, используются для компиляции (например, для OCaml или GHC).

Итак, если кто-то сделал Hindley-Milner как игрушечный проект, он, вероятно, не в сети; если он был частью компилятора, то вряд ли он будет в С++.

Возможные вещи, которые приходят на ум:

  • Hugs для Haskell находится в C; там где-то будут какие-то источники C, которые делают то, что вы хотите, а Haskell - хороший знакомый сахар. Не С++ вы хотите, хотя.
  • Я ничего не знаю о F #, но я думаю, что HM, и если бы кто-нибудь написал полный функциональный компилятор на С++ с помощью современных технологий, возможно, это был MS. Очевидно, закрытый источник.

Ответ 3

Здесь мы имеем механизм вывода типа (https://github.com/ltcmelo/psychec). Наш подход реализуется после алгоритма HM (X) Потье и Реми, с отдельными этапами для генерации ограничений и вывода типа правильно. Генерация Constraint реализована в С++, но разрешение типа реализовано в Haskell (извините!). Алгоритм отображает типы для программ C, чтобы частично восстановить код. Инструмент доступен в режиме онлайн: http://cuda.dcc.ufmg.br/psyche-c/. Вы вводите часть программы на C, и она создает объявления типа, достаточные для ее компиляции.

Привет,

Фернандо