关于计算机科学:如果每一个可计算的东西都可以在1秒内完成,那么编程语言会是什么样子?

What would programming languages look like if every computable thing could be done in 1 second?

Inspired by this question

假设我们有一台神奇的图灵机器,它有无限的内存和无限的CPU能力。

用你的想象力来说明这是如何可能的,例如,它使用某种超空间连续体来自动地将任何想要的东西并行化,这样它就可以在一秒钟内计算出任何可计算问题的答案,不管它的时间复杂性是什么,以及实际的"逻辑步骤"的数量。

然而,它只能在一秒钟内回答可计算的问题…所以我不是在假设一台"不可能"的机器(至少我不这么认为)。例如,这台机器仍然无法解决停机问题。

这种机器的编程语言是什么样子的?我目前所知道的所有编程语言都必须对"算法复杂性"做出一些让步…但是,如果删除了这个约束,我希望我们所关心的只是编程语言的"表现力"。也就是说,它能够简洁地表达"可计算的问题"…

不管怎样,为了一个有希望的有趣的讨论,打开它作为社区维基…


这不太合乎逻辑。如果一件事需要O(1)次时间,那么做N次将需要O(n)次时间,即使在量子计算机上也是如此。"每件事"不可能花费0(1)时间。

例如:Grover的算法,即你链接到的问题的公认答案中提到的算法,需要O(n^1/2)时间在n个项目的数据库中找到一个元素。这不是O(1)。


1
2
SendMessage travelingSalesman"Just buy a ticket to the same city twice already. You'll spend much more money trying to solve this than you'll save by visiting Austin twice."
SendMessage travelingSalesman"Wait, they built what kind of computer? Nevermind."


内存的数量、内存的速度或处理器的速度并不能定义算法的时间和空间复杂性。基础数学就是这样。如果一切都可以用o(1)计算,那么询问编程语言是什么样子的,就像询问如果pi是3,并且所有平方根的结果都是整数,那么我们的计算器是什么样子的。这真的是不可能的,如果不可能的话,也不太可能是非常有用的。

现在,问自己,我们将如何处理无限的过程能力和无限的记忆可能是一个有用的练习。我们仍然需要处理算法的复杂性,但是我们的工作可能会有所不同。为此,我推荐百年语言。


请注意,即使停止问题不可计算,"对于所有可能小于m的输入,是否在n步内停止"是!

因此,任何编程语言都将成为纯粹的规范。您所需要做的就是准确地指定函数的前置和后置条件,编译器可以实现实现您的规范的最快的代码。

而且,这会很快触发奇点。如果你能做近乎无限的计算,那么构建一个人工智能就容易得多——一旦你有了一个效率很高的人工智能,它就会问一个可计算的问题:"如果我花了十亿年的时间来思考它,我该如何改进我的程序?"…


可能是哈斯克尔语。说实话,这是个梦想。你对你的类型、类和函数的"法则"进行编程,然后放开它们。它非常有趣,功能强大,您可以编写一些非常简洁和优雅的代码。就像一门艺术。


可扩展性不再是一个问题了。我们会比我们聪明的多。我们不需要再编程了,相反,人工智能会在我们自己意识到它们之前找出我们的意图。


你低估了O(1)。这意味着存在一个常数c>0,因此计算问题的时间仅限于这个c。

您忽略的是,C的实际值可能很大,并且对于不同的算法,它可能(而且大多数情况下)不同。你可能有两种算法(或者计算机——不重要),都是O(1),但在一种算法中,C可能比另一种算法大十亿倍——那么后者的速度会慢得多,而且在时间上可能非常慢。


也许它看起来更像伪代码而不是"真正的"代码。毕竟,您不必再担心任何实现细节,因为无论采用哪种方式,它都会足够快。


如果这一切都能在一秒钟内完成,那么大多数语言最终会变成这样,我称之为dwim理论(做我所说的理论):

1
Just do what I said (without any bugs this time)

因为如果我们开发出一种能在一秒钟内计算所有东西的机器,那么在那个阶段,我们可能会有大脑控制,至少是人工智能。


SQL就是这样一种语言——你需要一些数据,然后你就得到了。如果您不必担心数据库的分钟实现细节,这甚至可能是编程的乐趣。


我不知道会出现什么新语言(我是物理学家,不是计算机科学家),但我仍然会用python为它编写程序。