Command Line Heroes本季最后一期告诉我们一小群开源爱好者是如何改变世界的。
C是最初的通用编程语言。 Command Line Heroes第三季最后一期探讨了 C 语言的起源故事,展示了 C 语言设计的长久性和力量。 这是播客第三季和本系列文章讨论的所有语言的完美结合。
C是一种非常基础的语言,以至于我们许多人都忘记了它的变化。 从技术上讲,它是一种“高级语言”,从某种意义上讲它要求编译器是可运行的,它与当今人们喜欢的汇编语言(在专用的低内存环境之外)一样接近。 它也被认为是后来几乎所有语言的基础。
通往C的道路始于失败
虽然所有伟大的发明都来自于民间的神话依然存在,但是文艺复兴的故事更适合C。
在1960年代,位于新泽西州郊区的贝尔实验室是当时最具创新性的地方之一。 The idea factory的作者乔恩·格特纳(Jon Gertner)描述了乐观主义和解决棘手问题的热情所代表的时代文化。贝尔实验室没有时间紧迫的经济压力,相反,它似乎为疯狂的想法提供了无穷无尽的资金。它有一种研究和发展的精神,与今天的开放式领导原则非常一致。 这些结果意义重大,证明了在没有风险投资或 IPO 承诺的情况下也可以取得辉煌。
当时的挑战是终端共享:找到让很多人访问(数量有限)可用计算机的方法。 在没有一个可扩展的答案之前,而且早在我们拥有像Bash这样的shell之前,就已经有了Multics项目。 这是一个假想的操作系统,成百上千的开发人员可以在同一系统上共享时间。 正如我最近探索的那样,这是Lisp和“人工智能(AI)”一词的创造者约翰(John McCarty)的梦想。
《A people's history of computing in the United States》的作者Joy Lisi Ranken描述了接下来发生的事情。 公众对 Multics 提出的更加普遍的分时技术的设想很感兴趣。 学者、科学家、教育工作者以及广大公众都期待着这个计算机化的未来。 许多人主张将计算机作为一种公用事业,类似于电力,推动分时技术是一个全球性的运动。
到那时,每个系统的高端大型机数量达到40-50个终端。 正如Warren Toomey在IEEE Spectrum中写道,规模的改变是雄心勃勃的,最终失败了。
“在过去的五年里,AT & T 在 Multics 项目上投资了数百万美元,购买了一台 GE-645大型计算机,并包含了该公司著名的贝尔电话实验室的许多顶级研究人员的努力,包括 Thompson 和 Ritchie、乔伊·欧桑纳、 Stuart Feldman、 m. Douglas McIlroy 和已故的 Robert Morris。 但是新系统过于雄心勃勃,而且它的表现不尽人意。 最终,AT & T 的企业领导人决定终止合作。”
贝尔实验室于1969年退出 Multics 项目。 Multics 不再继续。
C的团队
基金结束了,强大的 GE645主机被分配到贝尔实验室的其他任务中。 但是,这并没有让所有人感到气馁。
在Multics项目的最后一次进行中,有四位对项目充满热情的人:Ken Thompson,Dennis Ritchie,Doug McIlroy和JF Ossanna。这四个“顽固分子”继续在纸上思考和涂鸦思想。 Thompson和Ritchie为PDP-7微型计算机开发了一款名为“太空旅行”的游戏。 在他们从事这项工作的同时,Thompson开始实现他们在 Multics 的残骸中开发文件系统的想法。
当时 PDP-7小型计算机还不是顶尖的技术,但是这个团队实现的基础技术改变了编程语言和操作系统的未来。
值得强调的是: 一些原始的文件系统规范是手工编写的,然后编程,与他们用来构建 Multics 的系统相比,这些规范实际上就是一个玩具。 维基百科的Ken Thompson页面深入探讨了接下来发生的事情:
“在写 Multics 的时候,Thompson 创造了 Bon 编程语言。 他还开发了一款名为太空旅行的电子游戏。 后来,贝尔实验室退出了 MULTICS 项目。 为了继续玩这个游戏,汤普森找到了一台旧的 PDP-7机器,并在上面重写了太空旅行。 最终,Thompson 开发的工具变成了 Unix 操作系统: 一个由 Thompson 和 Ritchie 领导的 Bell 实验室研究人员组成的团队在一个 PDP-7上工作,他们开发了一个分层文件系统程序,包括计算机进程和设备文件的概念,一个命令行解释器,一些简单的行程间通讯程序的管道,以及一些小的实用程序。 1970年,Brian Kernighan 提出了 Unix 这个名字,这是对 Multics 这个名字的双关语 在对 Unix 进行了初步研究之后,Thompson 决定 Unix 需要一种系统编程语言,并创建了 B 语言,它是 Ritchie 的 C 语言的前身。
正如 Walter Toomey 在上面提到的 IEEE Spectrum 文章中记录的那样,Unix 在某种程度上展示了 Multics 项目从未实现的前景。 在赢得团队的支持并做了更多的编程工作之后,Unix 之路终于铺平了。
在 Unix 中从 B 到 C
汤普森很快创造了一种 Unix 语言,他称之为 B. B,这种语言很大程度上继承了它的前身 BCPL,但是它还不足以从旧语言中分离出来。 首先,B 不知道数据类型。 它被认为是一种无类型语言,这意味着它的“ Hello World”程序看起来是这样的:
代码语言:c复制main( ) {
extrn a, b, c;
putchar(a); putchar(b); putchar(c); putchar('!*n');
}
a 'hell';
b 'o, w';
c 'orld';
即使您不是程序员,也很清楚,一次将字符串分割成四个字符是很有限的。 还值得注意的是,该文本被认为是Brian Kernighan于1972年出版的《B语言基础教程》一书中的原始“Hello World”(尽管这个说法并不确定)。
除了无类型性,B的汇编语言版本仍比使用B编译器的线程代码技术更快地生成程序。 因此,从1971年到1973年,Ritchie修改了B。他添加了“字符类型”,并构建了一个新的编译器,从而不再需要使用线程代码。 经过两年的工作,B成为了C。
在正确的时间进行正确的抽象
C对类型的使用以及易于编译为有效的汇编代码的特性,使其成为小型计算机兴起的理想语言,微型计算机以字节码表示。 B最终被C所取代。一旦C成为Unix的语言,它就成为了新兴计算机行业的事实上的标准。 Unix是互联网时代之前的共享平台。 人们写的C越多,得到的效果就越好,被采用的程度也就越高。 最终它本身成为一个开放标准。 根据C语言简要历史:
“多年来,事实上的C标准是Unix操作系统随附的版本。1983年夏天,成立了一个委员会,以创建定义C语言的ANSI(美国国家标准协会)标准。整个过程花了六年时间(比任何人合理预期的时间都要长得多)。”
如今 C 语言的影响力有多大? 简单回顾一下:
- 所有主要操作系统的一部分都用C编写,包括macOS,Windows,Linux和Android。
- 包括DB2,MySQL,MS SQL和PostgreSQL在内的世界上最多产的数据库都是用C编写的。
- 许多编程语言细节都始于C,包括Python,Go,Perl的核心解释器和R统计语言。
几十年前,汤普森和里奇还是一对好斗的局外人,现在却被誉为编程界的巨人。 他们分享了1983年的图灵奖,并在1998年因为他们在 c 语言和 Unix 方面的工作获得了美国国家科学奖章图灵奖。
但是道格·麦克罗伊(Doug McIlroy)和JF欧桑娜(JF Ossanna)也应得到他们的称赞。 他们四个都是真正的编程英雄。
结语
Command Line Heroes已经完成了对影响我们今天编码方式的编程语言的深入探索。了解这些语言并与您分享是一种荣幸。 希望您也喜欢它!