关于Lisp的真相
本文揭露 Lisp 的真相,并列出一些可选的替代品。
(转载自:http://blog.sina.com.cn/s/blog_54a7c4d201013irb.html )
学习 lisp 将改变你的人生。
你的脑袋会变得超出你想象得大。
你会把你所有的程序都用随便的几行重写。
社会将抛弃你,你也将抛弃社会。
你将会开始对身边的任何人和任何事不满。
Lisp 是这样的简单,以至于你可以只需要用几分钟来学习它。现在我就刚学会它,就在我等公车的时候。
Lisp 是这样的简单,以至于你可以用任何语言实现它,只需要简单的几页代码。然而这事基本不会发生,因为一旦你学会了 lisp 你就不会再想要用除 lisp 之外的任何语言写任何东西。所以你也就会对用 lisp 之外的其他语言来实现 lisp 感到厌烦。
Lisp 可以完全地用 lisp 来实现。我刚刚完整地用 lisp 实现了 lisp,就在我跳上一辆公车并买票的瞬间。
当你变成一个 lisper ,你会嘲笑所有的笑话,因为再没有什么人的想法会是有趣的。你会知道一些无法用普通命令式语言表达的东西。
当人们做些像跟你说“嗨,你好吗?”这样的事时,你会觉得他们都是白痴。因为一个 lisper 根本不需要使用这么具体的构造。 Lisp 抽象出交互当中的那些模式使它们完全不相关。跟一个 lisper 伙计打招呼的正确方式是只需要轻轻地点一下下巴,以及大约十分之一程度的眨左眼,然后指向你的锡纸帽。他们就会明白你的意思。如果他们不明白,那么他们就不是真正的 lisp 程序员,那么也就没什么关系。
Lisp 很久以前就被发明出来了,在 java 之前,在 C 之前,在 fortran 之前,在计算机之前,在人类之前,在地球被建立之前。宇宙本身就是一个 lisp 程序,这事一点也不重要,以至于没有一个真正的 lisper 愿意实现它。
Lisp 是如此的优雅以至于你只要接触它一丢丢点,就会让你好像取得了一个演出季的皇家芭蕾舞团舞者资格一样。你会穿着你的 tutu (芭蕾舞超短裙)跑出去到大庭广众面前,然后仅用你的脚尖在空气中画出一朵朵的圆括弧。
只有 lisper 能真正定义何为有趣。也许 ML 语言也能。今天所有的语言都基于 fortran 和 lisp。不好的部分来自 fortran ,好的来自 lisp。
如果你用 lisp 用得足够好,你会立刻对 lisp 感到失意。 Lisp 不是一个合格的 lisp 。这时我的公车开过了两个街区,我写了一些简单的 lisp 宏。它们非常强大,它们使得 lisp 完全过时了,它们作为一门新的语言替代了 lisp 。幸运的是,这门新的语言还是叫做 lisp 。而且我可以证明(从数学上证明),我刚创造的这个新的 lisp 从各种你能想到的方面都远比 lisp 好得多,而同时它又在各种你能想到的方面都等同于 lisp 。我对此很兴奋。 同时又感到很乏味。
Reddit 证明了 lisp 确实很牛逼。 Paul Graham 最初是用 lisp 写的 reddit ,当时他正在餐桌旁等他的咖啡。 Reddit 是如此的牛逼,以至于它必须被用 python 重写,这样他才能被普通计算机理解。因为它是用 lisp 写成的,所以重写它并没有花费什么努力,重写工作在两个处理器周期之内就完成了。 Paul Graham 他本人就是完全由他本人的早期版本用 lisp 写成的。这个他本人的早期版本,也是用 lisp 写的,是由更更早版本的 lisp 操刀的。这就是 lisp, paul graham, lisp, paul graham, 无穷无尽。
因为我们达到了摩耳定律的极限,未来的计算机具有非常多核的处理器并且所有的程序都必须用 haskell 和 lisp 的组合来写。这组合太过牛逼,以至于这些未来的计算机要实现我们的任何想法,都必须创建时间旅行算法来跟更遥远的未来的其他计算机借用处理能力。这听上去很难,不过在 lisp 里却没什么。在 haskell 里这是一个内建特性,对于任何一个懂得 lisp 或者 haskell 的人来说实现它都只需要用很无脑的方式。
在那之后,未来的计算机将被称作 Lisputer 。它的速度将使用 Lispunit 来衡量。Lispunit 表示有多少关于 lisp 不足的争论可以同时被无穷数量的 lisp 专家提出和驳回并最终毫无结论。今天的计算机的运行低于一个 lispunit 。 Lisputer 运行会达到很多 Lispunit 。Lisp 将会是使用普通数字能表示的宇宙基础最大常量。可以充满自信地说:它的结尾会是无穷数量的右括号。
到此为止,我今天在公车上读了一篇关于 lisp 的文章。置顶文章。所有(其他)关于 lisp 的文章都真的太满了 —— 我的脑子开始冒出我的耳朵。这一篇: lisp is sin ,是 Sriram Krishnan 写的。文中他谈到了用 C# 来工作,用 Lisp 做兴趣爱好。他还谈到了一些从 C# 转向 lisp 的方法。
这里是一些那篇文章的评论里建议的有 lisp 瘾的人使用的替代品:
- newLisp
- ML
- Perl6
- nermerle
- smalltalk
- biobike
- chez scheme
- Common Larceny
- XSLT
- OCaml
- LSharp
- Lua
- C Omega
- F#
- C# with Linq
还有一个人建议移植 python 的库到 lisp 。
奇怪为啥没提到 Ruby (参考 Why Ruby is an acceptable lisp ,还有 steve yegge 的回应:'lisp is not an acceptable lisp' )
(后记:第一个发评论说“ Paul Graham 没有写 reddit ” 的人应该奖一个棒棒糖。)