Scala 3不会图灵完整吗?

时间:2017-10-31 01:55:08

标签: scala turing-complete dotty

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

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

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

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

2 个答案:

答案 0 :(得分:16)

  

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

     

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

不,这既不是问题,也不是答案。

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

其次:给出的答案是而不是未来Scala的Type System将不会是Turing-complete。 Martin Odersky清楚地说带有暗示,Type系统肯定是Turing-complete,没有暗示,他不想做关于它是否会图灵完备的预测。

所以,回答你的问题:

  • Scala肯定仍然是Turing-complete。
  • 您链接的问题与Scala无关,而与Scala的Type System有关。
  • 由于隐含,Scala的类型系统仍然是Turing-complete。
  • Scala的类型系统没有暗示可能是也可能不是Turing-complete,我们还不知道,而且Martin Odersky不想做任何预测。
  

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

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

  

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

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

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

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

但是,要重新进行迭代:没有计划让Scala不是Turing-complete。没有计划暗示没有图灵完整。对于类型系统存在 限制,这可能会也可能不会使类型系统无法完成图灵。

答案 1 :(得分:4)

  

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

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

如果您可以链接到您所指的特定演讲的特定幻灯片,我们可以帮助您弄清楚它实际上要表达的内容。