当前位置: 首页 > news >正文

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)。几十年后的今天,他们的作品仍然影响着整个计算机产业,这正是真正技术大师的标志。


从最初为了运行一个游戏,到创造了改变世界的操作系统和编程语言,汤普森和里奇的故事启示我们:真正的创新往往始于解决实际问题的简单愿望,而伟大的工具则源于对完美的不懈追求。

相关文章:

  • k8s术语之Deployment
  • Android Studio下载安装教程
  • 【数据通信完全指南】从物理层到协议栈的深度解析
  • C#静态类与单例模式深度解析(七):从原理到工业级应用实践
  • PyQt5 到 PySide6 技术栈转换详解
  • ICMP协议
  • 组网技术知识点
  • Attention层的FLOPs计算
  • C语言发展史:从Unix起源到现代标准演进
  • finebi使用资源迁移无法导入资源,解决方法
  • 编译faiss
  • Multicore-TSNE
  • ROS2与Carla安装设备(其三)测试 ROS 2
  • 基于 Rancher 部署 Kubernetes 集群的工程实践指南
  • STM32实现simpleFOC控制无刷电机
  • 基于C++的IOT网关和平台4:github项目ctGateway交互协议
  • 张正友相机标定算法(Zhang’s camera calibration method)原理和过程推导(附OpenCV代码示例)
  • QT6 源(63)篇六:阅读与注释 QString 这个类,包含了 QString 类的 完整源码,也附上 QLatin1String 类的
  • Linux C++ xercesc xml 怎么判断路径下有没有对应的节点
  • Arduino项目实战与编程技术详解
  • 新能源车盈利拐点:8家上市车企去年合计净利854亿元,多家扭亏
  • 4月人民币对美元即期汇率微跌,今年以来升值0.48%
  • 民营经济促进法出台,自今年5月20日起施行
  • 浙商银行外部监事高强无法履职:已被查,曾任建行浙江省分行行长
  • 铁路五一假期运输今日启动,预计发送旅客1.44亿人次
  • 金融街:去年净亏损约110亿元,今年努力实现经营稳健和财务安全