Вывод типа реализован в C ++ - PullRequest
12 голосов
/ 08 января 2012

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

Ответы [ 3 ]

13 голосов
/ 02 марта 2012

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

В ней интенсивно используются boost::variant и boost::apply_visitor.

1 голос
/ 10 января 2012

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

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

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

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

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

С уважением,

Фернандо

...