【问题标题】:Type inference implemented in C++用 C++ 实现的类型推断
【发布时间】:2012-01-08 02:10:34
【问题描述】:

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

【问题讨论】:

  • Erm... Damas-Hindley-Milner 样式类型推断是什么?任何链接都会很好。另请注意,C++11 添加了auto 用于类型推断,templates 在用作函数参数时是天生的推断类型。
  • 你能详细说明什么是“Damas-Hindley-Milner 风格类型推断”吗?我不想在谷歌上搜索它。
  • @BenjaminLindley:我想这是一种情况,如果您必须查找它,您可能也不会得到答案......
  • 我认为问题不是{implementation of {type inference in C++}},而是{implementation in C++ of {type inference}}。 @Keveman:检查关于 SO 的其他问题(我添加了正确的标签),也许它们有一些帮助......也许 C++ 编译器的源代码可以具有教育意义,因为模板是一种函数式编程语言。
  • 按照 Kerrek 的建议更改了描述。

标签: c++ type-inference hindley-milner


【解决方案1】:

这里是 my implementation of Hindley-Milner type inference in C++11,基于 Python code by Robert SmallshireScala code by Andrew Forrest、Nikita Borisov 的 Perl 代码和 paper "Basic Polymorphic Typechecking" by Cardelli

它大量使用了boost::variantboost::apply_visitor

【讨论】:

  • 您可能还会发现boost::disjoint_sets 对联合查找操作很有用。
【解决方案2】:

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

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

想到的可能的事情:

  • Hugs 代表 Haskell 在 C 中;那里会有一些 C 源代码可以做你想做的事,而且 Haskell 是一个很好的熟悉的糖。不是你想要的 C++。
  • 我对 F# 一无所知,但我认为那是 HM,如果有人用现代技术用 C++ 编写了一个胖函数式编译器,那可能是 MS。不过显然是封闭源代码。

【讨论】:

    【解决方案3】:

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

    问候,

    费尔南多

    【讨论】:

      猜你喜欢
      • 2010-09-29
      • 1970-01-01
      • 2019-04-24
      • 2021-02-21
      • 1970-01-01
      • 2011-06-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多