返回介绍

朝着数学的方法发展

发布于 2023-05-23 15:33:22 字数 2161 浏览 0 评论 0 收藏 0

1958年,约翰·麦卡锡第一个提出了Lisp语言。我认为,当前最流行的编程语言不过只是实现了他在1958年的想法而已。

这怎么可能呢?计算机技术的发展不是日新月异吗?1958年的计算机的运算能力还不如今天的电子表,而体积却大得像冰箱^。那时的技术怎么可能超过今天的水平呢?

^「IBM 704型计算机的CPU就像冰箱一样大,并且重得多(1429千克)。4K大小的RAM则装在另外一个箱子里,重达1800千克。相比之下,Sub-zero 690是最大的家用冰箱型号之一,重量还不到300千克。 」

图13-1 IBM 704,美国劳伦斯利弗莫尔国家实验室,1956年

让我告诉你原因。这是因为设计者本来没打算把Lisp设计成编程语言,至少不是我们现在意义上的编程语言。我们今天所说的编程语言指的是用来告诉计算机怎么做的一种工具。麦卡锡最后确实有意开发这种意义上的编程语言,但是实际上他做出来的Lisp却是完全不同的一种东西,语言的基础是他的一种理论演算,他想用更简洁的方式定义图灵机。正如他后来所说:

Lisp比图灵机表达起来更简洁。证明这一点的一种方法就是写一个Lisp通用函数,证明它比图灵机的一般性描述更短、更易僅。这个Lisp函数就是eval……它用来计算Lisp表达式的值……。编写eval函数需要发明一种表示法,能够把Lisp函数表示成Lisp数据。设计这种书写法完全是为了满足论文写作的需要。(我)根本没有想过用它来编写Lisp程序并在计算机上运行。

图13-2 书呆子之王约翰·麦卡锡

1958年年底,麦卡锡的一个学生史蒂夫·拉塞尔^看到了 eval 函数的定义,意识到如果把它翻译成机器语言,就可以把Lisp解释器做出来。这在当时是非常令人吃惊的事。麦卡锡后来回忆:

拉塞尔对我说:“我想把eval编成程序……”我告诉他,别把理论和实践混淆,eval只是用来读的,不是用来做计算的。但是他执意要做,并且还真的做出来了。就是说,他把我论文中的eval编译成了[IBM] 704计算机的机器码,修正了bug,然后对外宣布做出了Lisp语言的一种解释器,这倒没有说错,确实如此。所以,从那个时候开始,Lisp语言就基本上是它现在的样子了……

^「Steve Russell,也是历史上第一个电脑游戏的作者,1962年他写了《太空大战》(Spacewar)。」

这样一下子,就在几个星期之内,麦卡锡发现他的理论演算变成了一种实际的编程语言,而且出乎意料地强大。

由此也就得出了20世纪50年代的编程语言到现在还没有过时的原因。简单说,因为这种语言本质上不是一种技术,而是数学。数学是不会过时的。你不应该把Lisp语言与50年代的硬件联系在一起,而是应该把它与快速排序(Quicksort)算法进行类比。这种算法是1960年提出的,至今仍然是最快的通用排序方法。

Fortran语言也是20世纪50年代出现的,并且一直使用至今。它代表了语言设计的一种完全不同的方向。Lisp语言是无意中从纯理论发展为编程语言的,而Fortran从一开始就是作为编程语言设计出来的。但是,今天我们把Lisp看成高级语言,而把Fortran看成一种相当低层次的语言。

1956年Fortran刚诞生的时候,叫做Fortran I,与今天的Fortran语言差别极大。Fortran I实际上是汇编语言加上数学,在某些方面还不如今天的汇编语言强大。比如,它没有子例程,只有分支跳转结构(branch)。今天的Fortran语言可以说更接近Lisp而不是Fortran I。

Lisp和Fortran代表了编程语言发展的两大方向。前者的基础是数学,后者的基础是硬件架构。从那时起,这两大方向一直在互相靠拢。Lisp语言刚设计出来的时候就很强大,接下来的二十年它提高了运行速度。而那些所谓的主流语言把更快的运行速度作为设计的出发点,然后再用四十多年的时间一步步变得更强大。直到今天,最高级的主流语言也只是刚刚接近Lisp的水平。虽然已经很接近了,但还是没有Lisp那样强大。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文