2008年11月23日星期日

Common Lisp -- 梦想与现实的交汇

Beating the Averages
作者和Morris(是的,就是搞出第一个蠕虫病毒的那个家伙)在1995用Lisp搞了个C2C平台,在打败了所有竞争对手后,被Yahoo收购,成为现 在Yahoo Store的雏形。当得知Yahoo收购消息后,作者做的第一件事就是招了几十个程序员,因为谁也无法相信这样强大的C2C平台只是由四个Lisp黑客构建的。文章中,作者提出编程语言的表达能力是有区别的,而程序员每天写的代码量却和使用的语言基本无关,所以如果你使用的语言表达能力是别人的30倍,你的开发时间将是别人的30分之一!这就是很多竞争对手都认为作者拥有秘密武器--每次他们发布了新的功能,作者都可以在第一时间做到同样的事,作者的秘密武器就是Lisp。文章还揭示了为啥Lisp没有成为主流语言的原因--编程语言不仅是工具,还是程序员思考问题的方式,改变思考方式不是一件容易的事!然 而,作者的成功正是利用了这一点。
如果你喜欢这篇文章,可以考虑购买Hacker and Painter一书,是作者散文的合集,其中大部分可以在上面的网站上在线阅读。

The Nature of Lisp
这篇文章中,作者以广为人知的XML为引子,首先问为啥XML能作为一种通用的数据描述语言,因为XML具有树状结构,而几乎所有的信息都可以用某种树状结构来表现。接着作者启发道,程序能不能用XML表示呢?其实是可以的,因为几乎所有的编译器把原文件变成一种叫抽象语法树(AST)的东西,所以XML可以表现几乎所有的语言的语法!接着作者用Ant的例子引出Executable XML的概念。而后开始转到Lisp上,说其实Lisp和XML是同一个东西,所不同的是Lisp早发明30年,而且比较简洁。然而,Executable XML的实现是需要借助其他语言的,用SAX或者DOM接口操纵XML。而Lisp可以用macro直接操纵自己的语法树,这才是Lisp的威力所在!
Lisp和XML一样可以表达几乎任何语言的语法,用macro可以很方便地模拟语言的语义,Lisp可以变成你想要的任何语言!Lisp, one language to rule them all! Lisp编程就是构建一层层的DSEL,直到抽象层次升高到可以直接描述问题领域。Lisp is not a language, but a language to build languages, it's meta-language!

为啥MIT的人工智能会那么强?因为他们从60年代开始,在所有其他人都还在使用Fortran和汇编的时候,已经开始用Lisp编程了!GEB中提到,大脑的底层是神经元,在这个层面是完全无法理解智能的(至于存不存在的话是哲学问题),慢慢地升高层次,当突破某个临界点后,突然间,智能就出现了!所以,几乎所有的AI程序都是用Lisp写的,就是因为如果你无法构建高级的抽象,永远在神经元层次编程的话,可能就永远写不出AI程序了。对,我说的是“可能”,我所知道的有两种例外:
1。你的大脑就是一个Lisp编译器,你用Lisp思考,大脑帮你编译成别的语言,可能在Lisp发明之前的AI程序就是这么写的。这可能也就是冯诺依曼为啥只用汇编的原因,因为他的脑袋瓜实在是太厉害了,因为他不是人类:)
2。你在无意识中已经开发了一个Lisp解释器

没有评论: