首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

两个语言与一种操作系统间的超时空纠缠:Unix为什么用C而不是C+

关于Unix为什么用C而不是C ++编写的一个显而易见的答案是C ++是在C之后诞生的。另一个原因是,实际上C语言是为了支持Unix的开发而发明的。

Unix是在Bell Labs中创建的。 60年代后期,研究人员Ken Thompson用汇编代码编写了Unix的第一个版本,该版本在DEC PDP-7上运行(DEC在1998年被Compaq收购,后来Compaq在2002年与惠普合并)。促使他编写基本OS的原因是,他想运行自己的游戏程序“ Space Travel”,该程序以前是在Multics分时系统上开发的。他能够访问Bells Labs中的旧PDP-7,并决定为旧计算机重写他的游戏。在编写程序时,他开始尝试一些关于新型文件系统的想法。他使用PDP-7汇编语言工作,很快使他的文件系统与一些实用程序和一个核心内核(或内核)一起运行,这些内核共同构成了基本的OS。因此,从本质上讲,他设计OS的唯一目的是简化自己的软件开发工作。

汤普森(Thompson)创建了新生版本之后,研究员丹尼斯·里奇(Dennis Ritchie)看到了它,并开始倡导该系统,并帮助进一步开发它。 1969年,由汤普森(Thompson)和里奇(Ritchie)领导的一组研究人员在贝尔实验室(Bell Labs)创建了第一个正式工作版本。他们帮助开发了分层文件系统,计算机进程和设备文件的概念,命令行解释器以及其他实用程序和概念,从而影响了随后几十年其他OS的发展。

新的Unix OS最初没有组织的支持。而且,它只是一个单任务操作系统。 1970年,当贝尔实验室的计算机科学研究中心希望在比PDP-7更大的计算机上使用Unix,而另一个部门需要文字处理程序时,汤普森和里奇获得了资助,为在PDP-11上运行的Unix添加了文本处理功能。 / 20。因此,Unix首次被正式命名并在PDP-11上运行。添加了一个名为roff(后来演变为troff)的文本格式化程序和一个文本编辑器。然后,贝尔实验室内部对文本处理的需求推动了对PDP-11机器和Unix的需求。贝尔实验室的部门选择运行Unix而不是DEC自己的OS。

C语言

C的起源与Unix OS的开发紧密相关。当团队将Unix移植到PDP-11时,它仍在组装中。汤普森(Thompson)和里奇(Ritchie)希望在系统编程中使用一种高级语言,以便程序员可以清晰地表达概念,而不必与一台计算机的体系结构绑定,但效率很高,因此不需要汇编语言来提高速度。 Unix使用高级语言实现,因此打破了必须使用汇编语言编写系统并将其与特定的计算机设计,字长或体系结构联系在一起的观念。首次将包括文件系统,内核,应用程序包,实用程序和用户界面在内的整个编程环境移至完全不同类型的机器上。

1969年早些时候,汤普森(Thompson)和里奇(Ritchie)已经开发了一种称为“ B”的编程语言,它实质上是BCPL的简化版本。基本上,BCPL去除了不必要的组件,以使实现适合当时的小型计算机的存储容量(BCPL是CPL的简化,其本身是Algol 60的简化)。汤普森和里奇正在考虑使用B语言重写Unix。但是,B无法利用PDP-11的某些功能,尤其是字节寻址能力,导致了“ C”编程语言的发展。 C的名称被简单地选择为B之后的下一个字母。

C的开发始于1972年的PDP-11 Unix系统,最早出现在Version 2 Unix中。 Unix的很大一部分都用C重写。来自Unix开发的反馈对C语言的开发很有帮助。汤普森(Thompson)稍后会说,C语言“与系统重写之一融合在一起,因此,它非常适合编写系统”。到1973年,由于增加了“结构”类型,C语言已经变得足够强大,以至于现在大多数Unix内核都使用C语言。Unix成为使用汇编语言以外的其他语言实现的首批OS内核之一。

Unix最初是在1973年操作系统原理专题讨论会上正式向外界介绍的,Ritchie和Thompson在那里发表了一篇论文。这导致了对系统的要求,但是根据1956年的和解协议,在解决反托拉斯案件中,AT&T(贝尔实验室的母公司)被禁止从事除“公共运营商通信服务”之外的任何业务。因此,Unix无法变成产品。贝尔实验室转而以媒体和运输成本来发展该系统。

直到这次,Unix仍然只能在DEC系统上运行。随着更多的操作系统用C语言重写(并扩展了C语言以适应这种情况),可移植性也有所提高。 1977年,贝尔实验室购买了Interdata 8/32,目的是将Unix移植到与PDP-11尽可能不同的计算机上,从而使Unix在此过程中更加独立于机器,从而实现了汤普森(Thompson)的OS可移植性梦想和里奇。所有专用于PDP-11的代码都已从内核中删除并进行了重写,以使其易于传输Unix。在进行Interdata测试之后,他们将Unix移至IBM / 370大型机。通过每次试用,他们通常了解到有关C,Unix和可移植性的更多信息。逐渐地,Unix被移植到许多其他硬件系统上,包括基于Intel 8086的计算机,UNIVAC 1100等。

1978年,Brian Kernighan和Dennis Ritchie出版了第一版的“ The C Programming Language”。这本书被C程序员称为“ K&R”,多年来一直是该语言的非正式规范,并成为经典。

C ++程式语言

1979年,Bjarne Stroustrup在贝尔实验室开始从事“带类的C”工作。 Stroustrup创建“带有类的C”的动机源于他为博士学位编写程序的经验。论文。 Stroustrup发现Simula具有对大型软件开发非常有帮助的功能,但是该语言对于实际使用而言太慢了,而BCPL速度很快,但是级别太低,无法适合大型软件开发。在Bell Labs,他有分析与分布式计算有关的UNIX内核的问题。记住他的博士学位根据经验,Stroustrup开始使用类似于Simula的功能来增强C语言。选择C是因为它在1979年通用,快速,可移植并且被广泛使用。

Simula是60年代在奥斯陆挪威计算中心开发的,实际上是一种语言,它引入了对象,类,继承,子类和虚拟过程的概念。它被认为是第一种面向对象的编程语言。顾名思义,Simula专为进行仿真而设计(例如,在VLSI设计和过程建模中),该领域的需求为当今面向对象语言的许多功能提供了框架。但是,Simula的影响通常被低估了。

回到贝尔实验室,在分析UNIX内核时,Stroustrup开始着手开发一种适当的工具来帮助他。他开发了一个称为Cpre的预处理器,将类似于Simula的类添加到C中,并在1980年对该预处理器进行了改进,使其可以支持一个实际项目和Bell Labs中的多个实验。 Cpre可以处理添加的面向对象的功能,例如类和派生类。在1980年4月至10月的这段时间里,他正在考虑将他的“工具”概念转变为一种合适的语言,但是“ C with Classes”仍然被认为主要是对C的扩展,用于表达模块性和并发性。

1982年,在“软件:实践和经验”中发表了论文“向C语言添加类:语言进化的一种练习”。因此,“具有类的C”被明确设计为允许更好地组织程序,而“计算”被认为是C解决的问题。发现“具有类的C”可以帮助组织比C更好的大型类程序,而无需C。运行时效率损失,并且没有因语言更改而引起的强烈组织异议。

对于Stroustrup在那一年也很清楚,他希望,如果“ C with Classes”可以为足够多的用户服务,它将为适当的支持和开发组织付费,从而使他腾出空间。结果,在1983年,他开始设计一个经过清理和扩展的“带有类的C”的后继者,并使用传统的编译器技术而不是C编译器的预处理器来实现它。最初生成的语言最初仍称为“ C with Classes”,但在Bell Labs管理层的礼貌要求后,将其命名为C84。之所以命名,是因为人们习惯了用“新C”类来称呼C。最终,名称C84被删除,Stroustrup在1983年12月选择了C ++。添加的一些新功能包括虚函数,函数名称和运算符重载,引用,常量,类型安全的自由存储内存分配(新建/删除),改进的类型检查,以及带有两个正斜杠(//)的BCPL样式单行注释。

1985年,第一版的《 C ++编程语言》发行,由于当时还没有正式的标准,因此成为该语言的权威参考。同年10月发布了C ++的第一个商业实现。 1989年,C ++ 2.0发行,紧随其后

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20210324A0CLK800?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券