为什么lisp,或者说common lisp现在这么冷门呢?

保守估计,主流语言至少要学五种才能涵盖所有 CL 的特性,反过来,没有什么语言的特性 CL 是做不到的。

编译时就是运行时,运行时也能使用编译器。

高度可扩展的 parser 和 printer。

还有个 trivial 但是别的语言的确没有的功能,multiple-return-value

比绝大多数语言短

和最快的语言在同一梯队

从 Racket, Haskell, Python, Java, Ruby 抄个库信手拈來,对于 Java, C, C++ 都可以调用。

One of the common complaints about Lisp that there are no libraries in the ecosystem. As you see, 5 libraries are used just in this example for such things as encoding, compression, getting Unix time, and socket connections.

你觉得只有一个 ANSI C Std Lib 够用吗。

有一个语言标准并不代表语言实现者不会加扩展。

这样讲吧,John McCarthy 的 Recursive Functions of Symbolic Expressions and their Computation by Machine (Part I) 除了用了个 lambda 的字面符号,完全没有讲过 lambda calculus。LISP 的核心是符号处理语言,而不是什么 lambda calculus 的模型。正式把 Lisp 和 lambda calculus 联系起来的是 Scheme,which is, however another language.

Haskell 有很多非常优秀的想法,但是了解更多计算机历史以后,必然会得出“一个没有副作用的语言是残缺的语言”这样的想法,Monad IO 是相当丑陋但不可缺少的一部分,以至于我认为整个设计是没救了的。

Rust 在 Haskell 群体看来,设计是相当孱弱的,也就能骗骗只会写 C++ 的土包子。liner logic 也是 Guy Steel 玩过的东西(NIL project),连微创新都算不上。

Scala 学了函数式的皮毛,语法灵活了,然后实际上犯了和 LISP,C, C++ 犯的一样的大错:Everything is an expression。

你要是怀疑什么给了我这样大的勇气在 2018 年吹 Lisp,我希望你能在学习 ACL2 以后好好考虑一下,说不定可以改变你对 Lisp 和函数式的看法。反正你也要学 ML 这种没有用的东西(Ocaml 是例外)。 说实话 ML 和 Lisp 还是太接近了,没有 Haskell 那样特色鲜明。

9 个赞