Scala 3 会不会是图灵完备的?

Will Scala 3 not be Turing complete?

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

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

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

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

Is my understanding above actually correct, that is, will Scala 3 no longer be Turing complete?

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

如果您可以为您所指的特定演讲的特定幻灯片提供 link,我们可以帮助您弄清楚它实际想要表达的内容。

At 1:01:00 an answer to an audience question seems to say that future Scala will not be Turing complete.

Did I understand this correctly? Will Scala 3 no longer be Turing complete?

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

首先:被问到的问题是 not Scala 是否不会是图灵完备的,被问到的问题是 Scala Type System 不会是图灵完备的。

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

所以,回答你的问题:

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

If so, what practical impact will this have on someone like me who uses Scala daily at work to solve practical problems?

None 随便吧。首先,由于隐式,类型系统仍然是图灵完备的。其次,即使 weren't,据我所知,Scala 类型系统的图灵完备性还没有用于任何实用有趣的事情。有些库 执行复杂的类型级计算,但这些计算总是终止。没有人编写过在类型级别执行任意图灵完备计算的库。 (事实上​​,这甚至是不可能的,因为尽管 Scala 的类型系统是图灵完备的,但所有当前存在的 Scala 实现(无论如何只有一个)对类型检查器的递归深度都有严格的限制)。

In other words, what do industrial Scala programmers loose and what do they gain by removing Turing completeness?

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

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

OTOH,编译器不能做的很多事情是"because it's equivalent to solving the Halting Problem"。好吧,在非图灵完备的语言中,不存在停机问题!因此,与图灵完备语言相比,编译器可以证明更多关于程序的东西。

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