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

Paul Graham:百年编程语言

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

很难预测人们的生活在一百年后会是什么样子,我们只能给很少的事物一个确切的预测。我们知道到那时候每个人都将驾驶气垫轿车,地方法规将对建造上百层的高楼无所制约,大部分时间都将日月无光,女人们都将精通武术(martial arts)……在这里,让我们把这幅图景的一个细节放大来看看:那时候人们用什么编程语言来写那些气垫轿车的控制软件呢?

这是一个值得思考的问题,其意义不在于我们一定要用这种语言,而是在于据此我们可以选择可能发展成那种语言的语言——如果我们够幸运的话。

我认为,语言就像物种一样,会形成进化树,没有前途的分支将枯死脱落。我们已经看到了这种事情发生:Cobol——曾几何时风光无限,现如今没有一个像样的后代,它就是在进化中被淘汰的“穴居人”语言。(译注:穴居人是石器时代的欧洲大陆的主宰,大约3万年前灭绝。穴居人又叫尼安德特人,其发声系统不发达。)

我预测Java的气数也跟这种语言差不多。有人不时发邮件跟我说:“你怎么能说Java不可能成为一种成功的语言呢?它现在已经是一种相当成功的语言了。”那么我承认这一点——如果你衡量成功的标准是关于Java的书籍(特别是个人著作)在书架上占去的空间的大小,或者是为了找工作不得不学习Java的大学生的数量的多少的话。我所说Java不可能成为一种成功的语言,意思是从物种进化的角度来看,Java将会走向穷途末路,就像Cobol一样。

这只是一个猜想,我也许会猜错。我在此的重点不是要讨论Java,而是要提出进化树的论点并引发人们来问自己:“X语言在进化树上的什么位置?”之所以提出这个问题,不仅为了避免百年后去后悔,更主要是因为跟紧语言发展的主流对于当前选择好的编程语言有积极的启发意义。

假如你生活在旧石器时代,任何时候你大概都会因为自己“处在进化树的主干上”(译注:石器时代地球上生活着智人在内的多个人种,后来其他人种都灭绝了,只有智人在竞争中生存下来,成为现代人类的祖先)而感到无比幸福,虽然还有大量的穴居人——他们也是这个世界的居民,并且克鲁马努人(译注:旧石器时代晚期在欧洲的高加索人种)不时会来袭击你,还偷走你的食物。

因此我也想知道编程语言在一百年以后会是什么样子,从而决定现在该把赌注押在哪个“树枝”上。

编程语言的进化过程又不同于物种的进化过程,因为编程语言的分支可能会汇聚。譬如Fortran这个分支,似乎正在渐渐并入到Algol的后代中。理论上讲这对于物种来说也是可能的,但是这种可能性很小,似乎从来就没有发生过。

集中化对于语言的进化更有可能,部分原因是语言进化的走向空间比较小,还有部分原因是对语言的进化来说,突变不是随机的。语言的设计者总会有意识地吸取其他语言的思想。

对于语言设计者来说,考虑一下编程语言的进化方向就特别有意义,因为他们可以据此把握好设计取向。在那种情况下,“处在进化树的主干上”就不只是选择一个好的语言了,而是从中得到启发,以对语言的设计做出正确的决策。

任何编程语言都可以分为两个部分:作为公理(axiom)的一个基本运算符(operator)集和语言的其他部分,其他部分原则上可以根据基本语素写出来。我想基本语素集是一种语言在其漫长的生存期中最重要的部分了,而其他部分可能会改变。这就好比买一幢房子,原则上你应该首先考虑房子的地理位置,其他的任何因素你都可以调整,但是你不能调整位置。

我认为好的公理的选择很重要,但是公理要尽量少,这一点同样重要。数学家们对于这一点感受应该更深刻:公理越少越好。我认为也确实如此。

最近,人们仔细核查起编程语言的核心,看看是不是有什么“公理”是可以除去的,这已经成为一项有益的实践。我发现在我长期的职业生涯里,自己经常像个笨蛋一样,用垃圾堆积着垃圾(译注:原文cruft breeds cruft,随着软件的发展,以及经历了修改bug和更新的若干周期,它的部分代码已不再使用但仍然保留在源码中。这种代码称为cruft。 cruf可能是一两行无用代码或整个源文件模块。由于很难识别cruft,去除cruft 往往很困难。)并且我发现同样的事情在软件里随时随地都在发生。

我有一个预感,软件进化树的主干会贯穿于某些编程语言中,这些语言有着最小、最干净的“核”。一种语言越能用它自己来写自己,就越好。

当然,在提出一百年后编程语言会是什么样子的问题的时候,我做了一个很大的假设。一百年后我们还写程序吗?我们不是只需要告诉计算机我们希望他们做什么就可以了吗?到现在为止,这方面还没有大的进展。我想此后的一百年里,人们还是要通过现在这样手工编写的程序来告诉计算机去做什么。或许有的问题我们现在需要写程序来解决,而一百年后这些问题不必再写程序来解决,但是我想我们还是要面对很多我们今天编程所面临的同样的问题。

谁要说他能预测某一技术在一百年后将是什么样子,我们都会觉得他在吹牛。但是不要忘记我们已经有了五十年的经验,当我们反思过去的五十年里语言的进化是多么缓慢的时候,再来展望一下一百年后的情况就是一件可以理解的事。

语言进化缓慢,是因为它们并不是技术,语言只是符号。程序只是告诉计算机你要解决的问题的形式化的描述。编程语言的进化的速度并不像搬运或传递,倒更像数学符号的进化速度——数学符号也在进化,但是如你所见,却不像它所支持的技术一样有巨大而飞快的变化。

无论一百年后计算机是什么材料做的,可以很肯定地预测它将比现在运行更快。如果摩尔定律(Moor’s Law)继续有效的话,它的速度将是现在的7,379亿亿(quintillion)(73,786,976,294,838,206,464)倍,这是难以想象的。不可否认,对于速度的预测摩尔定律很可能失效,任何事物如果每18个月就增长一倍的话,长到最后就很可能违背某些基本的极限。但是这不妨碍我们去相信计算机会比现在快得多,即使它最后只比现在快那么小小的一百万倍,也会从本质上改变编程语言的基本规则。到那时候,那些当前被认为是运行速度缓慢、不能生成高效率生成码的语言就会得到更多的空间。

固然有一些应用还将追求速度。因为我们用计算机解决的一些问题本身是由计算机引起的,比如你要处理的视频图像的速率依赖于另一台产生视频图像的速率。另外还存在一些可以无限吃掉机时的问题,例如图像描述、加密、仿真等。

(编辑:拼字网 - 核心网)

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