【问题标题】:What's the difference between C++ "type deduction" and Haskell "type inference"?C++“类型推导”和Haskell“类型推断”有什么区别?
【发布时间】:2016-04-07 02:28:21
【问题描述】:

在英文语义中,“类型推导”是否等于“类型推断”?

我不确定

  1. 这只是不同语言设计者选择的惯用语偏好,或者
  2. 计算机科学给出了严格的“类型推导”定义, 哪个不是“类型推断”?

谢谢。

【问题讨论】:

    标签: c++ haskell types type-inference


    【解决方案1】:

    C++ 规范和工作草案广泛使用“类型推断”来引用没有类型声明作为引用的表达式类型;例如 this working draft on concepts 在谈论 auto 声明的变量时使用它,我记得很多书在谈论模板时使用它,当我不得不学习 - 然后忘记大部分 - C++ 时。然而,Type inference 有自己的维基百科页面,也是编程语言理论中一个重要研究领域的名称。如果说类型推断,人们会立即想到现代类型化的函数式编程语言。您甚至可以将其用作比较语言的标尺;有些人可能会说他们的语言 X 或他们的库 Y 更容易进行类型推理,因此更好或更友好。

    我会说类型推断是更具体、更精确和更广泛使用的术语。类型推断作为一个短语可能只在 C++ 社区中享有盛誉。这些术语是近亲,但它们所使用的上下文赋予了它们不同的颜色阴影。

    【讨论】:

      【解决方案2】:

      如前所述,类型推断在理论上已经研究了多年。这也是几种编程语言提供的共同特性,不仅是 Haskell。

      另一方面,类型推导是C++规范中定义的几个过程的总称,包括返回类型推导、占位符类型推导,以及它们的由来、模板(类型)参数推导。它即将识别一个术语隐含的类型(在 C++ simple-type-specifiertemplate-argument 中),但尚未推断出类型。它类似于类型推断,是关于typing -- 确定术语的类型,但受到更多限制。

      主要区别在于:

      1. 类型推导是获取具有某种限制形式的术语类型的过程。通常 C++ 表达式的类型是没有类型推导规则的。在大多数情况下,表达式的静态类型由形成表达式的特定语义规则确定。类型推断可以用作一种真正通用的静态类型方法。
      2. 由于术语“类型”在 C++ 中的含义比类型理论、编程语言理论和许多当代编程语言中的含义更受限制,因此结果的域也受到更多限制。也就是说,类型推导必须推导出一个格式良好的 C++ 类型,而不是一个高阶类型(不能表示为 C++ 类型)。

      如果不对 C++ 的类型系统进行大规模重新设计,这些限制可能不会改变,因此它们可能是必不可少的。

      【讨论】:

        猜你喜欢
        • 2016-10-09
        • 1970-01-01
        • 2012-05-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多