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

我能想到的因素:

  • 性能官网首页的benchmark显示它的web框架比node和ruby稍快。往前数十年硬件还很吃紧所以大家都用C/C++,最近才开始往C风格的语法里塞lisp?
  • 生态:python除了语法大家比较喜欢、研究方面库比较多之外,好像没什么优点了?但是大家都用它搞AI等等。它库丰富是没错,但是90年代刚出来的时候,为什么大家选择了给它写库,而不是common lisp或者别的呢?
  • 抽象能力/工程角度:比较高的上手难度和过于强大的宏能力可能是在工程方面比较不利的因素,可是最后别的语言发展来发展去,加lambda等等,都是向lisp靠拢,为什么宁可“实现一个漏洞百出的lisp解释器”,也不一步到位直接用lisp呢?真的是太难了没法招人,像Paul Graham说的“对手公司招Java程序员,不用管他,招Python程序员,这个公司还可以,招lisp程序员,你就要小心了”?

另外官网上推荐的emacs的cl配置叫slime,我仔细看了一下,跟那个史莱姆的拼写真的一模一样 :joy:

5 个赞

PG 现在自己都不吹 Lisp 了,他的话只能信一半。什么“实现一个漏洞百出的 Lisp ”都是瞎吹的,放 2005 年左右可能还差不多,现在流行的 dependent type, parttern match,甚至 functional programming,liner logic 都不是 Common Lisp 的特性了,反而是 Common Lisp 社区开始向 Haskell,Scheme,Erlang,Ocmal 学习。

性能完全不是问题,不管是直接生成汇编的 SBCL,生成 C 代码用 GCC 编译的 GCL,还是用 LLVM 的 Clasp,都没道理比 C/C++ 差多少。

最大的原因是实用的特性主流语言都有了,就连 Perl 都支持 Metaobject protocol,Ruby C++ 都支持元编程。LLVM 技术让静态类型的编译语言都能有 Repl (Swift),GC 也是普及得不能再普及了,反而在现代需求高的并行并发分布式,CL 因为标准很早不再更新,也没法添加很好的支持。

我感觉 Ada 这样能做到的和 C++ 没实质区别,特性又更好的语言都没人学,就别指望那些就为了混口饭吃的人会跑去学奇怪的括号语言了。不像 C++ 和 Java 以及 Python 都成了高校必修课,补习班都有一堆,想学 Lisp 只能靠自学,除了兴趣和信仰,像在国内还要英语日语过关,能把看 ACM paper 当成日常消遣。有这学术水平的现在八成都去写 Haskell 了,眼界不够的研究 Lisp 也没法有啥成果,只能吹吹 SICP 之类的书得其门而不入。

但是,就算在 2018 年横向比较,我认为 Common Lisp 还是最有潜力的语言。Haskell 为代表的纯函数式语言思想虽然先进,但还是有瑕疵,而且还是有我个人很不喜欢的一些特性,比如缩进规则。Scheme F# 之类非 pure 的还不如 Haskell。编译器理论让静态类型和动态类型的区别也缩小了,甚至已经有不少同时具备两种类型系统特点的语言。Lisp 在符号计算为代表的人工智能领域的积累是开发新一代编程语言的本钱。

7 个赞

我倒觉得现在的人基本都是“能生存就得很努力了”……所以就没什么心思去啃别的,只会找些所谓“性价比高”的语言来学。

然后学的人越来越多,这些“性价比高”的语言的性价比就会越来越高,然后如此循环下去,小众语言就越来越小众,再也回不来了。

5 个赞

也许这就是现实。。。。 其实只用精通一门自己喜欢的语言,再精通一门吃饭的语言,就OK了。。。。 剩下的现学现用

1 个赞

ALGOL 68, Ada, Clean, Common Lisp, Forth, J, SNOBOL, TXL

不知道這些够不够。

要再接地气点,Haskell, FORTRAN, Smalltalk, HLA 也有。

1 个赞

你可以端杯茶找个合适的场合慢慢读

1 个赞

还是读 编译原理 更靠谱吧

语言重要吗? 生态呢?

现在流行的纯函数式,线性逻辑,类型推导,完全超出了编译原理这书涵盖的范围。再看编译原理都过时了。

要说生态,抄几个库的事。Python 靠链接 C 能搞 Machine learning,然而到了 theorem prover,高性能计算这种层次,玩不出什么花头。

2 个赞

数据结构 与 算法 总不过时吧

传统的数据结构不能直接在纯函数式中用,现在都研究 immutable

如果不是单纯研究,为了生活,学语言看爹太重要了。有点世俗了

Lisp 这个概念如今是 ill-defined 的,所以只说 Common Lisp。

因为 Common Lisp 比较烂啊。你深入学一学就发现,这语言充满了历史遗迹(本来就是早期多种 Lisp 的综合),语言设计颇为诡异。(昨天还有人说 CLIM 就是 API 设计的反面教材。)

初学可能感觉挺轻松容易的,再学下去就觉得一点也不值了。

  • CL 有什么其他语言做不到的?
  • 有什么其他语言没有的 feature?
  • 写起来代码会比其他语言短吗?
  • 程序运行得比其他语言快吗?
  • 第三方生态足够好吗?
  • ANSI Common Lisp 够用吗?

以上这些问题的答案全部是“否”。而且 CL 是从上个世纪(字面意义上的)如日中天的情况发展到如今的地步,真的就没有 CL 自己设计上的问题吗?自己掂量掂量吧……当然,自己玩得开心最重要。我也是学过 CL 之后变成 Lisp 黑的。 233

PS:早期的 Lisp 本身只是 lambda calculus 的一种计算机表示方法,我觉得没必要过于纠结形式上是如何表征的。单从学习的角度来说,Haskell/ML 之流岂不是更有学习的价值?想用一门更 modern 的语言干活的话,不妨看看 Rust、Scala 之类的语言。

3 个赞

保守估计,主流语言至少要学五种才能涵盖所有 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 个赞

找工作难,没新人愿意学,导致企业更难找到人,导致工作更少,恶性循环。

说白了还是不够“时尚”,要包装,要搞出名气,最好有个杀手锏的应用,名气可以飞速提升。 所以小白能知晓得的应用哪些是Lisp写成的呢? 思来想去最出名的也就是 Emacs 了。

你大概不怎么写英文不知道,油管的广告中出镜率很高的 Grammarly 就是用 Common Lisp 写的。

https://tech.grammarly.com/blog/posts/Running-Lisp-in-Production.html

3 个赞

知道吧,这个fact应该在坛里被提了好几次了。然而能说得出口的也就一个grammarly :sweat:


感觉这个帖子还是没多大意义,坛里其他人的pl知识比你少多了……

1 个赞

换个角度想想,比那一大堆听都没听过的语言热门多了....

2 个赞

你用哪种Common Lisp实现?

SBCL 吗?

我系统上能安装的只有sbcl 和 clisp 我该如何选择呢?

还望赐教!

Linux 的话 SBCL 最流行,一般配合 Emacs 的 Sly ( SLIME 维护者自己做的 fork,有更多功能)使用。性能最好但是内存占用比较夸张。

CLISP 现在很少用。

我用的是 Clozure CL,编译速度很快,而且内存占用很小。

最好不要用系统自己的包管理器,推荐用 roswell,一站到位。因为对于纯初学者来讲安装 Quicklisp 包管理器是个不小的挑战。

6 个赞

编译的时候出了点问题 难道只能用make-3.8才能编译的过吗?

出问题的文件是 memorize-raw.lisp 的第192行

顺便说一下 sly 挺好用的

有company 还有sly-edit(相当于 C-h f)