C语言与Unix的传奇起源
C语言与Unix的传奇起源
背景:Multics项目的困境
这段历史要从20世纪60年代中叶的美国说起。当时,三大技术巨头——麻省理工学院(MIT)、AT&T贝尔实验室和通用电气(GE)——联手为GE-645大型机开发一个名为Multics(Multiplexed Information and Computing Service)的分时操作系统。然而,随着开发的深入,这个系统逐渐变得臃肿复杂,性能也未达预期,贝尔实验室最终决定退出这个项目。
意外的开端:太空旅行游戏
故事并非就此结束。在贝尔实验室尚未完全退出Multics项目时,一位名叫肯·汤普森(Ken Thompson)的开发人员在工作之余自己开发了一款名为"太空旅行"(Space Travel)的小游戏。
有了游戏自然想玩,但哪台计算机适合运行这款游戏呢?直接在GE-645大型机上运行Multics系统来玩游戏?这无疑是奢侈的,就像今天用超级计算机来玩《英雄联盟》一样不合理。
于是,聪明的汤普森将目光转向了实验室里一台闲置的PDP-7小型机。有了硬件,但还缺少合适的操作系统。当时的操作系统大多是专用的,Multics虽然能在GE-645上运行,但无法在PDP-7上正常工作。
Unix的诞生
汤普森是个狠角色,他决定自己为这台小型机开发一个操作系统。这听起来不可思议,但别忘了他本身就是一位操作系统开发工程师。更重要的是,他邀请了好友丹尼斯·里奇(Dennis Ritchie)加入,后者同样是贝尔实验室的顶尖技术人才。
1969年,他们完成了Multics的极简版本。在英文中,词缀"multi-“表示"多”、“复杂"的意思,他们便选取了意义相反的"uni-”,将系统命名为Unix。这一年,汤普森26岁,里奇28岁。
C语言的起源
Unix最初是用汇编语言编写的。汇编语言作为机器指令的直接映射,是一种底层语言,使用它编程就像盖房子还要自己烧砖一样低效。他们需要一种抽象层次更高的工具来提升开发效率。
汤普森最初尝试了名为Fortran的编程语言,但不太满意。随后他转向BCPL(Basic Combined Programming Language),并对其进行简化,去掉了一些不必要的功能,创造了B语言。他甚至编写了一个将B语言代码翻译成汇编代码的编译器。
然而,使用一段时间后,汤普森发现B语言也无法充分发挥PDP-7小型机的性能。早期程序员有一个共同特点,就是追求让计算机发挥最大性能,毕竟那个年代计算资源极为宝贵。
这时,里奇说:"让我来改进一下你的B语言。"于是,C语言的雏形诞生了。C语言既保留了足够的底层控制能力,又提供了更好的抽象和移植性,完美平衡了效率与易用性。
经典著作与影响
1978年,布莱恩·柯林汉(Brian Kernighan)和丹尼斯·里奇共同编写了《C程序设计语言》(The C Programming Language),这本被程序员亲切地称为"K&R"的经典著作(国内常被称为"C语言黑皮书"),以其简洁明了的风格成为了无数程序员的入门宝典。
共生的系统与语言
C语言的历史与Unix的发展紧密相连,它们相辅相成。C语言的可移植性使得Unix能够被重写并移植到不同的硬件平台上,而Unix的广泛应用又促进了C语言的普及。
如今,Unix的衍生系统遍布全球,包括macOS、Linux以及Android等,它们都与Unix有着深厚的血缘关系。C语言作为系统级编程语言的代表,至今仍在操作系统、嵌入式系统、高性能计算等领域发挥着不可替代的作用。
技术创新的启示
汤普森和里奇的故事告诉我们,伟大的创新往往源于实际需求,甚至可能是从一个看似微不足道的爱好项目(如"太空旅行"游戏)开始的。他们没有刻意追求创造历史,而是专注于解决问题,追求技术的完美。
正如Unix设计哲学所倡导的:“做好一件事,并把它做好”(Do one thing and do it well)。几十年后的今天,他们的作品仍然影响着整个计算机产业,这正是真正技术大师的标志。
从最初为了运行一个游戏,到创造了改变世界的操作系统和编程语言,汤普森和里奇的故事启示我们:真正的创新往往始于解决实际问题的简单愿望,而伟大的工具则源于对完美的不懈追求。