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

Paul Graham:百年编程语言

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

必须声明,我并不是建议所有的数值计算统统用列表来实现。我只是建议语言在没有为应用而增加任何额外的符号之前的核心部分这样来定义。实际上任何需要数学计算的程序大多会用二进制来表示数字,但是这只是一个优化,并在语言的核心语义范围中。

另外应用程序和硬件之间软件的多层次性也消耗了很多计算机机时。这也是我们已经看到的发展趋势:许多软件只是被编译成字节码,运行在字节码解释器上。Bill Woods曾经告诉我,每一层解释器大概最起码要消耗10%的速度,这些额外的开销换来的是你程序的弹性。

Arc的最初版本就是这种软件分多层以获取弹性的极端的例子。那是一个建立在Common Lisp上的经典的“元循环”(metacircular)解释器,与McCarthy最初的Lisp论文中的eval函数(eval function)有一定的共同性。整个Arc只有200余行代码,所以非常易于理解和修改。而我们所用的Common Lisp,即CLisp本身又运行在一个字节码解释器上。因此这里就存在两层解释器,其中一层(上面的那一层)是惊人的低效,但是Arc仍然能用。虽然我承认它用起来很勉强,但是毕竟能用。

在应用程序方面,把软件分层是一项了不得的技术。自底向上编程意味着一层一层地写程序,每一层作为“语言”供上一层使用。这种方式有利于生成小而灵活的程序,也是取得可复用性这座“圣杯”(holy grail)的最佳途径——“语言”定义上的可复用性。在你写某种类型的应用程序的时候,越是能把你的应用下压到“语言”中,你的软件的可复用性也就越高。

不知何故可复用性的思想在1980年代被牵扯到面向对象编程中,并且看来还没有要把它解放出来的反对性的迹象。然而虽然某些面向对象软件是可复用的,但是使程序可复用的并不是面向对象,而是它的自底向上特性。想想库函数:它们可复用使因为它们是“语言”,无论它们是不是采用了面向对象的方法。

顺便说一句,我并不是预测面向对象编程的灭亡。虽然我认为它不能给好的程序员更多的帮助,但是在某些专门的领域,一些大型组织还是离不开它。面向对象编程提供了一种可行的方式去获得意大利面条式的代码,它允许你把一系列代码碎片拼合成程序。大型组织通常愿意用这种方式开发软件,我认为一百年后情况也还是如此。

在我们谈论未来的时候,最好也谈谈并行计算,因为那时候这种想法将成为现实。也就是说,并行计算看来一定会实现,无论你说那是什么时候。

未来能赶上并行计算吗?人们近20年来都在说并行计算即将实现,可是它到如今也还没有对编程产生实质影响。真的没有影响吗?芯片设计者们不得不考虑它,试图写在多CPU电脑上的系统软件的人们也不得不考虑它。

真正的问题在于,并行化会在抽象的道路上走多远?一百年后它会影响到应用软件的程序员吗?还是只是编译器编写者们才考虑它,而一般应用软件的源代码里看不见其踪影?

很有可能的倒是大多数并行化的机会都会被浪费。这是我所作的关于我们所获得大多数额外的计算能力将会被浪费的预测的一个特例。我认为,随着将来硬件处理速度的巨大提升,并行化将不会很常用,除非你确实需要它。这表明我们一百年后的并行化(除了特定的应用以外)都不会是大规模的并行化。我认为对普通程序员来说,更可能是生成一些并行运行的子进程。

这就像在程序生命的晚期你改变一个数据结构的精确实现一样,你只是在试图优化它。“第一版程序”通常会忽略并行计算带来的好书,就像忽略数据的精确表述带来的好处一样。

因此,除了某些特定的应用软件以外,一百年内并行化将不会普遍在程序里使用。如果用了,将会是一种不成熟的优化。

一百年后将还存在多少种编程语言?最近似乎有大量新的编程语言出现。部分原因是更快的硬件允许程序员们在速度和便利性之间根据应用做出不同的折中。如果语言的增多是一个真实的趋势,那么一百年后我们拥有的硬件只会增长这种趋势。

不过也许一百年后只剩下几种广泛使用的语言。我这样说,部分原因是我的乐观:如果你真的干得好,你可能设计出某种语言,它既适合写出 “慢而便利”的“第一版程序”,也可以在需要的时候通过给编译器一些适当的优化建议,让它产生非常快的生成码。因为我的乐观,我还可以预测不管“可接受”的效率与“最高效”的效率之间的 “鸿沟”有多宽,一百年后程序员都将拥有合适的语言跨越它们。

随着“鸿沟”的变宽,性能评测器(profiler)将会越来越重要。现在软件性能评测方面关注的太少了,许多人都还相信编写出能产生快的生成码的编译器是让程序运行更快的途径。随着“可接受性能”与“最优性能”之间的“鸿沟”的变宽,人们也越来越清楚获得更快的应用软件的正确途径是要有一个从“可接受”到“最优”的指引,就是性能评测器。

当我说未来只会剩余几种语言的时候,并不包括那些特定领域的“小语言”。我认为这些嵌入式语言是伟大的,我也希望它们能够越来越多。但是我希望它们写出来的东西能够像薄薄的外皮一样,让用户能够看到下面更通用的语言。

谁来设计未来的语言呢?过去十年里一个最振奋人心的趋势是Perl、Python、Ruby等开放源码语言兴起,黑客们接过了语言设计的任务。迄今为止结果虽然凌乱,但还算可嘉。例如,Perl里面就有一些极好的新颖的想法。虽然也有许多还很不足的地方,但是大家都在执着地努力。如果保持现在的转变速度,天知道一百年后Perl会进化成一个什么样的语言。

一般来讲可实践者也是传授者(我认识一些最优秀的黑客都是教授),但是有许多领域传授者却不是实践者,所谓“学术”一向以堂皇的职业等级欺骗视听。在任何学术领域都有一些主题是被认可的而另外一些主题却不是,不幸的是被认可的主题与不被认可的主题之间的区别往往在于它在研究论文中的描述听起来多么有难度,而不是取得一个好的结果的意义有多么重要。像文艺作品就是一个明显的例子,研究文艺作品的人很少说对作者哪怕有一丁点用处的话。

(编辑:孝感站长网)

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

热点阅读