加入收藏 | 设为首页 | 会员中心 | 我要投稿 孝感站长网 (https://www.0712zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 编程要点 > 语言 > 正文

Paul Graham:百年编程语言

发布时间:2018-04-27 21:44:23 所属栏目:语言 来源:伯乐在线
导读:很难预测人们的生活在一百年后会是什么样子,我们只能给很少的事物一个确切的预测。我们知道到那时候每个人都将驾驶气垫轿车,地方法规将对建造上百层的高楼无所制约,大部分时间都将日月无光,女人们都将精通武术(martial arts)在这里,让我们把这幅图

可能的设计出那种语言的方式是仅凭你的意愿写下程序,不用考虑是否有编译器可以解释它,也不用考虑是否有硬件能运行它。当你写程序的时候你可以假想有无限的资源(我想我们现在应该可以想象得到一百年后有无限资源的情景)。

人们会凭意愿写出什么样的程序呢?应该是所需的最少的劳动。要彻底的最少:在你的思维还没有被你现在习惯了的编程的语言影响的“前提”下所想到的所需的最少的劳动。不过你已经习惯了的编程语言的影响是如此的普遍深刻,以致于你不得不做出巨大的努力来克服它。你可以尽量想象一下我们这些懒鬼怎么去用最少的努力表达一个程序。事实上,因为我们所有的想法是如此受到我们的思维所用的语言的限制,所以程序的简洁一点的表达都让我们非常吃惊。你需要做的是发现和觉醒,不是自然而然地陷入其中。

一个有用的诀窍是用程序的长度来作为你编程劳动的多少的近似值——当然不是按字符来计算的长度,而是按独立语法元素(基本上就是是解析树的大小)来计算的长度。要说最短的程序就标志是你最少编程劳动也不完全准确,但是它作为一个简洁性的指标是寥胜于无的。那么,语言设计的法则就变成了:看看一个程序并问一问,是否还有别的方法可以把程序写得更短?

实际上,用不可想象的百年语言写程序会根据你接近它的内核的程度不同其结果也有所不同。你可以现在就写出排序程序,但是很难预测一百年后将需要什么样的代码库(library),大概会出现许多新领域的代码库。譬如,如果到时候SETI@home(译注:Search for Extra Terrestrial Intelligence at home,是由美国加州大学伯克利分校建立的一项旨在利用连入Internet的成千上万台计算机的闲置能力搜寻地外文明的巨大试验)还有效,我们就将需要与外星人(alien)通信的代码库。当然前提是他们也足够发达,也能用XML来沟通。

极端一点,我认为你今天就有可能设计出那种核心语言。有人可能会说,实际上它已经早在1958年(译注:J.McCarthy于1958年提出了Lisp的想法,并于同年跟他的学生们一起进行最初的实现工作。)就被设计好了。

假设我们今天就可以用所谓百年语言,我们会用它来编程吗?为了回答这个问题,让我们回顾一下从前,如果我们当前所用的编程语言在1960年就可用,那时的人们会用它们吗?

从各个方面来讲,答案都是否定的。当今的语言是建立在1960年还不存在的一些基础上的。例如,像Python这种语言中每行的缩进是很有意义的规定,但是这种规定在那时候的打印终端上是行不通的。这样的问题暂且不说,试想一下,那时候的程序都是写在纸上的,1960年代的程序员们会喜欢用我们今天所用的语言来写程序么?

我认为还是会的。虽然对于那些已经把史前古老的语言根深蒂固地融入到他们对计算机程序的认识中的缺乏想象力的人来说,确实很难。(天哪!没有指针方法那怎么操纵数据?没有goto怎么实现流程图?)但是我认为最聪明的程序员们将很自然地使用我们当今所用的大多数语言——如果他们当时有这些语言的话。

如果我们现在就拥有了百年语言,起码它会产生伟大的伪代码。用它来写程序又会怎么样呢?既然百年语言需要生成快的生成码以适应某些应用,那么大概它应该也能生成足够可接受的高效的生成码来适应我们现在的硬件。只是我们或许不得不比一百年后的用户要给出更多的优化建议,但那也是划算的。

我们现在有了两个观念,如果你把他们结合起来,会产生有趣的可能性:(1)原则上讲,百年语言是可以在今天被设计出来的;(2)这种语言如果今天已经存在,那么用它来编程应当是不错的。当你看到像这样明摆着的两个观念,就不难想到:为什么不现在就试着用百年语言来编程呢?

如果你是做语言设计工作的,我认为你最好有这种目标,并且把它牢记于心。当你学驾驶的时候,他们教给你的基本原则之一就是不要只是让你的引擎盖对准道路上的行道线,而是要把目光瞄准远处。哪怕你只是在意下一个10英尺会发生的事,也应该这样。我想我们在编程语言方面可以也应该这样做。

Notes

我相信Lisp语言中的Machine Lisp是第一个将“声明(动态变量除外)只是优化建议,而不会改变正确程序的意义”这一原理具体化的语言,而Common Lisp首次将其明确地阐释了出来。

感谢Trevor Blackwell,Robert Morris 和Dan Giffin,他们阅读了本文的初稿,感谢Guido van Rossum,Jeremy Hylton和Python社团的其他全体成员,是他们邀请我在Python大会上讲话。

(编辑:孝感站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读