Вывод типа реализован в C++

Существует ли реализация в C++ логического вывода типа стиля Дамаса-Хиндли-Милнера, предпочтительно с использованием современных методов C++?

3 ответа

Вот моя реализация вывода типа Хиндли-Милнера в C++ 11, основанная на коде Python Роберта Смолшира, коде Scala Эндрю Форреста, коде Perl Никиты Борисова и статье "Базовая проверка полиморфных типов" Карделли.

Это делает интенсивное использование boost::variant а также boost::apply_visitor,

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

Так что, если кто-то сделал Хиндли-Милнера как игрушечный проект, то, вероятно, его нет в сети; если он был частью компилятора, то вряд ли он будет в C++.

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

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

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

С Уважением,

Фернандо

Другие вопросы по тегам