@
gowl 我用过的其他静态类型的函数式语言只有 clojure ,所以我这里只能告诉你两点:
1 、我为啥不用 clojure 、haskell 、racket 、ocaml 、rust 等等。
2 、我为啥用 scheme
----
我认为首先要确认一下,我喜欢的 scheme 是执行了 r6rs 标准的 Chez Scheme ,它具有如下特点:
1 、核心非常小,透过语法我可以直接看见 c 看见汇编,我也可以看见逻辑表达式。
2 、速度非常快(堪比手写,未经优化的 C ,如果你认真研究过 r6rs 的标准并且认真写代码的话),我写 scheme-langserver 的一个目标是用来辅助开发一些机器学习的东西。
3 、由于发展历史非常长,有大量的各个领域的库可以用(当然不太好找,很多还要自己调试,但是现在有 akku 和 github 了)
相比之下,
1 、十年前的 clojure 太慢(现在好像仍然这样),而且它们的目标似乎是用灵活性解决商业问题——过度灵活的商业问题恰恰意味着盈利不稳定,而在一定范围内稳定的商业问题可以通过开发各种框架解决。所以我不用 clojure 。
2 、haskell 的主要特点似乎是:它是一个 prover ,用各种数学证明保证你是正确的。我对这个没有太多的感觉,我认为保证正确——这个事情应该让程序语言以外的静态检查、开发工具去解决。实际上我看到有说法“haskell 自己就是一种 lisp”。
我希望在写完代码以后根据需求选择检查工具看看可能有什么漏洞,不想在写代码之前先读书。
3 、rust 和 ocaml 我了解的都非常少,但是对于一些所谓“由语言带来的特性”,我的观点同上。
总结:lisp 其实有一个不可替代的地方,就是它是存活到现在的第二古老的计算机语言(第一似乎是 fortran )。这意味着它和计算机语言学的前半生是纠结在一起的,你想要什么样的东西都几乎可以不受到语法的限制(因为约等于没有语法,笑)快速实现。而剥去语法的外衣,我可以直接看到 C (仅对于 chez scheme ),可以直接看到逻辑表达式。