C ++"类型演绎"之间的区别是什么?和Haskell"类型推断"?

时间:2016-04-07 02:28:21

标签: c++ haskell types type-inference

在英语语义中,"类型演绎"等于"类型推断"?

我不确定是否

  1. 这只是不同语言设计师选择的成语偏好,或
  2. 那里的计算机科学讲述了严格的#34;类型演绎"定义,    这不是"类型推断"?
  3. 感谢。

2 个答案:

答案 0 :(得分:3)

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

我想说类型推断是更具体,更精确,更广泛使用的术语。类型推导作为短语可能只保留C ++社区中的标记。这些术语是近亲,但他们使用的语境给他们带来了虚构的色彩。

答案 1 :(得分:2)

如上所述,类型推断在理论上被研究多年。它也是几种编程语言提供的常见功能,而不仅仅是Haskell。

另一方面,类型推导是C ++规范中定义的几个进程的通用名称,包括返回类型推导,占位符类型推导以及它们的来源,模板(类型)参数推导。它将要识别一个术语(在C ++ 简单类型说明符模板参数中)隐含的类型,其中包含未知的待推导类型。它类似于类型推断,它是关于输入 - 确定术语的类型,但更受限制。

主要区别是:

  1. 类型扣除是获取具有某种限制形式的术语类型的过程。通常,在没有类型推导规则的情况下键入C ++表达式。在大多数情况下,表达式的静态类型由形成表达式的特定语义规则确定。可以使用类型推断作为静态类型的一种真正通用的方法。
  2. 由于术语“类型”在类型理论,编程语言理论和许多当代编程语言中与C ++相比具有更多限制含义,因此结果的领域也受到更多限制。也就是说,类型推导必须推导出格式良好的C ++类型,而不是高阶类型(不能表达为C ++类型)。
  3. 如果不对C ++类型系统进行大规模的重新设计,这些限制就不会发生变化,所以它们必不可少。