【问题标题】:Will Scala 3 not be Turing complete?Scala 3 不会是图灵完备的吗?
【发布时间】:2018-04-12 02:43:06
【问题描述】:

我参加了 Martin Odersky 关于 Scala 未来的以下主题演讲:

https://skillsmatter.com/skillscasts/8866-from-dot-to-dotty

在 1:01:00,对观众问题的回答似乎表明未来的 Scala 不会是图灵完备的。

我是否理解正确? Scala 3 将不再是图灵完备的吗?如果是这样,这对像我这样每天在工作中使用 Scala 解决实际问题的人有什么实际影响?换句话说,工业 Scala 程序员会失去什么?通过移除图灵完备性他们会获得什么?

【问题讨论】:

标签: scala turing-complete dotty


【解决方案1】:

在 1:01:00,对观众问题的回答似乎表明未来的 Scala 不会是图灵完备的。

我是否理解正确? Scala 3 将不再是图灵完备的吗?

不,这既不是被问的问题,也不是被给出的答案。

首先:被问的问题是不是 Scala 是否不会是图灵完备的,被问的问题是Scala 类型系统 是否不会是图灵完备的.

其次:给出的答案是不是未来 Scala 的类型系统不会是图灵完备的。 Martin Odersky 明确表示 with 隐式,类型系统将肯定是图灵完备的,而 没有 隐式,他不想关于它是否是图灵完备的预测。

所以,回答你的问题:

  • Scala 肯定仍然是图灵完备的。
  • 您链接到的问题不是关于 Scala,而是关于 Scala 的类型系统。
  • 由于隐式,Scala 的类型系统仍将是图灵完备的。
  • Scala 的类型系统没有隐式可能是图灵完备的,也可能不是图灵完备的,我们还不知道,Martin Odersky 不想做出任何预测。

如果是这样,这对像我这样每天在工作中使用 Scala 解决实际问题的人有什么实际影响?

什么都没有。首先,由于隐含,类型系统仍然是图灵完备的。其次,即使它不是,AFAIK,Scala 类型系统的图灵完备性也没有用于任何实际有趣的事情。有些库确实执行复杂的类型级计算,但这些计算总是终止。没有人编写过在类型级别执行任意图灵完备计算的库。 (事实上​​,这甚至是不可能的,因为即使 Scala 的类型系统是图灵完备的,但所有当前存在的 Scala 实现(反正只有一个)对类型检查器的递归深度有严格的限制)。

换句话说,工业 Scala 程序员会失去什么,通过移除图灵完备性他们会获得什么?

让我们首先谈谈类型系统:它们不会丢失任何东西。他们获得的是编译可以保证终止的事实,这意味着编译器可以证明它无法证明的程序的东西。

让我们也回答假设的问题:如果 Scala 不是图灵完备的怎么办?好吧,我们不能再写无限循环了。差不多就是这样。但是请注意,许多通常建模为数据上的无限循环(或无限递归)的事物仍然可以建模为协同数据上的有限共同递归! (例如,操作系统、Web 服务器或 GUI 中的事件循环。)

OTOH,编译器不能做的很多事情是“因为它等同于解决停机问题”。好吧,在一种不是图灵完备的语言中,停止问题是不存在的!因此,与图灵完备的语言相比,编译器可以证明更多关于程序的事情。

但是,重申一下:没有计划让 Scala 不具备图灵完备性。没有计划使隐含不是图灵完备的。类型系统存在限制,这些限制可能会或可能不会使类型系统不是图灵完备的。

【讨论】:

    【解决方案2】:

    我上面的理解真的正确吗,也就是说,Scala 3 不再是图灵完备了吗?

    不,Scala 3 仍然是图灵完备的语言。您已经可以通过试用 Dotty 来试验它,这是将成为 Scala 3 的当前原型。

    如果您可以提供指向您所指的特定演讲的特定幻灯片的链接,我们可以帮助您弄清楚它实际上试图表达什么。

    【讨论】:

      猜你喜欢
      • 2014-12-26
      • 2015-08-23
      • 2011-05-22
      • 2017-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      相关资源
      最近更新 更多