8门编程语言的设计思考

今天参加了SHLUG的月度技术分享会,见到了三个同学的同学(呃~精确描述的话可能得写成这样:其中一个是同学A的同学,两个是同学B的同学)。

我就不同编程编程语言的设计思考为主题做了一个分享。之前在学校里做过类似的分享,这次把它搬到SHLUG上来了,对之前的幻灯片又修修补补,增添了一些内容(把之前Prolog、OCaml纸上谈兵的部分加了些代码,丰富了内容……当前,也可以把整张幻灯片看作纸上谈兵)。

之前“80分钟8语言”这个标题感觉有些误导人,毕竟读者的第一反应很可能是认为这是在介绍语法,第二反应是80分钟甚至无法把一门语言的语法给讲清楚,如何能把八门语言交代清楚。而且之前在学校分享时和另一位同学肖骐一共讲了两个半小时的样子,远远超出了80分钟。题目的用语想了一会儿,决定改为设计思考(design thinking)。

关于8门语言的选取,Perl是用来吐槽的,就不足为奇……imperative、class-based object-oriented的语言已经泛滥了,C系(语法上的,C、C++、Java、C#这些)没什么亮点,对主流编程思想的“毒害”也深,可以称道的地方不多,没什么可谈的(而且都不会……)Objective-C另一半继承自Smalltalk,Smalltalk这个史上第二门object-oriented语言对后世影响还是非常深的,虽然只看了相关的一本书,但还是冒昧地决定谈及它。

Lisp系中自然得选一个,从应用多寡来看选项其实只有三种:Common Lisp、Scheme、Clojure,第三个一无所知,第一个看了半本书觉得设计上历史包袱较重,所以就选设计更为清晰的Scheme了,而且minimalism也投我所好。Lua风格亦是minimalism,而且是prototype-based,所以也列进去了。class-based中Ruby设计实在是优秀,所以也选了(可惜那些基于jvm的如Clujure、Scala、Groovy都没接触过)。

functional的首选自然是Haskell,但非pure的也得选一个,于是自然想到了经典的ML系列,选取了接受程度最大也是最实用的OCaml。这样一来还缺一个dynamic typing的functional,所以就选了Erlang。另类范式logic的只有Prolog可选了。遗憾是没接触过Scala和Forth,后者concatenative必有可圈点之处,顺便也能吐槽shell设计得如何之烂。

没有学过APL(或者后裔J)从而没有把它列进去着实是个遗憾。Joel Moses有云:”APL is like a beautiful diamond - flawless, beautifully symmetrical. But you can’t add anything to it. If you try to glue on another diamond, you don’t get a bigger diamond. Lisp is like a ball of mud. Add more and it’s still a ball of mud - it still looks like Lisp.”

参加活动的朋友二十有余,初时我还有些紧张,而后却是越讲越起兴,加者以为时间不能超过1小时,而内容挺多的,语速较快。最后大概讲了一个半小时。

幻灯片还是挺翔实的,2000多字……

幻灯片下载