| tags: [ Compiler ] categories: [ Development ]
乱评《七周七语言》
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énez 的 Computer Languages History 几乎囊括了所有有影响力的编程语言,从历史传承来看,典型是如下几类:
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。
与 Fortran 相对的泰山北斗 Lisp 一脉代表了第一代函数式编程语言,影响深远,其后代有 Common Lisp, Scheme, Clojure 三杰,以及大量骨子里是 Lisp 的语言:Logo, R, Mathematica。这一派里选一个的话,那就 Clojure 吧。
与 Fortran 颇有渊源的 APL 一脉代表了向量编程语言祖宗,出道即巅峰,无人能超越,同时也是数学记号直接当做编程语言语法的最早尝试,这一派有 Dyalog APL, GNU APL, KAP 三个优秀的 APL 实现,以及派生语言兼实现 J, K, Q, BQN,这一派里选一个的话,那就选容易输入、资料丰富的 J-lang 了。
ML 一脉代表了现代函数式语言家族,佼佼者众多,SML, OCaml, F#, Haskell, Agda, Idris 2,Scala 3,这一派不太好选,都很优秀,如果论实用,Scala 3 第一,OCaml 第二,如果论理论,Idris 2 第一,Agda 第二。
Smalltalk 一脉,这个值得单独拿出来讲,其 IDE 的构建登峰造极,著名的 Eclipse IDE 就跟 Smalltalk很有渊源,说起来如今大红大紫的 VS Code也可算这一脉。Smalltalk 家族主要有三个开源实现,Squeak Smalltalk, Cuis Smalltalk, Pharo,首推 Pharo 以及基于 Pharo 的 Glamorous Toolkit。
Erlang 一脉,虽然 Erlang 语法继承自 Prolog,但跟 Prolog 其实已经没关系了。这一脉除了仍在持续发展的 Erlang 本身,还有一些基于 Erlang 虚拟机的语言,比如 Elixir,不过个人还是更喜欢原汁原味简单朴素的 Erlang 语言。
逻辑编程家族,这一脉最早的 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 是啥?