IT 届编程语言层出不穷,”Seven languages in seven weeks”一书和续作 “Seven more languages in seven weeks” 挑了一些很有特色的语言:

  • Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell

  • Lua, Factor, Elm, Elixir, Julia, Minikanren, Idris

挑选的语言是不错,但挑选的思路挺跳跃的,其实从编程语言的发展历史来分类,再挑选语言就可以看的更清楚点。Éric LévénezComputer Languages History 几乎囊括了所有有影响力的编程语言,从历史传承来看,典型是如下几类:

  1. Fortran/Algol 一脉的传统命令式编程语言,以及衍生的面向对象式编程语言,虽然这两派不断被人诟病,却是枝繁叶茂,Basic, Pascal, C 三位大佬,以及由 Pascal 衍生的 Delphi, Modula, Oberon, Ada,由 C 衍生的 C++, D, Java, JavaScript, Go, Rust, Zig, Nim 和一大票脚本语言如 Perl, Python, PHP, Ruby, Tcl,还有源自 Simula 的极具特色的 Smalltalk,值得单独列一个家谱。如果要在这一派里选一个学习,毫无疑问是 C。

  2. 与 Fortran 相对的泰山北斗 Lisp 一脉代表了第一代函数式编程语言,影响深远,其后代有 Common Lisp, Scheme, Clojure 三杰,以及大量骨子里是 Lisp 的语言:Logo, R, Mathematica。这一派里选一个的话,那就 Clojure 吧。

  3. 与 Fortran 颇有渊源的 APL 一脉代表了向量编程语言祖宗,出道即巅峰,无人能超越,同时也是数学记号直接当做编程语言语法的最早尝试,这一派有 Dyalog APL, GNU APL, KAP 三个优秀的 APL 实现,以及派生语言兼实现 J, K, Q, BQN,这一派里选一个的话,那就选容易输入、资料丰富的 J-lang 了。

  4. ML 一脉代表了现代函数式语言家族,佼佼者众多,SML, OCaml, F#, Haskell, Agda, Idris 2,Scala 3,这一派不太好选,都很优秀,如果论实用,Scala 3 第一,OCaml 第二,如果论理论,Idris 2 第一,Agda 第二。

  5. Smalltalk 一脉,这个值得单独拿出来讲,其 IDE 的构建登峰造极,著名的 Eclipse IDE 就跟 Smalltalk很有渊源,说起来如今大红大紫的 VS Code也可算这一脉。Smalltalk 家族主要有三个开源实现,Squeak Smalltalk, Cuis Smalltalk, Pharo,首推 Pharo 以及基于 Pharo 的 Glamorous Toolkit。

  6. Erlang 一脉,虽然 Erlang 语法继承自 Prolog,但跟 Prolog 其实已经没关系了。这一脉除了仍在持续发展的 Erlang 本身,还有一些基于 Erlang 虚拟机的语言,比如 Elixir,不过个人还是更喜欢原汁原味简单朴素的 Erlang 语言。

  7. 逻辑编程家族,这一脉最早的 Prolog 已经很落伍了,如今是定理证明器的天下,写出正确程序的希望就靠这一脉了,严格来说,Agda 和 Idris 也算这脉,但名气最大的是 Coq, HOL-light, HOL4, Isabelle, Lean 4这些,而 MiniKanran只是这派的小角色。这一派只选一个的话,就 Coq 吧。

综上,这七门语言的量级和覆盖面都足够:C, Clojure, J, Scala 3 or Idris 2, Pharo, Erlang, Coq.

还有两派古老传承没提,一个是 Cobol,众所周知无人问津了,另一派是 Forth, Forth 作为 concatenative language 一派开山鼻祖,当年也是阔过的,Forth 本身作为高级汇编的存在就是一段佳话,印象中只有 Basic 和 Forth 曾经广泛应用于裸机的”操作系统“。Jones Forth这个五百行汇编加上一千五百行 Forth bootstrap代码的极简 Forth 实现非常精妙,Forth 这派的新秀 Factor 语言被收入 Seven more languages in seven weeks 书中了,鉴于上面已经列了七个,就只好牺牲 Forth 这派了。

再回过头评论下 Seven languages 收录的十四门语言:

  • Ruby 昙花一现不足道哉, Io 不如 Smalltalk 震撼, Prolog 虽然开山逻辑派但是太弱了, Scala 可以, Erlang 可以, Clojure 可以, Haskell 还行

  • Lua 一块小饼干谈不上绝味, Factor可以, Elm算是ML派在web开发的一点应用,不算显著, Elixir是 Erlang 上一层 Ruby皮,差点意思, Julia 杂糅语法,也算是一点应用,谈不上语法派系杰出者, Minikanren小角色, Idris可以

你心目中的 top seven languages 是啥?