本文摘自即将上市的《代码的未来》(松本行弘著,周自恒译)。

enter image description here

100年后的编程语言

美国风险投资家、Lisp启蒙家、作家保罗•格雷厄姆在其《一百年后的编程语言》1一文中想象了100年后可能会出现的编程语言,并提议将他的观点应用到现在的编程语言中。

1 保罗•格雷厄姆(Paul Graham,1964~)是美国风险投资家、计算机科学作家。《一百年后的编程语言》(The Hundred-Year Language)一文收录于保罗•格雷厄姆的文集《黑客与画家》一书中,人民邮电出版社2011年4月出版,阮一峰译。

他主张,100年后的编程语言进化的主线,应该以少量公理为基础的“拥有最小最简洁核心的语言”。在现有编程语言中,最具有这一特征的莫过于他最喜欢的Lisp了。所以说,他的主张实际上就是说,Lisp才是100年后编程语言的进化方向。

唔,像我这样的小人物要跟他叫板好像也挺不自量力的,不过我还是认为,对于未来,应该基于从过去到现在的变化方向,并在其延长线上做出预测。当然,将来也许会发生一些无法预料的状况,从而大幅扭转之前的前进方向,不过这样的事情从定义来说本来就是无法预测的,你非要预测它,本质上也是毫无意义的。

作为一个编程语言御宅族,通过反观过去半个世纪以来编程语言的进化方向,我认为编程语言绝对不会按照保罗•格雷厄姆所说,向着“小而干净”的方向来进化。现在的编程语言,无论是功能上还是语法上都已经不是那样单纯了,虽然也曾经有人努力尝试将这些语言变得更小更简单,但包括保罗•格雷厄姆自己所设计的Arc 2在内,都决不能算是成功的尝试。

2 Arc语言是Lisp的方言之一,由保罗•格雷厄姆与罗伯特•泰潘•莫里斯(Robert Tappan Morris,1965~)共同设计,于2008年首次发布。

在我看来,编程语言的进化动机,不是工具和语言本身的简化,而是将通过这些工具和语言所得到的结果(解决方案)更简洁地表达出来。近半个世纪以来,编程语言不断提供愈发高度的抽象化特性,也正是为了达到这个目的。因此我们可以很自然地认为,这种趋势在将来也应该会继续保持。

基于上述观点,如果要我来预测100年后编程语言的样子,我认为应该会是下面三种情况的其中之一:

  1. 变化不大。编程语言的写法从上世纪80年代开始就几乎没有什么进化,今后即便出现新的 写法,也只是现有写法的变形而已。(从发展上来看,是比较悲观的未来)

  2. 使用编程语言来编程这个行为本身不存在了。人类可以通过和计算机对话(大概是用自然语言)来查询和处理信息。(类似《星际迷航》中的世界,对于编程语言家来说是比较失落的未来)

  3. 发明了采用更高抽象度写法的编程语言。这种语言在现在很难想象,不过应该是比现在更加强调What,而对于如何解决问题的How部分的细节,则不再需要人类去过问。(难以预测的未来)

当然,上面的预测也只不过仅仅是预测而已,有可能与未来的实际情况大相径庭,或者说,与实际大相径庭的可能性比较大吧。不过话说回来,100年后我也已经不在这个世上了,这不是白操心嘛。

20年后的编程语言

通过对100年后的预测,我们明白了“预测100年后的事情是非常困难的”。想想看,100年前连飞机还没有民用化呢,100年后我已经可以坐在飞机上舒舒服服地写这本书的稿子了,这足以说明,要想象社会的变化是相当困难的。

那么,更近一点的未来又怎么样呢?比如说20年后。20年前,日本刚刚改年号为平成 ,现在和那个时候相比,印象中社会应该没有发生非常极端的变化。计算机的性能等方面确实有了长足的进步,不过发展趋势还是连续的,并非无法预测。对于20年后的未来,我想应该可以根据现在的发展趋势来做出判断。

个人认为,这么短的时间内,编程语言本身应该不会发生多大的变化。实际上,现在使用的很多语言,在20年前就已经存在的。因此我预计,20年后的语言,应该是在分布处理(多台计算机协作处理)和并行处理(多个CPU协作处理)功能上进行强化,使得开发者不需要特别花心思就能够使用这些功能。

之所以要关注分布处理和并行处理,是因为今后个人也可以通过云计算的形式使用到比现在更多的计算机,而随着每台计算机的CPU多核心化,就相当于安装了更多的CPU,这些情形都是很容易想象的。

不过,我认为现在的线程、RPC(Remote Procedure Call,远程过程调用)等显式地使用分布处理和并行处理的形式,早晚会遇到瓶颈。当核心数量超过数千个的时候,显式指定就变得毫无意义了,调试起来也会变得非常痛苦。我期待在20年后,能够出现突破这种局限的技术,即无需显式操作就可以实现分布处理和并行处理。