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

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


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

http://www.xdnf.cn/news/3303.html

相关文章:

  • (32)VTK C++开发示例 ---背景纹理
  • pytorch中的变量内存分配
  • WPF之RadioButton控件详解
  • C/C++核心机制深度解析:指针、结构体与动态内存管理(面试精要)
  • 生成项目.gitignore文件的多种高效方式
  • 分布式-redisson
  • 优先级队列
  • 【DBeaver】如何连接MongoDB
  • VSCode Auto Rename Tag插件不生效
  • OLED技术解析与驱动实战指南
  • Python 使用一等函数实现设计模式(“命令”模式)
  • C++智能指针
  • Gradio全解20——Streaming:流式传输的多媒体应用(1)——流式传输音频:魔力8号球
  • AE模板 动感节奏快闪图文展示介绍片头 Typographic Intro
  • Hadoop 集群基础指令指南
  • usb端点笔记
  • 【UE5】“对不起,您的客户端未能传递登录所需的参数”解决办法
  • QCefView应用和网页的交互
  • Github 热点项目 Qwen3 通义千问全面发布 新一代智能语言模型系统
  • WPF使用高性能图表
  • 【游戏ai】从强化学习开始自学游戏ai-2 使用IPPO自博弈对抗pongv3环境
  • 基于C++的IOT网关和平台4:github项目ctGateway交互协议
  • flutter 专题 一百零四 Flutter环境搭建
  • 零基础做自动驾驶集成测试(仿真)
  • MIPS架构详解:定义、应用与其他架构对比
  • harmonyOS 手机,双折叠,平板,PC端屏幕适配
  • 数据隐私在Web3环境下的重要性及实现方法
  • Spring Boot集成Kafka并使用多个死信队列的完整示例
  • 【MySQL】增删改查(CRUD)
  • Microsoft Entra ID 免费版管理云资源详解