6

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

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

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

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

4

2 回答 2

17

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

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

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

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

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

所以,回答你的问题:

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

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

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

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

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

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

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

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

于 2017-10-31T11:43:16.393 回答
5

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

不,Scala 3 仍然是图灵完备的语言。你已经可以通过尝试Dotty来进行试验了,它是Scala 3 的当前原型。

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

于 2017-10-31T03:08:31.433 回答