十大近乎消亡却影响深远的编程语言,你知道几个?
那些早已被淡忘的编程语言,至今仍深刻影响着所有现代编程语言。
前几天,我读到一篇关于“历史上最重要的20种编程语言”的榜单。
这份榜单堂而皇之地将 Go 语言列入其中,却对 ALGOL、Smalltalk 与 ML 只字未提,还把 Pascal 贬斥为 “基本已死”。
简直荒谬至极。
如果你要做一个关于历史意义的评选,就不能因为某种语言如今在 GitHub 上不再流行就将其排除在外。
这完全违背了“重要”一词的含义。
现在,我们来聊聊那些看似消亡、早已无人编写、学生亦鲜有耳闻,却默默奠定了现在几乎整个技术体系的编程语言。
诚然,其中有些并未彻底消亡,其实这很错综复杂。
但历史本就说不清道不明,语言之间的影响传承更是如此。
一、COBOL(1960)
背景:由 CODASYL 为美国国防部研发。
那时候商用计算行业一片混乱。工程师用 FORTRAN,而商业领域则是 COMTRAN、FLOW-MATIC 各立门户,乱象丛生。解决方案是什么?打造一门通用的商用编程语言。
这门语言就是 COBOL 。
它后来跻身四大奠基编程语言之列:FORTRAN、LISP、ALGOL 与 COBOL。
如今它常被当作笑谈,在当年却是绝对主流。
COBOL 首次真正意义上引入了结构化记录数据的概念。
在 FORTRAN 与早期 ALGOL 中,数据结构基本只有数组,静态、数值型、能力十分有限。
而 COBOL 可以处理层级化记录,读取结构化文件并自动拆解为具名字段。
这种带命名成员的结构化数据思想,正是现代结构体、记录类型的核心基础。
虽不花哨,却至关重要。
OBOL 从未与学术界的编程语言研究形成交融,几乎被学界完全忽视。这也导致后续第二、第三代编程语言很少继承其设计思想。
它体量庞大、语法繁琐,编译器在微型计算机上发展滞后。与此同时,各类更精简的语言正蓬勃兴起。
但 COBOL 并未消亡,只是不再塑造未来。
二、ALGOL(1960)
很多程序员从未听说过 ALGOL,这其实很常见。
但这本身就很荒谬。
在四大奠基语言之中,ALGOL 是看上去最“没落”的一个。
但就影响力而言,只有 LISP 能与之匹敌。
词法作用域、结构化编程、嵌套函数、代码块结构、BNF语法、形式语言规范、按名称调用语义、代码块注释。
这并非一份普通的功能清单,而是现代编程语言设计的蓝图。
如今,几乎所有主流编程语言都是 ALGOL 的产物。
ALGOL 是一种研究型语言,它没有标准化的输入/输出接口,如果不进行扩展,几乎无法实际应用。
所以使用该语言的人都对其进行扩展,衍生出:CPL、BCPL、SIMULA、Pascal、JOVIAL 等一众语言。
人们常说C语言是“类 ALGOL 语言”,但它实际更接近 BCPL;而 BCPL 继承自 CPL,CPL 又源自 ALGOL。
ALGOL 的一众后继者,反倒将它彻底埋没。
随后 ALGOL 68 试图大幅革新,却最终失去了设计上的凝聚力。
讽刺的是,在它的后继者中,设计最简洁清晰的反而是 Pascal。
三、APL(1962)
APL 是键盘符号像外星文字的语言。
它最初是一套数学符号体系,后来 IBM 将其改造成一种专注于数组运算的编程语言。
全数组运算。
无需遍历元素,可直接对整个数组进行操作,矩阵变换只需一行表达式即可完成。
这一模型深刻影响了 R、MATLAB、NumPy、Pandas 乃至整个数据科学技术体系。
向量化计算并非凭空出现,正是起源于此。
特殊符号的问题是致命的,如果一门语言需要专用键盘才能输入,那普及程度必然受限。
同时,APL 对异构数据的处理能力存在明显缺陷,字符串与数值混用极为不便,限制了其应用场景。
其衍生语言(J、K、Q)现在仍在金融领域被广泛使用,但主流开发者早已转向其它语言。
四、BASIC(1964)
BASIC最初的设计目的是为了普及计算机技术。
也确实如此。
早期的微型计算机内存有限,装不下“真正意义上的”编译器,只能装下 BASIC 语言。
因此,数以百万计的人通过 BASIC 学习了编程。
支持大规模场景下得解释执行。
BASIC 的分时系统实现了实时解释运行,由此塑造了交互式计算的文化。
它的社会影响力或许远超技术影响力。
后来微软将其发展为 Visual Basic,并作为宏语言嵌入 Office,极大地延续了它的生命周期。
它出现了口碑问题。
当内存限制放宽后,“真正的程序员” 纷纷转向 Pascal 和 C。
BASIC 渐渐被贴上业余爱好者与初学者的标签。
有时,口碑比语法更为重要。
五、PL/I (1966)
IBM 曾尝试统一 FORTRAN 和 COBOL。
这款语言曾试图一统商业与科学计算领域,最终却演变成一套体量庞大、特性繁杂的超集语言。
将结构化数据作为原生类型支持、高级语言中引入指针、常量定义、函数重载。
多数人并未意识到,C 语言从 PL/I 中继承了很多特性,包括注释语法。
许多如今主流的特性,都是 PL/I 率先实现的。
这太复杂了。
FORTRAN 开发者认为它过于商业化,而 COBOL 开发者则认为它过于科学化。
加之整个编译器生态由 IBM 一手掌控,对厂商锁定的担忧进一步拖累了它的发展。
随着微型计算机时代的到来,BASIC 赢得了这场竞争。
六、SIMULA 67
SIMULA 在 ALGOL 基础上扩展,用于模拟领域。
随后它引入了类、子类、虚方法、保护属性等概念。
可以说,它为我们如今所熟知的面向对象编程奠定了基础。
类与对象的分离设计、多态特性、继承机制……
这些核心思想均源自 SIMULA。
Bjarne Stroustrup 在设计 C++ 时,正是深受 SIMULA 的启发。
在学术领域,面向对象的研究浪潮也几乎由 SIMULA 引领。
核心问题是性能,它运行效率极低,速度缓慢。
SIMULA 的编程思想被传承了下来,但其低效的运行环境却被时代抛弃。
C++ 与后续语言借鉴了它的设计理念,同时彻底摆脱在性能上的缺陷。
七、Pascal(1970)
Niklaus Wirth 希望保留 ALGOL-60 的简洁优雅,摒弃 ALGOL 68 的繁杂臃肿。
Pascal 也因此成为七八十年代计算机教育的主流语言。
它将结构化编程理念普及开来。
经典的 ALGOL 语法体系也因此被称作“ Pascal 风格”。
它深刻影响了 Modula、Oberon 以及更广泛的模块化设计体系。
同时也让逐步求精的设计思想在软件开发中成为主流。
Pascal 的衰落原因更为复杂。
它并非设计结构存在先天缺陷,只是在与 C 语言的竞争中逐渐式微,慢慢失去了行业生态的支持。
Delphi 至今仍在使用,因此说 Pascal 完全消亡并不准确。
历史从不会给出如此利落干脆的句号。
八、CLU(1975)
Barbara Liskov 创造 CLU 的目的是为了对抽象数据类型进行研究。
这便是它诞生的初衷。
迭代器、泛型、受检异常、抽象数据类型……
上世纪 80 年代的很多语言规范,都曾明确引用并借鉴 CLU。
它堪称是绝大多数开发者闻所未闻,却影响深远的里程碑式语言。
它本就是一门研究与演示性语言。
其设计目标并非称霸工业界,而是验证与传播编程思想。
而这一使命,它早已圆满完成。
九、ML(1976)
ML 最初是为支持定理证明而构建的,
并非作为一门主流语言来设计。
类型推导。
虽是静态类型语言,却可通过类型推断省去大量显式声明。
这在当时堪称革命性创新。
代数数据类型与模块系统也在它这里走向成熟。
现代函数式语言都深受 ML 影响。
ML 长期囿于学术领域,未能走向工业应用。
当更纯粹的函数式语言 Haskell 出现后,人们的注意力便转向了它。
类型推导被广泛沿用,但 ML 整个生态却未能留存下来。
十、Smalltalk(1972–1980)
Smalltalk 并非面向对象的开创者,却开创了万物皆对象的编程范式。
这一理念转变,意义深远。
它从文化层面真正普及了面向对象编程。
八十年代的相关著作,大多以 Smalltalk 为范例讲解 OOP。
它深刻影响了 C++、Objective-C、Ruby 等语言,乃至整个面向对象生态。
同时,它提出对象作为可共享数据的思想,也为分布式对象系统奠定了基础。
性能瓶颈、互操作性不足,共同制约了它的发展。
C++ 将面向对象思想融入更底层、更高效的体系,迅速占据优势。
Smalltalk 虽设计优雅,却在商业应用上处处受限。
尽管一度被寄予厚望,认为它将主导商业计算领域,最终却未能如愿。
所以,这一切究竟有何意义?
如果以今天的招聘需求去评判一门语言的价值,便会彻底忽略现代编程底层的完整脉络。
语言会消亡,但思想不会。
我们如今编写的代码,大多是层层积淀的成果:ALGOL 的块结构、PL/I 的类型体系、CLU 的抽象思想、ML 的类型推导、SIMULA 的对象模型、APL 的向量化运算。
表象在更迭,根基永留存。
所以更值得追问的,或许并非“哪些语言很流行”,而是 “哪些思想流传了下来?”
说实话,许多至关重要的理念,都源自绝大多数开发者从未接触过的语言。
这一点,或许值得我们深思。