内容简介:回到未来:永恒的lisp
2016-12-20
lisp我学不会。我研究了很久的lisp,仍然没能领会到本质。它并不是一门语言,而是一种精神,一门哲学,信仰或者宗教类似的东西。
一开始我以为是一堆的括号,是cons,car和cdr,括号只是表象。抑或是map,是闭包和高阶函数?lisp是一门函数式语言?那函数式又是什么?后来发现了lambda calculate。自然是打开了一扇窗。简单的背后,隐藏了太多东西。慢慢的迷失在lisp是什么。看一看lisp里面到底有什么。
副作用和不可变状态,这是函数式语言比较强调的,其它语言里也有,lisp也没有过于强调这个。
垃圾回收,被很多语言学去了,现在出现的高级语言,哪个不是自带垃圾回收?lisp是第一门支持垃圾回收的语言,可惜它出现的太早了,太超前了。直到 java 一类的垃圾回收的语言普及,花掉了几十年时间才让社区能普遍接受,是的,lisp太超前了。
call/cc,除了scheme,直接暴露控制流的语言还真不多。协程不就是简简单单包装一下的事情。然而协程只不过是continuation的应用场景之一。不过我觉得这并不是一项有价值的feature,也不是它的先进之处。当年lisp刚出来时可没有这项feature。
卫生宏。对于宏评价,人们褒贬不一。它带来了灵活性,也导致了分裂,不得不承认宏确实是lisp里非常特色的一个地方,虽然我不喜欢。
想必大家听过这个故事:
在 ILC 2002 大会上前Lisp大神,当今的 Python 倡导者Peter Norvig,由于某些原因,做一个类似于马丁路德在梵蒂冈宣扬新教的主题演讲,因为他在演讲中大胆地声称Python就是一种Lisp。 讲完后进入提问环节,出乎我意料的是,Peter点了我过道另一侧,靠上面几排座位的一个老头,他衣着皱褶,在演讲刚开始的时候踱步进来,然后就靠在了那个座位上面。 这老头满头凌乱的白发,邋遢的白胡须,像是从旅行团中落下的游客,已经完全迷路了,闲逛到这里来歇歇脚,随便看看我们都在这里干什么。我的第一个念头是,他会因为我们的奇怪的话题感到相当失望;接着,我意识到这位老头的年纪,想到斯坦福就在附近,而且我想那人也在斯坦福 —— 难道他是…… “嗨,John,有什么问题?” Peter说。 虽然这只是10个字左右的问题,我不会假装自己记住了Lisp之父约翰麦卡锡说的每一个字。他在问Python程序能不能像处理数据一样,优雅地处理Python代码。 “不行。John, Python做不到。” Peter就回答了这一句,然后静静地等待,准备接受教授的质疑,但老人没有再说什么了。此时,无语已胜千言。
我第一次看这个故事还是在许多以前,直到现在,有了更深的体会。
了解过类型理论的人大概都知道这是个很复杂的东西。lisp一般是无类型的,但我见过有一门叫做shen的lisp方言,它实现了类型,而且它的类型系统只用了511行的代码。怎么做到的?用这些代码它会生成大约200多条规则和公理,然后将这些规则变成大约27,000行的Common Lisp代码!天呐,这么神奇?因为lisp的代码即数据呀。写一行lisp相当于其它语言写一百行,何等恐怖的生产力。
在编程语言鄙视链里面,Java鄙视C不是面向对象的,python鄙视的Java还不够灵活,haskell的学院派则鄙视C、Java、python等一切非函数式语言,而唯有lisp是站在编程语言进化论的终点,傲视群雄。如果将编程语言比作爬山,C在山脚,Java爬得稍快一点,但还远远看不到haskell的影子。只有lisp,它站在山顶,透过重叠的云层,看到蜗牛一样的haskell都还没爬过半山腰!
但是,为什么它没能流行起来?
如果说编程语言是宗教,那么lisp一定是佛教禅宗。佛教里是没有上帝的,宣称每个人都是可以成佛。但是佛教讲究缘份,需要开悟,对于没有慧根的人,lisp也就无缘了。所以我看到但凡能对lisp有一些心得的,都属于 程序员 中最聪明的那一类人。各个年代也总有一些能参悟lisp的人,从而将这种香火传承下来。
这种传承却不是靠口口相传能够解决。正如优秀的程序员不够多,是函数式语言永远无法解决的问题。能够悟到函数式语言这一层就已经是凤毛麟角了,而lisp又不知道高明到哪去。
凑一堆天才在一起是很困难的,比集齐七颗龙珠还难,而天才一般都有自己的个性,难免凑在一起了不打架。lisp的灵活性更是让状况雪上加霜。为什么有这么多的lisp呢?因为每个深刻理解lisp的人,都有自己的对lisp不同的理解。即便是每个悟道成佛的人,悟的东西其实都不尽然相同,所谓"道可道,非常道"。
lisp没有流行并不可怕,lisp本来是孤独的。我觉得引用这个句子非常合适:
只有当你独自一人深入荒漠,用树枝在黄沙上为自己喜欢的Lisp方言写解释器时,你才成为一名真正的Lisp程序员。
软件开发却不是单打独斗的工作,这个时代已不是靠一个天才就能创造出什么。只是大师的光辉会照耀着我们。当年一手创立了GNU的大胡子,其实他同时也是位lisp高手,lisp machine失败后,Emacs算是硕果仅存的"伪装成操作系统的编辑器"。lisp的编译器很多,我最后一个觉得比较有意思的是shen,当然经历不同感悟会不同。觉得lisp不是函数式语言的人,大概不懂函数式。觉得括号难看的,可能不知道模式匹配,当然,更不可能领悟代码即数据的重要性。真要觉得有类型才算牛逼的,去看下逻辑编程。其实所有的一切,lisp都有,一沙一世界,就看能领悟多少。
既然提到佛,真心信佛的人不多。大概就两类:要么是上了年纪的大妈,要么是清华退学的天才。嗯,就好比最牛逼的语言只能是 PHP 跟lisp一样。
lisp是上世纪的东西了,但是它的出现超前了何止一个世纪,直到今天,我们所有主流的语言还不停地向它"借"一些东西。所以可以看到很多语言里都流趟着lisp的基因,但,它们都不是lisp。
这个恐龙时代的语言真的有这么神奇?是,大概就是回到未来的感觉吧,lisp的精神将永存于世。
(全文胡扯,只有开头第一句正经的。准备放弃lisp了,瞎写点东西留作记念吧)
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Istiod——回到单体的理由
- [译] Istiod:回到单体的理由
- 用关系型 NoSQL 回到未来
- 回到基础:如何用原生 DOM API 生成表格
- 从Rails到Clojure再到Java,最后回到Rails
- 跟随时光机回到过去看看 2005 年的百度/腾讯/淘宝/谷歌
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。