在计算机历史的讨论中,常常出现一个看似简单却颇有争议的问题:Fortran是第一种高级语言吗?回答并非黑白分明,而是取决于如何界定"高级语言"、如何衡量"第一"、以及你把重点放在概念、实现还是传播影响上。要理解这个问题,需要回溯到二战后到五六十年代那段密集的语言设计与编译器开发时期,辨析若干被提出或实现的语言,以及它们对后续计算机科学的意义。 何为"高级语言"?这个看似基础的问题实际上决定了谁能戴上"第一"的桂冠。一般而言,高级语言是相对于机器语言和汇编语言而言的,具有更接近人类思维的抽象表示、支持变量和控制结构、允许某种程度的可移植性并通过编译器或解释器转换为目标机器码。以这个标准来看,有些早期方案在思想上已经具备"高级"的雏形,但在实现层面或者推广层面并不完整或广泛采用。要判断第一名,必须兼顾语言的语法抽象、编译/解释的实现以及实际被用于解决现实问题的程度。
Fortran的诞生通常被视为一次里程碑。由约翰·巴克斯(John Backus)领导的IBM团队从1954年起着手开发Fortran,目标是为科学与工程计算提供一种比手工编写机器码或汇编更高效、更易用的语言。1957年发布的Fortran编译器不仅实现了高级语言到机器码的自动翻译,而且在当时首次展示了能与手工优化代码接近的性能,使得编译器优化技术成为可能。Fortran的成功包含两个关键方面:语言设计上的实用性与编译器实现上的高效性。正是因为两者结合,Fortran迅速被科研界和工业界采用,确立了其作为第一代广泛使用高级语言的历史地位。 然而,在Fortran之前或同时期也出现了若干值得注意的前驱或同代语言,它们在"高级"概念的发展上贡献良多但往往名声不及Fortran。
最早可以追溯到纳粹德国工程师康拉德·祖澤(Konrad Zuse)在二战期间提出的Plankalkül。Plankalkül在1945年已经设计出高级语法、数据结构和子程序的概念,显然具备了许多现代编程语言的特征。然而,Plankalkül长期未被实现或广泛传播,直到更晚期才逐步被人研究和复现。因此它更多被视为具有前瞻性的概念性语言,而非在实际计算环境中引发革命的工程产品。 另一条常被提及的线索是被称为Short Code的方案,约翰·莫克利(John Mauchly)在1949年提出的一种早期"符号化"的程序形式,允许使用数学符号代替二进制编码来编写程序,并通过解释器逐条翻译执行。Short Code提高了编程的可读性,但其解释执行导致性能较低,且并未催生广泛的工业采用。
Early Autocode家族是另一个关键节点。英国工程师Alick Glennie在1952年为Mark 1机器引入了Autocode概念,随后各种Autocode变种在英国和欧洲一些计算中心应用于科学计算。Autocode可以被看作是面向特定机器的高级助记符系统,有助于程序编写和维护,但其便携性和语法抽象程度仍与后来的Fortran存在差距。 1950年代中期出现的FLOW-MATIC与ARITH-MATIC代表了高级语言面向商业数据处理的早期尝试。由格雷斯·霍珀(Grace Hopper)等人在UNIVAC项目中研发的FLOW-MATIC直接影响了后来的COBOL,推动了面向业务的自然语言风格编程思想。FLOW-MATIC在语法上更接近英语句式,目标是让非工程背景的人员也能描述数据处理逻辑。
尽管这些语言在商业领域意义重大,但它们并非为科学计算和数值性能优化而设计,因此与Fortran在用途和设计哲学上有显著差异。 与此同时,人工智能与符号处理领域也出现了关键的语言创新。IPL(Information Processing Language)在1956年前后被用于早期的人工智能研究,Lisp在1958年由约翰·麦卡锡等人设计,带来了诸如递归、符号处理和列表数据结构等新范式。Lisp虽然在时间上几乎与Fortran并驾齐驱或稍后,但代表了另一条独立的发展路线,其"高级性"体现在更强的抽象能力与元编程特性上,而非数值计算性能。 从语义与实现两个维度看,判断"第一"的标准可以有所不同。在语义层面,像Plankalkül这样的早期设计已经展示了完整的高级语言理念;在实现层面,像Short Code或各类Autocode等则在布置可读性与可维护性的实践上迈出了一步;在工业化与影响力层面,Fortran因其编译器优化和广泛应用而脱颖而出。
许多计算史学者之所以愿意把"第一种实用的高级语言"的头衔授予Fortran,正是因为它在工程实现、性能和普及上同时取得了突破性进展。 需要强调的是,"第一"往往包含了社会与技术的双重因素。一个语言即便在技术上率先提出,如果没有与之配套的硬件、编译器和推广渠道,也难以改变计算文化。Fortran的成功离不开IBM的资源支持、强大的工程团队与促成标准化的商业动力。相反,Plankalkül因战后德国的科研与传播受限而长期被埋没,Autocode与FLOW-MATIC虽然在特定圈子内使用,但未能像Fortran那样迅速形成跨机构的通用规范。 另一个值得关注的角度是编译器本身的发明。
编译器不仅是把高级语言变成机器代码的工具,更是将高级抽象转化为高效执行的桥梁。Fortran编译器在当时首次展示了复杂的优化策略,如表达式重写、寄存器分配和循环优化,从而让高级表达与机器效率之间的鸿沟显著缩小。正因为如此,工程师们愿意用更抽象的语言表达算法,而不是为微观机器细节耗费大量时间。可以说,Fortran的历史地位部分来自于它与编译器技术的协同进化。 历史教给我们的另一个教训是:多条道路同时存在并相互影响。Lisp、IPL、COMIT、COBOL及其前身都在不同的应用场景中推动了编程语言概念的发展。
Lisp引领了符号处理与函数式编程的思想,COBOL推动了商业数据处理的可读性与跨机构互通,COMIT为字符串处理与模式匹配探索了新方法。各类语言彼此借鉴,形成了后续几十年语言设计的基石。因此,把语言史简化为单一"第一"往往忽视了复杂的相互作用与并行创新。 从现代视角看,Fortran的影响仍在。尽管近年来出现了C、C++、Python等语言在科学计算与工程领域获得大量应用,但Fortran在高性能数值计算领域依然占有一席之地,特别是在数值稳定性、数组操作和并行计算优化方面。Fortran的语言演化(如Fortran 77、Fortran 90及以后标准)持续引入模块化、数组表达式和并行编程结构,显示了语言长期适应科学计算需求的能力。
因此,回答"Is Fortran the first high-level language?"需要分层次来讲。在严格的时间和概念意义上,存在比Fortran更早提出高级语言思想的实例,例如Plankalkül的早期理念、Short Code的解释执行和Autocode在实务中的应用。从"谁最先提出高级抽象"的角度看,Fortran并非绝对的首创者。然而,如果把问题改为"谁是第一种被广泛采用并证明可在性能与可维护性之间取得平衡的高级语言",那么Fortran的地位就更难被撼动。它不仅是一个语言设计的范例,也是编译器工程与工业推广成功结合的典型案例。 最终,语言史的价值不仅在于谁排在第一位,而在于理解思想如何传播、如何被工程实现并改变实践。
Fortran的重要性在于它把抽象、工程与应用结合在一起,示范了高级语言在现实世界中可以超越手工编程带来的效率瓶颈。与此同时,Plankalkül、Autocode、FLOW-MATIC、Lisp等早期语言提供了多样的实验样本,丰富了后续语言设计的语法、语义与应用范式。把Fortran放在历史长河中全面审视,既能承认它作为实用高级语言先驱的贡献,也能看到并行创新如何共同塑造了现代编程世界。 。