C++历史(翻译)

历史:背景60年代末是贝尔电话实验室计算机系统研究的动荡年代。该公司退出了Multics项目【Organick 75】,该项目最初是麻省理工学院、通用电气和贝尔实验室的合资企业;到1969年,贝尔实验室的管理层,甚至研究人员都开始相信Multics的承诺只有在太迟了,也太贵了。甚至在GE-645 Multics机器从工厂中移除之前,一个主要由Ken Thompson领导的非正式小组就已经开始研究替代方案。Thompson希望使用任何可用的方法,根据自己的设计构建一个舒适的计算环境。回想起来,他的计划显然包含了Multics的许多创新方面,包括将进程明确定义为控制点、树状结构的文件系统、作为用户级程序的命令解释器、文本文件的简单表示以及对设备的通用访问。它们排除了其他功能,例如对内存和文件的统一访问。此外,在一开始,他和我们其他人都推迟了Multics的另一个开创性元素(虽然不是原创的),即几乎完全用高级语言编写。Multics的实现语言PL/I并不太合我们的口味,但我们也在使用其他语言,包括BCPL,我们遗憾地失去了用汇编语言编写程序的优势,例如易于编写和理解清晰。汤普森当时面临的硬件环境既狭窄又简朴:1968年他开始使用的DEC PDP-7是一台8K 18位字内存的机器,没有对他有用的软件。在想要使用高级语言的同时,他用PDP-7汇编程序编写了原始Unix系统。一开始,他甚至没有在PDP-7上编程,而是在GE-635机器上为GEMAP汇编程序使用了一组宏。后处理器生成了PDP-7可读纸带。这些磁带被从GE机器带到PDP-7进行测试,直到一个原始的Unix内核、一个编辑器、一个汇编程序、一个简单的shell(命令解释程序)和一些实用程序出现(如Unix rm、cat、cp命令)已完成。此后,操作系统实现了自给自足:程序的编写和测试无需借助纸带,PDP-7本身的开发继续进行。Thompson的PDP-7汇编器在简单性上甚至比DEC的还要强;它计算表达式并输出相应的位。没有库,没有加载器或链接编辑器:程序的整个源代码都呈现给汇编程序,输出文件(具有固定的名称)可以直接执行。(这个名称a.out解释了一点Unix的词源;它是汇编程序的输出。即使在系统获得了链接器和显式指定另一个名称的方法之后,它仍被保留为编译的默认可执行结果。1969年,Unix首次在PDP-7上运行后不久,Doug McIlroy创造了新系统的第一个高级语言:McClure的TMG[McClure 65]的实现。TMG是一种用于编写编译器的语言,它采用自上而下的递归式风格,结合了上下文无关的语法表示法和过程元素。McIlroy和BobMorris使用TMG编写了早期的用于Multics的PL/I编译器。面对McIlroy在复制TMG方面的成就的挑战,汤普森决定Unix——可能还没有被命名——需要一种系统编程语言。在一次对Fortran的尝试迅速失败后,他创造了一种自己的语言,他称之为B。B可以被认为是没有类型的C;更准确地说,它是BCPL压缩到8K字节的内存中,然后通过汤普森的大脑过滤。它的名字很可能是BCPL的缩写,尽管另一种理论认为它起源于Bon[Thompson 69],一种由Thompson在多语言时代创造的与之无关的语言。Bon的名字要么以他妻子Bonnie的名字命名,要么以他妻子Bonnie的名字命名(根据百科全书手册中的引用),源自一种宗教,该宗教的仪式包括低语魔法配方。起源:BCPL语言是马丁·理查兹在20世纪60年代中期访问麻省理工学院时设计的,在70年代早期被用于几个有趣的项目,其中包括牛津的OS6操作系统(Stoy 72)和部分开创性的人工智能在施乐帕洛斯研究中心【萨克79】工作。我们对它的熟悉是因为Richards使用的MIT CTSS系统【Corbato 62】用于Multics的开发。最初的BCPL编译器由Rudd Canaday和贝尔实验室的其他人【Canaday 69】将其运送到Multics和GE-635 GECOS系统中;在Multics在贝尔实验室生命的最后一段痛苦中,随后后来接触到Unix的人选择的语言。BCPL、B和C都与Fortran和Algol 60为代表的传统过程家族紧密配合。它们特别面向系统编程,体积小,描述紧凑,易于使用简单的编译器进行翻译。它们"接近于机器",因为它们引入的抽象很容易以传统计算机提供的具体数据类型和操作为基础,它们依赖库例程进行输入输出和与操作系统的其他交互。它们还使用库过程来指定有趣的控件构造,例如协程和过程闭包,但成功率较低。同时,它们的抽象级别足够高,只要小心,就可以实现机器之间的可移植性。BCPL、B和C在语法上有许多细节上的不同,但它们大致上是相似的。程序由一系列全局声明和函数(过程)声明组成。过程可以嵌套在BCPL中,但不能引用包含过程中定义的非静态对象。B和C通过实施更严格的限制来避免这种限制:完全没有嵌套过程。每种语言(除了最早的B版本)都能识别单独的编译,并提供了一种方法来包含来自命名文件的文本。BCPL的一些句法和词汇机制比B和C更优雅和规则。例如,BCPL的过程和数据声明具有更统一的结构,并提供了更完整的循环结构集。尽管BCPL程序从理论上讲是由不受限制的字符流提供的,但聪明的规则允许在行边界结束的语句后面省略大多数分号。B和C省略了这种方便性,并且大多数语句都以分号结尾。尽管存在差异,但BCPL的大多数语句和运算符都直接映射到相应的B和C。BCPL和B之间的一些结构差异源于对中间存储器的限制。例如,BCPL声明可以采用这样的形式:P1是命令,P2是命令,P3是命令...其中命令表示的程序文本包含整个过程。和连接的子声明同时发生,因此名称P3在过程P1中是已知的。类似地,BCPL可以将一组声明和语句打包到一个表达式中,该表达式可以产生一个值,例如E1:=valof(声明;命令;结果E2)+1 BCPL编译器可以通过存储和分析解析后的表示来处理这种构造

你可能感兴趣的:(c++,开发语言,linux,windows,c语言)