Archive for the ‘八卦’ tag
八卦 Lisp 简史
前两天为了准备关于lambda递归的简报又把我的 SICP 翻出来看了几页,看到 Lisp 的狗血发展史时,忍不住想邪恶的美帝可真能折腾呀。
首先是上世纪50年代的时候,为了能对递归方程做推理 John McCarthy 麦伯伯发明了一种新的记法形式,并发表了一篇论文“符号表达式的递归函数及机械计算”。然后麦伯伯又和他的麻大同事、学生们一起实现了一个语言解释器,这个解释器可以实现用 Lisp 描述的计算过程,这下 Lisp 就从一种纯数学记述形式演变为一种基于lambda演算的函数式编程语言了。对鸟,之所以 Lisp 放弃了传统的运算子中缀表示法而采用前缀表示法,这里可又体现了麦伯伯的英明神武,目的其实很简单,就是要让机器能很快决定下一步应该采取什么操作,这在当时的硬件环境下可真正成为了 Lisp 在竞争中胜出的原因之一哦。
花开两朵各表一支,话说几年之后,一位天才横空出世,这就当时还不到15岁的 L. Peter Deutsch 哥哥(也有说法是皮哥哥当年正读高中呢),反正皮哥哥年纪轻轻不显山不露水的就悄悄实现了 PDP-1 Lisp1.5 的近似版本,虽说这是个 Lisp1.5 的近似版本,可这个近似版本后来被称作 Basic PDP-1 Lisp。瞅瞅人家15岁都干了些啥,我15岁的时候还在玩泥巴呢,用 tinyfool 的话说就是“咱们都在浪费粮食”。对鸟,皮哥哥后来可有句话是广为流传被多少程序员奉若圭臬,那就是“迭代为人,递归成神”(To iterate is human, to recurse divine),瞧瞧这气度,这格局,真无愧为一等大牛。
扯远了,还是回到 Lisp 的八卦史上来,刚刚说到的 PDP-1 Lisp1.5 和 Basic PDP-1 Lisp 对 PDP-6 Lisp 的发展产生了主要影响,而 PDP-6 Lisp 又是由 DEC 和麻大在 PDP-6 上联合开发完成的。到此为止 Lisp 就形成了两支主流,PDP-6 Lisp 发展成为 MacLisp,而 Basic PDP-1 Lisp 则在神人圣地 XPARC(Xerox Palo Alto Research Center)最终演变为 InterLisp。MacLisp 和 InterLisp 就是60年代中后期直至80年代早期两个最重要的 Lisp 方言,如果考虑到 Lisp 社群一贯地抵制“官方”定义语言的传统,这两种方言基本上可以代表 Lisp 本身了。虽说 MacLisp 和 InterLisp 诞生于同一时期,但由于编程哲学上的分歧两者最终没有融合,MacLisp 更在80年代开始逐渐衰退,而 InterLisp 则继续运行在 PDP-10, VAX 和 Dmachines 等不同种类的机器上,并且广受 Lisp 用户的青睐。不得不说皮哥哥和神人圣地果然名不虚传啊。
可能会有盆友奇怪了,怎么不见霸权主义的急先锋 IBM 的身影泥?这就得回到上世纪60年代了,话说虽然 IBM 也推出了 Lisp360 和 Lisp370 这两种方言并且最初的 Lisp 也是在 IBM 7090 型机器上实现的,但 IBM 和麻大在 Lisp 的专利上产生了争执,IBM 又寸步不让,这就导致麻大只能选择和 DEC 建立合作了,于是这般可见得 IBM 真是有够霸道的。咱麻大又不是吃素的,离了你 IBM 公司,Lisp 不照样活得挺滋润得。
不过泥 Lisp360/370 当时还是广泛应用于大学的教学工作,并且 370 还有个类似于 InterLisp 的开发环境,于是乎后来 Lisp370 就被大家称为 Lisp/VM,再后来 Common Lisp 出现之后,IBM 也不再维护 Lisp370 了,而是转向支持 CL 在 IBM 370 型机上的实现。
话说刚提到的 MacLisp 又发展出了很多自己的子方言,像加州大学伯克利分校的 Franz Lisp 和 Zeta Lisp 等等,而麻大自己为了教学又推出了 Scheme 方言,SICP 也是使用 Scheme 的,并且 Scheme 后来更成为 IEEE 标准了,不得不再感叹一句,麻大真是牛到让人受不了啊。
总之情况就是百家争鸣百花齐放百味飘香,然后为了能让 Lisp 仙福永享寿与天齐,InterLisp 背后的组织决定统一中原,哦,错了,是统一美原。于是乎 Common Lisp 就华丽丽的诞生了。
再说 Common Lisp 这个名字也是颇费了一翻周折的,因为这个名字既不能偏袒任何一种 Lisp 方言,又要能表达对和谐 Lisp 的渴望。然后 CL 诞生的经过也挺神的,就是美原各地一大堆的方言设计者跟各高校的人工智能实验室,还有一些 Lisp 机器公司一起频繁的通过电子邮件交流而最终诞生的(哦,美帝我诅咒你)。可惜的是 CL 1984年诞生,结果要等到10年之后才最终成为 ANSI 标准。而这10年间 Lisp 方言也并没有停下发展的脚步,而欧洲也在搞自己的 Lisp ISO 标准 EuLisp,反正就是你方唱罢我登场的局面。
呼,终于写完了,第一次写技术八卦呀,比想象中的累多了,g9 我赞美你…