C语言的发展史(The Development of the C Language).docx

上传人:安*** 文档编号:73273515 上传时间:2023-02-17 格式:DOCX 页数:9 大小:23.07KB
返回 下载 相关 举报
C语言的发展史(The Development of the C Language).docx_第1页
第1页 / 共9页
C语言的发展史(The Development of the C Language).docx_第2页
第2页 / 共9页
点击查看更多>>
资源描述

《C语言的发展史(The Development of the C Language).docx》由会员分享,可在线阅读,更多相关《C语言的发展史(The Development of the C Language).docx(9页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、C语言的发展史(The Development of the C Language) 本文讲述C程序设计语言的开展、它所受到的影响和它诞生的条件。简洁起见 我省略了对C自身、它的父亲BJohnson 73以及祖父BCPLRichards 79的完好描绘 而是关注于每一种语言的特性要素和它们是怎样演化的。 在1969-1973年度间 C的出现 伴随着Unix操作系统的早期开展 而最富创造性的时期是1972年度。另外一个(发生)一连串改变的顶峰期是1977到1979年度间 此时Unix系统的可移植性得以证实。第二个阶段期间 出现了第一份被广为传播的该语言的描绘 The C Programming

2、Language 通常被称为白皮书或者K RKernighan 78。最后 在1980年度代中期 该语言被ANSI X3J11委员会正式标准化 并作出了进一步的修改。截止1980年度代早期 尽管已有各种机器构造及操作系统的【C的各种】编译器 该语言几乎与Unix十分亲密关联 更近一些 它的使用传播得更广 而今天它是整个计算机产业中最广泛使用的语言之一。 历史背景 1960s晚期 是Bell Telephone Laboratories(贝尔 实验室)的计算机系统研究(中心)的动乱岁月Ritchie 78 Ritchie 84。计算机被从Multics工程组拖走Organick 78 该工程是M

3、IT(麻省理工学院)、General Electric(通用电气公司)以及贝尔实验室的合作工程。到1969年度 贝尔实验室管理层、甚至研究人员都认为 Multics工程不能按期完成并且代价高昂。甚至在GE-645 Multics机器被撤走之前 一个非正式小组早期由Ken Thompson指导 已经着手一些其它的研究。 Thompson祈望按照自己的设计、使用可用的任何方式 创造一个舒适的计算环境。事后诸葛亮地讲 他的方案集成了Multics的许多创新方面 包括关于进程的明晰概念控制块,树型构造的文件系统、作为用户级程序的命令解释器、文本文件的简单表示以及访问设备的通用化。他们排除了其余特性 比

4、方对内存以及文件的统一访问。此外 开场的时候 他与我们这些俗人遵循推延 着Multics的另一个先驱性(固然不是原创)的特性 即几乎仅用高级语言来编程。PL/I【Programming Language One IBM公司在1950s创造的高级编程语言】Multics的实现语言 不太符合我们的口味 因此我们也使用其他语言 包括BCPL 我们担忧【regretted 】失去使用在汇编程序的级别以上的语言进展编程的优势 即容易编写、易于理解。当时我们并未十分关注可移植性 到后来才有了这方面的兴趣。 Thompson面临的硬件环境 即使在那个时代也是又拥挤又简陋 他从1968年度就开场使用的DEC

5、PDP-7 只有8K的18bit字(长)的内存 并且没有对他有用的软件。固然心想着使用高级语言 他还是用PDP-7汇编器编写了最初的Unix系统。刚开场的时候 他甚至并未在PDP-7上编程 而是在一台GE-635机器上使用GEMAP汇编器的一些宏。一个后处理器(postprocessor)生成PDP-7可读的纸带。 这些纸带从GE机器拿到PDP-7上进展测试 直到一个原始的Unix内核(kernel)、一个编辑器、汇编器、一个简单的外壳(shell) 命令解释器 以及一些工具 像Unix rm, cat, cp命令 被完成。此后 这个操作系统可以自己支持 可以编写以及测试程序 勿需借助纸带 并

6、且程序开发可以在PDP-7上持续进展。 Thompson的PDP-7汇编器在简明性上甚至优于DEC的 它对表达式求值并得到对应的比特流【二进制源代码】。没有库、没有装载器或者没有链接器 程序的全部源文件提交给汇编器 而其输出文件(the output file)有一个固定名字是可以直接执行的 这个名字 a.out 道出了一点Unix渊源 它是汇编器的输出。甚至在系统有了链接器以及有了显式指定另一个名字的方式之后 它仍被保存作为编译器的默认可执行文件(名) 。 Unix在PDP-7上首次运行后不久 1969年度Doug McIlroy创造了这一新系统的第一个高级语言 一个McClure的TMG实

7、现McClure 65。TMG是一种自顶而下 递归降解(top-down, recursive-descent)风格的编写编译器 更一般地 TransMoGrifiers 的语言 它将上下文无关的语法表示法与经过(式程序)元素相结合。McIlroy以及Bob Morris使用TMG为Multics编写了早期的PL/I编译器。 受McIlroy重造TMG事迹的刺激 Thmopson认为Unix(当时可能还没有取这个名字)需要一种系统编程语言。经过用Fortran的短暂而受阻的尝试后 他创造了一门他自己的语言 他称之为B。B可被视为没有类型的C。更准确地 它是塞进8K字节内存 经过Thompson

8、大脑过滤后的BCPL。它的名字最有可能表示为BCPL的缩写 尽管另一种理论认为它源自于BonThompson 69 Thompson在Multics的那些日子创造的一门不相关的语言。Bon进而二中其一 可能是以他妻子Bonnie的名字 或 根据它的操作手册中的一个百科全书般的引用 以一种宗教命名 该教仪式涉及咕隆咕隆的神奇咒语。【不知道是不是西藏的原始宗教 苯教 Bon 】【太难搞了】 起源 这些语言 BCPL是由Martin Richards于1960年度代中期 在访问麻省理工学院时设计的 在1970年度代早期它被用在几个有趣的工程中 其中包括位于牛津的OS6操作系统Stoy 72 以及施乐

9、公司PARC研究中心的创造性工程Alto的一局部Thacker 79。我们熟悉该语言 是因为Richards工作过的MIT CTSS系统Corbato 62被用于Multics开发。最初的BCPL编译器被Rudd Canaday以及贝尔实验室的一些人们移植到Multics以及GE-635 GECOS系统上Canaday 69 在贝尔实验室的Multics工程奄奄一息的阶段 它成为随后转入Unix的一帮人选择的语言。 BCPL、B以及C都归属于以Fortran以及Algol 60为代表的传统经过式家族。它们格外地倾向面向系统编程、小巧、描绘简洁 而且可被简单的编译器轻易地翻译。它们接近机器 它们

10、所引入的抽象以传统计算机所提供的详细数据类型以及操作为根底 它们依赖于例程库以输入输出和与操作系统的其它交互。尽管不太成功 它们还使用库程序指定其他有趣的控制构造 如协程以及经过关闭。同时 它们的抽象层次足够高 足够用心的话 能到达机器间的可移植性。 BCPL, B以及C在很多细节上存在语法差异 但总体上它们是相似的。程序由一系列的全局声明以及函数 经过 声明组成。BCPL中 经过可以嵌套 但不能引用定义在外包经过中的非静态对象。B以及C通过更强行的限制防止了它 根本就没有嵌套经过。每一种语言 除了早期的B版本 都认可(文件的)分别编译 并提供了从指定文件中包含(including)文本的方式

11、。 BCPL中的假设干语法以及词法机制较B以及C中的更优雅以及正式。例如 BCPL的经过以及数据声明拥有更一致的构造 并且它提供了一套更完好的循环构造。尽管BCPL程序名义上是由分界的字符流构成 聪明的规那么使得以每一行完毕的语句可以省略其分号。B以及C无视了这种便利 大多数语句以分号来完毕。刨除这些差异 BCPL的大多数语句以及操作符直接对应B以及C中的相应物。 BCPL以及B之间的一些构造化的差异源于介质存储的限制。比方 BCPL声明采用这样的形式 let P1 be command and P2 be command and P3 be command . 此处的由命令表示的程序文本包含

12、完好经过。这些子声明互相关联而且同时出现 所以名字P3在经过P1内可见。相似地 BCPL能在求得一个值的表达式里包含一组声明以及语句 例如 E1 : valof ( declarations ; commands ; resultis E2 ) 1 BCPL编译器在产生输出前 通过存储以及分析内存中该完好程序的解析过的表示 可以容易地处理此类构造。B编译器所受的存储限制决定了一种一次通过( one-pass)技术 由此尽可能快生成输出 而这一语法上的重新设计将这种可能带入到C。 BCPL中少量的、归结于技术问题的讨嫌方面 在B的设计中被有意地防止了。例如 BCPL使用一个“全局向量 globa

13、l vector 机制用于在分别编译的程序之间通信。在这种形式下、程序员要显式地将每一个外部可见的经过以及数据对象的名字 与全局向量中的一个数值偏移量关联起来 被编译的代码通过使用这些数值偏移量完成链接。B防止了这种费事 起初是将整个程序一次性地全部提交给编译器。B的后期实现C也如此 使用一个传统的链接器来解析分别编译的文件中的外部名字 而不是把指定偏移量的负担推给程序员。 从BCPL到B迁移的某些搞法 源于偏好而且存在争议。例如使用单个 字符代替: 表示赋值的决定。还有 B使用/*/括起注释 而BCPL使用/以注释掉直至行末的文本。这显然是PL/I的传统。(C 重新启用了BCPL的注释方式)

14、【C语言也启用了/注释】Fortran影响了声明的语法 B的声明语句先是一个auto或者static这种修饰符 后面是名字列表 C不仅遵循这种风格 还把类型关键字放在声明语句的最前面。 并非Richards的书Richards 79标准的BCPL与B的每一个不同都是有意的。我们起步于BCPL的一个早期版本Richards 67。例如 在我们于1960年度代开场学习它时 从 BCPL的switchon语句跳出的endcase并没有出现 因此B以及C中都使用的跳离switch语句的关键字break 只能讲是殊路同归而非有意的改变。 相对于创立B的经过中产生的众多语法变化 BCPL的核心语义内容其类

15、型构造以及表达式求值规那么保持不变。两者都是无类型的(typeless),或讲只有单一的数据类型 “字 word 或者“单元 cell 一个固定长度的位形式【只有机器字】。这些语言中 内存由这些cell线性数组构成 每一个单元【保存】的内容的含义由所用的操作决定。例如 操作符 使用机器的整数加法指令 将两个操作数简单相加 其它的算术运算也同样不管它们的操作数的实际含义【操作数就是一个01串 不管它是int、char还是位图数据】。由于内存是一个线性数组 就可以将单元的值解释为该数组的索引 而且BCPL为此提供了一个操作符。开场被拼作rv 后为! 而B使用一元*。因此 假如p是这样的单元 保存另

16、一个单元的索引(或者地址 或者指向它的指针) 那么*p表示被指向单元的内容 不管*p是作为表达式的值【右值】还是赋值语句的目的【左值】。 因为BCPL以及B中指针不过是内存数组的整数索引 对它们进展算术运算是有意义的 假如p是一个单元的地址 那么p 1是下一个单元的地址。这种约定是两种语言中数组的语义的根据。用BCPL编写 let V vec 10 或者用B auto V10; 效果是一样的 命名为V的单元被分配 然后再拔出另一组10个连续单元 而它们中第一个的内存索引被存放在V中。【这不是C的搞法】按照一般规那么 B中的表达式 *(V i)把V以及i相加 并指向V后第i个位置。BCPL以及B

17、都增加了十分的符号以简化这种对数组的访问 在B中的等价表达式是 Vi 在BCPL中是 V!i 这种引用数组的方法甚至在当时也不常见 后来C以略微不同的方式沿用了这一方式。 BCPL B或者C都没有在语言中对字符数据提供强烈的支持 它们都把字符串当作整型的向量数组处理 并通过几个约定补充数组的通用规那么。在BCPL以及B中 字符串字面值/文字表示由字符串的字符所初始化的一个静态区的地址 (这些字符)被塞入那些内存单元。BCPL中 第一个被塞的字节包含串所拥有的字符个数 而B 没有该计数而字符串终结于一个十分的字符 在B中被拼写为 *e 。作出这一改变的局部原因 是防止用一个8位或者9位槽 slot 保存串的计数会导致的字符串长度的限制 局部原因是维护该计数似乎 按我们的经历 不如使用一个终结符方便。 BCPL串中单个的字符通常被如此处理 字符串被展开为另一个数组 每单元一个字符 然后再次打包 B提供了相应的例程 但是人们更多地使用其他的库函数以访问以及交换一个串中的单个的字符。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 工程图纸

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁