在计算机科学的历史长河中,有些名字因其开创性贡献而被永远铭记。约翰·巴克斯(John Backus)正是其中之一。作为Fortran语言之父和BNF范式(Backus-Naur Form)的发明者,他早已在编程语言领域功勋卓著。然而,许多人不知道的是,巴克斯在20世纪70年代后期发起了一项极具前瞻性的函数式编程项目,试图从根本上颠覆当时占据统治地位的“冯·诺依曼风格”编程范式。这一项目不仅深刻影响了后来的函数式编程语言,更成为计算机科学思想史上的一座里程碑。

从Fortran到“解放编程”的追问

巴克斯的职业生涯始于IBM,他在20世纪50年代领导了Fortran的开发,首个高级编程语言的诞生彻底改变了人们编写程序的方式。然而,随着经验积累,巴克斯逐渐对传统编程语言本质产生反思。1977年,他在获得图灵奖时发表了题为《编程能否从冯·诺依曼风格中解放出来?》的著名演讲,直接向当时计算机体系结构和编程语言的底层假设发难。

巴克斯指出,传统的命令式编程语言本质上是冯·诺依曼计算机体系结构的映射——程序由一系列改变内存状态的可变赋值语句组成。这种“词句式”风格导致程序难以理解、难以验证、难以并行化。他认为,编程应当更像数学:用定义好的函数来组合构建复杂行为,而不是通过修改变量来一步步“执行”指令。正是在这一思想驱动下,他开启了函数式编程项目FP(Functional Programming)的研究。

FP语言:函数式编程的一次激进实验

FP语言是巴克斯及其团队在IBM圣何塞研究中心开发的实验性编程语言,其核心原则是:程序完全由函数定义,没有副作用,不依赖可变状态。巴克斯在FP中引入了若干革命性概念:

首先,FP采用一种“无变量”的编程风格。程序由一系列复合函数构成,每个函数接受一个输入并产生一个输出,没有任何赋值语句。巴克斯称之为“函数级”编程,以区别于当时主流的“对象级”编程。其次,FP引入了“组合子”机制,允许程序员用少量基本函数通过组合子(如复合、条件、构造等)来构造任意复杂度的函数,从而将程序抽象简化为数学式的函数代数。

更重要的是,FP语言设计了一套严格的代数定律,使得程序可以像数学表达式一样进行形式化变换和验证。巴克斯相信,这种基于代数定律的“程序代数”将能够消除大量低层错误,并极大地提高软件可靠性。他甚至在论文中展示了如何用FP进行数值计算、列表处理等典型任务,证明其表达能力不逊于传统语言。

影响与回响:从“先锋”到“浪潮”

尽管FP语言本身并未获得商业成功,它在IBM内部仅作为研究项目存在,甚至后来被尘封于技术报告之中,但其思想却像种子一样播撒出去。20世纪80年代,米尔纳(Robin Milner)的ML、特纳(David Turner)的Miranda以及后来的Haskell等纯函数式语言,都直接或间接受到巴克斯的启发。函数式编程的“无副作用”“高阶函数”“惰性求值”等核心理念,如今已成为现代编程语言设计的重要参考。

更令人感慨的是,随着多核处理器和并行计算的兴起,巴克斯当年提出的“从冯·诺依曼风格中解放”的呼吁,在今天显得尤为迫切。命令式编程中可变状态带来的竞态条件、死锁等问题,在函数式编程的纯数学框架下自然消解。因此,以Haskell、Scala、Clojure为代表的函数式语言近年来越来越受青睐,而传统语言如Python、JavaScript、Java也纷纷引入函数式特性。巴克斯的“先锋”思想,终于在数十年后成为技术浪潮的主旋律。

一份未完成的草稿

巴克斯的函数式编程项目最终留下了一份“草稿”——这既是FP语言本身的不完善状态,也象征着一种未竟的理想。巴克斯晚年曾感叹,计算机工业对“易用性”和“性能”的追求,掩盖了对编程本质的追问。然而,他始终坚持,真正的进步不在于更快地实现旧思维,而在于创造全新的思维方式。

今天,回顾这段历史,我们不应将其视为一个过时的学术实验,而应看作一场关于“编程到底是什么”的深刻探索。约翰·巴克斯以其Fortran改变了一个时代,又以FP的草稿启发了下一个时代。在软件复杂度爆炸式增长的今天,那句“能否解放”的反问,依然振聋发聩。