14

在 C++ 中是否有Damas-Hindley-Milner风格类型推断的实现,最好使用现代 C++ 技术?

4

3 回答 3

14

这是我在 C++11 中的 Hindley-Milner 类型推断的实现,基于Robert Smallshire 的 Python 代码、Andrew Forrest的Scala 代码、Nikita Borisov 的 Perl 代码和Cardelli 的论文“Basic Polymorphic Typechecking”

它大量使用boost::variantand boost::apply_visitor

于 2012-03-02T08:22:25.883 回答
1

我怀疑你不会有太多的运气;编写这些东西的功能性家伙通常不会在 C++ 中这样做!您可以使用的大多数编译器都用于自己编译(例如,用于 OCaml 或 GHC)。

因此,如果有人确实将 Hindley-Milner 作为玩具项目,它可能不在网上;如果它是编译器的一部分,那么它不太可能在 C++ 中。

可能想到的事情:

  • Haskell 的拥抱是 C 语言;那里会有一些 C 源代码可以做你想做的事情,而 Haskell 是一个很好的熟悉的糖。不是你想要的 C++。
  • 我对 F# 一无所知,但我认为那是 HM,如果有人用现代技术用 C++ 编写了一个胖函数编译器,那可能是 MS。显然是闭源的。
于 2012-01-10T14:03:27.510 回答
1

我们这里有一个类型推理引擎(https://github.com/ltcmelo/psychec)。我们的方法是在 Pottier 和 Remy 的 HM(X) 算法之后实现的,具有用于正确生成约束和类型推断的单独阶段。约束生成是在 C++ 中实现的,但类型解析是在 Haskell 中实现的(对不起!)。该算法推断 C 程序的类型,以重构部分可用的代码。该工具可在线获得:http ://cuda.dcc.ufmg.br/psyche-c/ 。你输入一个 C 程序的一部分,它会产生足以编译它的类型声明。

问候,

费尔南多

于 2016-11-30T16:33:38.103 回答