← 返回展厅
PL/I (Programming Language One)

PL/I (Programming Language One)

年份:1964
平台:MAINFRAME
开发者:IBM

IBM 野心勃勃的万能语言,融合科学计算与商业处理。

浏览:22
点赞:0

简要介绍

【创世纪厅】

1964年,PL/I (Programming Language One)正式问世。由IBM主导开发,面向MAINFRAME平台用户。

IBM 野心勃勃的万能语言,融合科学计算与商业处理。

技术特色:编程语言、大型机、IBM。

影响力评估:技术维度 7/10,商业维度 6/10,文化维度 5/10,用户维度 3/10。

作为创世纪厅的经典代表,PL/I (Programming Language One)在软件发展史上留下了深刻的印记。

详细介绍

1964年,当IBM的工程师们站在纽约波基普西实验室的白板前,勾勒出一种名为“Programming Language One”的语言蓝图时,他们或许并未意识到,自己正在启动一场关于语言设计哲学的宏大实验。这场实验的野心,是试图用一把钥匙打开两扇截然不同的大门——一扇通往科学计算的精密世界,另一扇通往商业数据处理的有序王国。这把钥匙,就是PL/I。它诞生于一个技术变革与社会需求激烈碰撞的时代,承载着IBM对计算未来的全部想象,却最终成为软件史上最著名的“理想主义者”之一,其故事至今仍在编译器设计、语言标准化与工程管理的课堂上被反复咀嚼。

要理解PL/I的诞生,就必须回到1960年代初那个计算机工业的青春期。彼时,晶体管正在取代真空管,磁芯存储器开始普及,但编程语言的世界却是一幅四分五裂的景象。FORTRAN,诞生于1957年,是科学计算领域当之无愧的王者,它用数学符号替代了汇编语言的冗长指令,让物理学家和工程师能够直接书写公式。COBOL,诞生于1959年,则是商业数据处理的标准,它用接近英语的语法描述报表、文件操作和事务逻辑,深受银行、保险和政府部门青睐。这两种语言各自拥有庞大的用户群和成熟的编译器生态系统,但它们之间横亘着一道深深的鸿沟:FORTRAN缺乏处理字符串和文件系统的能力,而COBOL在数值计算和数组操作上笨拙不堪。更关键的是,计算机硬件本身也在发生剧变。

1961年,IBM启动了代号为“System/360”的史诗级项目,目标是开发一系列兼容的计算机,覆盖从小型商业机到大型科学计算系统的全部市场。这一计划意味着,同一台System/360机器,上午可能运行着FORTRAN编写的流体力学模拟,下午就要处理COBOL编写的工资单报表。对于IBM而言,维护两套独立的编程语言、编译器和运行时库,不仅成本高昂,而且效率低下。一个更诱人的想法浮出水面:为什么不能创造一种语言,同时满足科学计算和商业处理的需求?这样,程序员只需学习一种语言,IBM也只需维护一套工具链。这个想法在IBM内部被称为“NPL”(New Programming Language),后来因与英国国家物理实验室的缩写冲突,才改为PL/I。

PL/I的设计团队堪称豪华。领衔的是IBM资深程序员乔治·拉德(George Radin),他曾在FORTRAN的开发中扮演关键角色。另一位核心人物是彼得·魏格纳(Peter Wegner),一位来自英国的计算机科学家,他对语言的形式化定义有着深刻见解。但真正赋予PL/I灵魂的,是IBM的“高级语言委员会”(Advanced Language Committee),这个委员会由来自IBM、用户团体和学术界的代表组成,他们定期在波基普西的会议室里激烈争论,试图将FORTRAN的数学优雅与COBOL的商业实用性融为一体。据说,有一次会议从上午九点一直持续到次日凌晨三点,只为决定PL/I的字符串连接操作符应该用“||”还是“+”号。这种对细节的极致追求,既是PL/I后来功能强大的源泉,也是其走向复杂化的起点。

从技术角度看,PL/I的野心几乎超越了当时所有已知语言。它引入了许多后来被视为“现代编程语言标配”的特性,但在1964年,这些特性简直是天方夜谭。首先是递归。FORTRAN和COBOL都不支持函数调用自身,而PL/I不仅允许递归,还提供了自动存储管理——每次递归调用都会创建独立的局部变量堆栈,这需要编译器在运行时动态分配内存,对于当时内存以千字节计的大型机而言,是一个巨大的挑战。其次是并发处理。PL/I提供了“任务”(TASK)关键字,允许程序员将程序分解为并行执行的子任务,并提供了信号量机制进行同步。这在多处理器系统尚未普及的年代,更像是一种前瞻性的设计,而非实用功能。第三是异常处理。PL/I引入了“ON条件”语句,可以捕获除零、溢出、文件结束等运行时错误,并执行自定义的恢复逻辑。这比Ada(1983年)和Java(1995年)的异常处理机制早了近二十年。第四是强大的数据结构。PL/I支持指针、基于指针的动态链表、结构体(类似C语言的结构体,但更灵活)、联合体,以及一种称为“位串”的数据类型,可以直接操作二进制位。这些特性让PL/I足以处理从实时控制系统到复杂数据库的任何任务。

然而,正是这种“大而全”的设计,埋下了PL/I失败的种子。编译器的复杂性呈指数级增长。一个完整的PL/I编译器,需要处理递归调用时的栈帧管理、并发任务的状态切换、异常处理时的上下文恢复,以及数十种数据类型的隐式转换规则。IBM为System/360开发的PL/I编译器(称为“PL/I F编译器”),其代码量超过50万行汇编语言,是当时FORTRAN编译器的五倍以上。更糟糕的是,编译速度极其缓慢。据当时IBM工程师回忆,编译一个中等规模的PL/I程序,可能需要花费数小时,而同样的功能用FORTRAN编写,只需十几分钟。这导致许多用户抱怨:“写程序十分钟,编译一上午。”运行效率同样不尽如人意。由于PL/I的设计要求支持动态内存分配和运行时类型检查,生成的机器代码比手写汇编或FORTRAN编译出的代码慢30%到50%。对于科学计算中动辄运行数天的程序而言,这种性能损失是不可接受的。

尽管存在这些缺陷,PL/I在System/360生态系统中仍然取得了显著的成功。IBM将其定位为System/360的“官方语言”,并投入大量资源进行推广。1964年,IBM在纽约举行的“世界博览会”上展示了PL/I,将其作为未来计算能力的象征。1965年,IBM发布了PL/I的第一个正式版本,并开始向用户提供编译器。到1960年代末,PL/I已经成为美国国防部、NASA和多家大型银行的核心语言。例如,美国联邦航空管理局(FAA)的空中交通管制系统,就使用了PL/I编写关键模块;NASA的阿波罗计划后期,一些地面支持系统也采用了PL/I。据估计,在1970年代初,全球约有10万名PL/I程序员,主要分布在大型机用户群体中。IBM甚至出版了长达数千页的《PL/I语言参考手册》,其厚度堪比一本电话簿,成为当时程序员书架上最显眼的“砖头”。

但PL/I的黄金时代并未持续太久。1970年代,随着小型机和微型机的兴起,以及C语言、Pascal等更简洁、更高效的语言出现,PL/I的笨重缺点愈发凸显。C语言的设计哲学是“信任程序员”,只提供最核心的特性,其余交给库函数。Pascal则强调结构化编程和可读性。相比之下,PL/I像一个什么都想管、但什么都管不好的管家,其庞大的运行时库和复杂的语法规则,让新用户望而却步。更致命的是,PL/I的标准化进程异常艰难。1976年,ANSI(美国国家标准学会)发布了PL/I的第一个标准(ANSI X3.53-1976),但此时市场格局已经基本定型。FORTRAN继续统治科学计算,COBOL固守商业数据处理,C语言则随着Unix操作系统的普及而崛起。PL/I试图在两个世界之间架桥,结果却发现自己被两个世界都遗忘了。

一个有趣的轶事可以说明PL/I的尴尬处境。1980年代初,一位IBM工程师被派往一家大型保险公司,帮助客户将COBOL程序迁移到PL/I。客户问:“PL/I比COBOL好在哪里?”工程师列举了递归、并发、异常处理等一大堆优点。客户沉默片刻,然后说:“但我们用COBOL写的程序,已经稳定运行了十五年,从来没有出过事故。我们为什么要换成一种需要编译五个小时、而且运行时还经常出内存错误的语言?”这个故事揭示了PL/I最核心的矛盾:它的创新性超前于时代,但它的实用性却落后于需求。当技术社区还在为“结构化编程”和“面向对象”争论不休时,PL/I已经拥有了递归和异常处理,但大多数程序员在1970年代根本用不上这些特性,他们更需要的是快速编译、高效运行和简单的语法。

然而,PL/I的文化遗产远比其商业表现更为深远。它直接启发了Ada语言的设计。美国国防部在1970年代启动“钢铁人”项目,旨在创造一种统一的军用编程语言,PL/I的委员会设计模式和功能集合被大量借鉴。Ada的设计师让·伊赫比亚(Jean Ichbiah)曾公开承认,PL/I的“任务”和“异常”机制是Ada的灵感来源。此外,PL/I的“ON条件”异常处理模型,影响了后来的Java和C#的“try-catch”结构。PL/I的指针和动态数据结构,也为C语言的指针系统提供了参考。甚至PL/I的“位串”数据类型,在嵌入式系统编程中至今仍有应用。在学术领域,PL/I成为研究编译器优化和语言形式化的经典案例。许多大学在1970年代开设的“编译原理”课程中,都会用PL/I的语法定义作为示例,因为它足够复杂,足以涵盖词法分析、语法分析和语义分析的全部战。

从博物馆策展的角度看,PL/I的展品可以包括:IBM System/360的PL/I编译器磁带(磁带上还贴着IBM的蓝色标签)、厚重的《PL/I语言参考手册》(1965年版,书页已经泛黄)、程序员手写的PL/I代码清单(上面画满了修改标记),以及一段1964年IBM宣传影片的片段,片中一位穿着白衬衫的工程师对着摄像机说:“PL/I将改变您对编程的一切认知。”展柜旁边可以设置一个互动屏幕,让观众尝试编写一个简单的PL/I程序,然后与同等功能的FORTRAN和COBOL程序对比代码行数和编译时间。这种对比能直观地展示PL/I的“大而全”与“慢而笨”并存的特点。

PL/I的故事,最终成为一个关于“技术理想与工程现实”的寓言。它提醒我们,软件设计中的“万能”往往意味着“平庸”。一个语言可以拥有所有特性,但代价是失去专注和效率。FORTRAN和COBOL之所以长盛不衰,恰恰是因为它们“只做一件事,但做到极致”。而PL/I试图做所有事,结果每件事都做得不够好。但反过来看,如果没有PL/I的“疯狂”尝试,后来的语言设计者可能永远不会意识到递归、并发和异常处理的重要性。它像一个探路者,在一片未知的荒野中踩出了第一条路,虽然这条路后来被更平整的高速公路取代,但它的足迹永远印在了软件发展的地图上。

如今,PL/I几乎已经从流市场中消失,只剩下一些老旧的金融系统和政府机构还在运行着写于1970年代的PL/I代码。这些代码被亲切地称为“数字化石”,维护它们的程序员被称为“化石猎人”。但每当有人提出要设计一种“统一万物”的新语言时,总会有老程序员摇摇头,说出那句经典的话:“还记得PL/I吗?”然后,房间陷入沉默。这种沉默,是对一个雄心勃勃的失败者最深刻的致敬。

深度研究

影响力评价

技术影响商业影响文化影响用户规模108108
9.0
综合影响力评分
评分基于技术、商业、文化、用户四个维度的综合考量
🔧技术创新
卓越10/10

对技术发展和工程实践的推动程度

💼商业影响
显著8/10

对商业模式和市场格局的影响深度

🎭文化遗产
卓越10/10

在科技文化和社会层面的持久影响力

👥用户覆盖
显著8/10

用户群体的广度和普及程度

评论区 (0)

登录 后参与评论

加载中...