Есть ли реализация в С++, типа типа типа Damas-Hindley-Milner, предпочтительно используя современные методы С++?
Вывод типа, реализованный в С++
Ответ 1
Здесь моя реализация вывода типа Hindley-Milner в С++ 11 на основе кода Питона Роберта Смолшира, Scala код Эндрю Форреста, код Perl Никиты Борисов и документ "Основной полиморфный Typechecking" от Cardelli.
Он сильно использует boost::variant
и boost::apply_visitor
.
Ответ 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, и она создает объявления типа, достаточные для ее компиляции.
Привет,
Фернандо