版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、C语言发展简史 【起源】 C 语言最早的原型是 ALGOL 60 1963 年,剑桥大学将其发展成为 CPL(Combined Programing Language)。 1967 年,剑桥大学的 Matin Richards 对 CPL 语言进行了简化,产生了 BCPL 语言。 1970 年,美国贝尔实验室(Bell Labs)的 Ken Thompson 将 BCPL 进行了修改,并取名叫做 B 语言,意思是提取 CPL 的精华(Boiling CPL down to its basic good features)。并用 B 语言写了第一个 UNIX 系统。 1973 年,AT&T 贝尔
2、实验室的 Dennis Ritchie(D.M.RITCHIE) 在 BCPL 和 B 语言的基础上设计出了一种新的语言,取 BCPL 中的第二个字母为名,这就是大名鼎鼎的 C 语言。随后不久,UNIX 的内核(Kernel) 和应用程序全部用 C 语言改写,从此,C 语言成为 UNIX 环境下使用最广泛的主流编程语言。 【K&R C】 19778 年年,Deenniis RRitcchiee 和 Briian Kerrnigghann 合作作推出了了Thhe CC Prrogrrammmingg Laanguuagee的第第一版(按照惯惯例,经经典著作作一定有有简称,该该著作简简称为 K&R
3、R),书书末的参参考指南南 (RRefeerennce Mannuall) 一一节给出出了当时时 C 语言的的完整定定义,成成为那时时 C 语言事事实上的的标准,人人们称之之为 KK&R C。从从这一年年以后,CC 语言言被移植植到了各各种机型型上,并并受到了了广泛的的支持,使使 C 语言在在当时的的软件开开发中几几乎一统统天下。 【C89 (ANNSI C)】 随着 C 语语言在多多个领域域的推广广、应用用,一些些新的特特性不断断被各种种编译器器实现并并添加进进来。于于是,建建立一个个新的“无歧义义、于具具体平台台无关的的 C 语言定定义” 成为为越来越越重要的的事情。119833 年,AA
4、SC X3(ANSSI 属属下专门门负责信信息技术术标准化化的机构构,现已已改名为为 INNCITTS)成成立了一一个专门门的技术术委员会会 J111(JJ11 是委员员会编号号,全称称是 XX3J111),负负责起草草关于 C 语语言的标标准草案案。19989 年,草草案被 ANSSI 正正式通过过成为美美国国家家标准,被被称为 C899 标准准。 【C90 (ISSO CC)】 随后,TThe C PProggrammminng LLangguagge第第二版开开始出版版发行,书书中内容容根据 ANSSI CC(C889)进进行了更更新。119900 年,在在 ISSO/IIEC JTCC
5、1/SSC222/WGG14 (ISSO/IIEC 联合技技术第 I 委委员会第第 222 分委委员会第第 144 工作作组) 的努力力下,IISO 批准了了 ANNSI C 成成为国际际标准。于于是 IISO C(又又称为 C900) 诞诞生了。除除了标准准文档在在印刷编编排上的的某些细细节不同同外,IISO C(CC90) 和 ANSSI CC(C889) 在技术术上完全全一样。 【C95】 之后,IISO 在 119944、19996 年 分分别出版版了 CC90 的技术术勘误文文档,更更正了一一些印刷刷错误,并并在19995 年通过过了一份份 C990 的的技术补补充,对对 C990
6、进进行了微微小的扩扩充,经经过扩充充后的 ISOO C 被称为为 C995。 【C99】 19999 年年,ANNSI 和 IISO 又通过过了最新新版本的的 C 语言标标准和技技术勘误误文档,该该标准被被称为 C999 。这这基本上上是目前前关于 C 语语言的最最新、最最权威的的定义了了。 现现在,各各种 CC 编译译器都提提供了 C899(C990) 的完整整支持,对对 C999 还还只提供供了部分分支持,还还有一部部分提供供了对某某些 KK&R C 风风格的支支持。 /C语言的发发展史Denniis MM. RRitcchieeTjyy平坦软软件园Bell Labbs/LLuceent
7、TecchnoologgiessTjyy平坦软软件园Murraay HHilll, NNJ 0079774 UUSATTjy平平坦软件件园dmrm 概要C语言作为为最初的的Uniix操作作系统的的系统实实现语言言,在119700年早期期诞生。它它以无类类型的BB语言为为基础,形形成了一一个类型型结构;它在小小型机上上被发明明,作为为一个工工具,以以改进贫贫乏的编编程环境境。在今今天,它它已经成成为一种种占统治治地位的的语言。本本文研究究它的发发展。 Tjyy平坦软软件园简介版权提示:版权所所有19993计计算机协协会公司司。此电电子版由由作者授授权发表表。有关关出版事事宜,请请联系AACM或或
8、作者。本本文被用用于一九九九三年年四月,在在马萨诸诸塞州剑剑桥的第第二次编编程语言言历史会会议上的的演讲。 Tjyy平坦软软件园之后被收录录进会议议记录:编程语语言历史史,第二二版。TThommas J. Berrginn, JJr. andd Riichaard G. Gibbsonn, JJr. ACMM Prresss (NNew Yorrk) andd Adddisson-Wessleyy (RReaddingg, MMasss), 19996; ISBBN 00-2001-8895002-11. 本文是关于于C程序序设计语语言的发发展、它它所受到到的影响响以及它它诞生的的条件。为为简
9、洁起起见,我我略过了了对C本本身完整整的描述述、它的的起源BBJoohnsson 73及更上上一代BBCPLLRiichaardss 799,相相反集中中关注每每一种语语言的典典型特性性,以及及他们如如何发展展变化。 Tjyy平坦软软件园C在1966919773年间间与Unnix操操作系统统同时诞诞生;最最富创造造性的时时期是119722年。另另一次大大的变化化发生在在19777到119799年间,当当Uniix系统统的可移移植性得得到证明明时。在在后一段段时期的的中间,这这个语言言的第一一个被广广为传播播的描述述出现了了:C程程序设计计语言,常常常被称称为白皮皮书或KK&RKerrniggh
10、ann 788。最最后,在在19880年代代中期,它它被ANNSI X3JJ11委委员会正正式标准准化,作作了进一一步修改改。直到到19880年代代早期,尽尽管编译译器已在在多种机机器结构构及操作作系统上上出现,这这个语言言几乎与与Uniix特别别密切关关联;更更近一些些,它的的使用传传播得更更广,并并且在今今天它几几乎是计计算机行行业被使使用最多多的语言言。 TTjy平平坦软件件园历史:环境境贝尔电话实实验室的的计算机机系统研研究在119600代年晚晚期是乱乱糟糟的的Riitchhie 78 RRitcchiee 844。贝贝尔电话话实验室室公司正正从他和和麻省理理工学院院、通用用电气公公司
11、的合合作项目目MullticcsOOrgaanicck 778撤撤离。到到19669年,贝贝尔实验验室管理理层和研研究人员员认为,MMultticss项目不不能按期期完成并并且代价价高昂。在在GE-6455 Muultiics机机器被撤撤走之前前,Keen TThommpsoon领导导一个非非正式小小组,开开始一些些其它的的研究。 Tjyy平坦软软件园Thomppsonn希望按按自己的的设计,使使用一切切有效的的方式,创创造一个个适当的的计算环环境。他他的计划划,回想想起来是是清晰的的。组合合Mullticcs中的的许多创创新特征征,包括括一个作作为控制制场所的的进程的的清晰概概念、一一个树结
12、结构文件件系统、一一个作为为用户级级程序的的命令解解释器、文文本文件件的简单单表示和和访问设设备的通通用化。他他们排除除其余特特性,比比如对内内存和文文件的统统一访问问。开始始,他与与我们其其余人推推迟了MMultticss中的另另一个先先锋性(但但非原创创)特征征,即只只使用高高级语言言来编写写。我对对Mullticcs实现现所用的的语言PPL/II,并无无兴趣,但但我们还还使用其其他语言言,包括括BCPPL,我我们对于于不能利利用汇编编之上的的高级语语言进行行编程的的优点,比比如容易易编写、易易于理解解,感到到遗憾。当当时我们们并未特特别注重重可移植植性;到到后来才才有了这这方面的的兴趣。
13、 Tjyy平坦软软件园Thomppsonn面临的的是那个个时代古古怪和难难缠的硬硬件:DDEC PDPP-7,他他在19968年年开始使使用时,只只有8KK容量的的16位位内存,并并且没有有可用的的软件。当当时他希希望使用用高级语语言,但但还是用用PDPP-7汇汇编编写写了最初初的Unnix系系统。开开始,他他并未在在PDPP-7上上编码,相相反使用用一套GGE-6635机机器上,用用于GEEMAPP汇编器器的宏。一一个后期期处理器器生成PPDP-7可读读的纸带带。 TTjy平平坦软件件园这些纸带从从GE机机器传送送到PDDP-77进行测测试,直直到一个个原始的的Uniix内核核、一个个编辑器
14、器、一个个汇编器器、一个个简单的的sheell(命命令解析析器),和和其它工工具(像像Uniix rrm, catt, ccp命令令)被完完成。此此后,这这个操作作系统可可以自我我支撑:可以编编写、测测试程序序勿需借借助纸带带,并且且程序开开发可以以在PDDP-77上继续续进行。 Tjyy平坦软软件园Thomppsonn的PDDP-77汇编器器在简明明性上甚甚至优于于DECC的;它它对表达达式求值值并得到到对应的的数据位位。没有有库、装装载器或或链接器器:程序序的全部部源文件件被送给给汇编器器,输出出文件有一一个固定定名字产生生后被直直接执行行(这个个名字,aa.ouut,解解释了一一点Unn
15、ix的的渊源;它是汇汇编器的的输出。甚甚至在系系统有了了链接器器和显式式指定另另一个名名字的方方式之后后,它仍仍被保留留作为编编译的默默认可执执行文件件)。 Tjyy平坦软软件园在Unixx首次在在PDPP-7运运行后不不久,DDougg MccIlrroy在在19669年创创造了新新系统的的第一个个新语言言:一个个McCClurre的TTMGMcCClurre 665实实现。TTMG是是一种编编写编译译器(更更普通来来说,TTrannsMooGriifieers)的的语言,通通过在一一个混合合过程元元素,上上下文无无关的语语法标记记的自顶顶而下,递递归降解解的风格格。MccIlrroy和和B
16、obb Moorriis使用用TMGG为Muultiics编编写了早早期的PPL/II编译器器。 TTjy平平坦软件件园为了挑战MMcIllroyy重新生生成TMMG的技技巧,TThmoopsoon决定定Uniix当时可可能还没没有取这这个名字字需要要一种系系统编程程语言。在在很快用用Forrtraan尝试试一番后后,相反反,他创创造了一一种他自自己的语语言,他他命名为为B。BB可以认认为是没没有类型型的C。更更准确,它它是被挤挤进了88K字节节内存,经经过Thhomppsonn大脑过过滤的BBCPLL。它的的名字最最有可能能表示BBCPLL的缩写写,尽管管另一种种理论认认为它继继承自BBon
17、Thoompsson 69,一个个Thoompsson在在Mullticcs的那那些日子子创造的的不相关关的语言言。Boon可能能是以他他妻子BBonnnie的的名字,或或者(根根据它的的手册中中的一个个enccycllopeediaa引用)以以一种具具有咕隆隆咕隆发发音的神神奇仪式式的宗教教命名的的。 TTjy平平坦软件件园起源:语言言BCPL由由Marrtinn Riichaardss于19960年年代中期期在访问问麻省理理工学院院时设计计,在119700年代早早期被用用在几个个有趣的的项目中中,其中中包括牛牛津大学学的OSS6操作作系统Stooy 772,和和施乐公公司PAARC研研究中
18、心心创造性性的Allto上上的部分分工作Thaackeer 779。因因为Riichaardss工作过过的麻省省理工学学院的CCTSSS系统Corrbatto 662被被用于MMultticss开发,我我们也熟熟悉该语语言。最最初的BBCPLL编译器器被Ruudd Cannadaay和贝贝尔实验验室的一一些人们们迁移到到Mullticcs和GGE-6635 GECCOS系系统CCanaadayy 699;在在Mullticcs的生生命在贝贝尔实验验室的最最后痛苦苦挣扎中中,它很很快成了了那些以以后参与与Uniix的人人们选择择的语言言。 TTjy平平坦软件件园BCPL, B和和C全都都严格符符
19、合以FForttrann和Allgoll 600代表的的传统过过程类型型语言。它它们都面面向系统统编程、小小、定义义简洁,以以及可被被简单编编译器翻翻译。它它们接近近机器,它它们引入入的抽象象以传统统计算机机提供的的具体数数据类型型和操作作为基础础,它们们依赖于于输入输输出库例例程,与与操作系系统的其其它交互互。尽管管并未成成功,它它们还使使用库程程序指定定其他有有趣的控控制结构构,如协协程和过过程关闭闭。同时时,它们们的抽象象层次足足够高,足足够用心心的话,能能达到机机器间的的可移植植性。 Tjyy平坦软软件园BCPL, B和和C在语语法上差差异众多多,粗略略地说,它它们是相相似的。程程序由
20、全全局声明明和函数数(过程程)声明明组成。BBCPLL中的过过程能够够嵌套,但但不能引引用包含含过程中中的非静静态对象象。B和和C避免免了这个个限制,通通过强加加一个更更严格限限制:完完全没有有嵌套过过程。每每一种语语言(除除了早期期版本BB)都认认可分离离编译,以以及提供供了包含含指定文文件文本本的方式式。 TTjy平平坦软件件园BCPL中中的几个个语法和和词法机机制是优优雅和常常见的,甚甚于B和和C中的的那些。例例如,BBCPLL的过程程和数据据声明有有更一致致的结构构,并且且它提供供了一套套更完整整的循环环构造。尽尽管BCCPL程程序在概概念上是是由未被被间隔的的字符流流,聪明明的规则则
21、允许语语句后的的行分界界处的大大多数分分号被忽忽略。BB和C忽忽略了这这种便利利,并以以分号来来结束大大多数语语句。不不管这些些差异,BBCPLL的大多多数语句句和操作作符直接接对应BB和C中中的相应应语句和和操作符符。 TTjy平平坦软件件园BCPL和和B之间间的一些些结构化化的差异异源于介介质存储储的限制制。比如如,BCCPL声声明采用用这样的的形式 Tjyy平坦软软件园 llet P1 be commmannd aand P2 be commmannd aand P3 be commmannd .此处的的命令表表示的程程序文本本包含完完整过程程。关联联的子声声明同时时出现,所所以名字字P
22、3在在guoocheengPP1内可可见。相相似地,BBCPLL能在一一个求得得一个值值的表达达式里包包含一组组声明和和语句,例例如 TTjy平平坦软件件园 EE1 := vvaloof ( deeclaarattionns ; coommaandss ; ressulttis E2 ) + 1BBCPLL编译器器可以容容易地处处理此类类构造,在在产生输输出前,通通过存储储和分析析内存中中一个完完整程序序解析过过的表示示。B编编译器的的存储限限制要求求一个一一步技术术,通过过它尽可可能快生生成输出出,语法法上的重重新设计计,令这这种可能能迈进了了C。 Tjyy平坦软软件园BCPL中中一些不不令
23、人满满意的地地方归因因于它的的技术问问题,在在B的设设计中它它们被有有意识的的避免了了。例如如,BCCPL使使用一个个“全局向向量”(gllobaal vvecttor)机机制以在在分离编编译的程程序间通通信。在在这种模模式中,程程序员使使用一个个全局向向量的数数值偏移移量,显显式关联联每个外外部可见见过程和和数据对对象的名名字。链链接使用用这些数数值偏移移量,在在被编译译过的代代码上完完成。BB起初坚坚持,整整个程序序一次性性全部传传递给编编译器,来来规避这这个麻烦烦。B的的后期实实现,和和C的全全部实现现,使用用一个传传统的链链接器,来来解决出出现在分分离编译译文件中中的外部部名字,而而不
24、是把把指定偏偏移量的的负担推推给程序序员。 Tjyy平坦软软件园BCPL到到B的转转换中引引入的其其它变化化,大概概是因为为风格的的缘故,一一些仍是是有争议议的,例例如赋值值使用单单个字符符=代替替:=。类类似地,BB使用/*/来括起起注释,而而B使用用/注注释直至至行末的的文本。这这显然是是从PLL/I继继承来的的。(CC+重重新启用用了BCCPL的的注释惯惯例。) Forrtraan影响响了声明明的语法法:B的的声明以以一个aautoo, sstattic这这样的类类型指定定符开始始,跟着着一列名名字,CC不仅遵遵循这种种风格,还还把它的的类型关关键字,加加入这种种声明的的开始处处。 TT
25、jy平平坦软件件园在Richhardds的书书中文档档化的BBCPLL与B之之间的差差别,并并非都是是经过深深思熟虑虑的;我我们是从从一个BBCPLLRiichaardss 799的早早期版本本开始工工作的。例例如,用用于跳离离swiitchhon语语句的eendccasee在我们们19660年代代开始学学习该语语言时,并并没有出出现,所所以B和和C中重重复出现现的,用用于跳离离swiitchh语句的的关键字字breeak,乃乃是一种种背离的的发展,而而不是清清醒的改改变。 Tjyy平坦软软件园对比B产生生过程中中发生的的普遍的的语法变变化,BBCPLL的核心心语义内内容类型结结构和表表达式求
26、求值保持不不变。它它们两种种语言都都是无类类型的,或或更恰当当地说有有一种单单一的数数据类型型,“字”(woord)或或“单元”(ceell),一一个固定定长度的的位模式式。这些些语言中中的内存存由此类类单元的的线形数数组组成成,每一一个单元元的内容容的含义义与应用用的运算算相关。例例如,求求和运算算符使用用机器的的整数加加法指令令,简单单相加其其运算对对象,其其它算术术运算同同样不清清楚它们们运算对对象的含含义。因因为内存存是一个个线形数数组,只只可能解解析单元元的值为为该数组组的索引引,并且且BCPPL为这这个目的的提供一一个运算算符。在在最初的的语言中中,它被被拼写为为rv,后后来为!,
27、但是是B使用用一元*。因此此,如果果p是单单元,包包含另一一个单元元的索引引(其地地址,或或指向的的指针),*p引用用被指向向单元的的内容,作作为表达达式的值值或赋值值对象。 Tjyy平坦软软件园因为指针在在BCPPL和BB中只不不过是整整型内存存数组的的索引,对对它们进进行算术术运算是是有意义义的:如如果p是是一个单单元的地地址,那那么p+1是下下一个单单元的地地址。这这种约定定是两种种语言中中数组语语义的基基础。在在BCPPL中,一一个人这这样写 Tjyy平坦软软件园 llet V = veec 110或在在B中, Tjyy平坦软软件园 aautoo V10;效果果是一样样的:分分配了一一
28、个名字字为V的的单元,然然后保留留另一组组10个个连续单单元,它它们中第第一个的的内村索索引,被被存放在在V中。按按照一般般的规则则,在BB中的表表达式 Tjyy平坦软软件园 *(V+i)把把V和ii相加,并并指向VV后第ii个位置置。BCCPL和和B都增增加了特特别的符符号,使使这种对对数组的的访问更更简洁;在B中中的等价价表达式式是 TTjy平平坦软件件园 VVi在BCCPL中中是 TTjy平平坦软件件园 VV!i这这种引用用数组的的方法甚甚至在当当时仍是是不常见见的;CC后来同同化它为为一种更更不常规规的方式式。 TTjy平平坦软件件园BCPL,BB或C都都没有强强烈支持持字符数数据;每
29、每一个都都把字符符串当作作整型数数组,并并通过一一些惯例例提供了了一些一一般规则则。字符符串字面面值在BBCPLL和B中中表示一一个使用用串内字字符初始始化的静静态区的的地址,被被包装成成单元。在在BCPPL中,第第一个被被包装的的单元包包含串所所拥有的的字符个个数;在在B中,没没有此计计数,字字符串以以一个特特别的字字符终结结,在BB中杯拼拼写为“*e”。这个个改变部部分是为为了避免免把计数数值放在在一个88位或99位槽(sslott)产生生的串长长度限制制,部分分是因为为维护这这个计数数,从我我们的经经验看来来,不如如使用一一个终结结符方便便。 TTjy平平坦软件件园在BCPLL,串中中每
30、个字字符的使使用,是是通过被被展开为为另一个个数组,一一个字符符对应一一个单元元,然后后进行再再次包装装;B提提供了对对应的例例程,但但人们更更多地使使用,另另外的访访问或替替换一个个串内字字符的库库函数。 Tjyy平坦软软件园更多历史在TMG版版本B工工作后,TThommpsoon利用用B重写写了B(编编译器)(一一个boootsstraappiing步步骤)。在在开发中中,他不不断与内内存限制制作斗争争:每次次语言版版本使编编译器膨膨胀令内内存几乎乎不够使使用,但但每次重重写利用用语言特特征的优优点,减减少了它它的尺寸寸。例如如,B引引入通用用赋值运运算符,使使用x=+y来来把y加加入x。
31、这这个符号号经过MMcIllroyy引自AAlgool 668WWijnngaaardeen 775,他他将它合合并到他他实现的的一个TTMG版版本。(在在B和早早期C,该该运算符符被拼作作=+而而不是+=;这这个由BB的词法法分析的的第一种种形式的的迷惑捷捷径导致致的错误误,在119677年被修修复。) Tjyy平坦软软件园Thomppsonn通过发发明自增增+和和自减-运算算符,走走出了更更深远的的一步;它们的的前缀或或后缀位位置决定定变更是是发生在在计算运运算对象象值之前前或之后后。它们们没有出出现在BB的最早早版本中中,而是是随后才才出现的的。人们们经常猜猜测,它它们被创创造是为为了使
32、用用,C和和Uniix在其其上首次次流行的的DECC PDDP-111提供供的自增增和自减减地址模模式。这这在历史史上来说说是不可可能的,因因为B被被发明的的时候还还没有PPDP-11。PPDP-7有一一些“自增”内存单单元,使使用这种种特性,一一个间接接内存引引用通过过它们来来自增单单元。这这些特征征可能提提示Thhomppsonn创造了了那些自自增运算算符;他他把前缀缀和后缀缀一般化化。甚至至,自增增单元没没有被直直接用于于实现这这些运算算符,并并且这种种创新一一个更强强烈的动动机可能能是,他他发觉+x的的翻译在在尺寸上上小于xx=x+1。 Tjyy平坦软软件园PDP-77上的BB编译器器
33、不产生生机器指指令,而而是一个个由编译译器输出出组成代代码段地地址序列列,执行行基本运运算的解解释模式式的thhreaadedd代码Belll 772。这这些操作作特别别对B典型型地运行行在一个个简单堆堆栈机器器上。 Tjyy平坦软软件园在PDP-7的UUnixx系统上上,除了了B本身身只有几几个东西西是B写写的,因因为这个个机器太太小和太太慢,除除了试验验而不能能做更多多事情;完全用用B重写写操作系系统和其其它应用用程序,是是看起来来不可行行的代价价高昂的的动作。TThommpsoon在某某些地方方,通过过提供一一个利用用换页解解释器代代码和数数据,允允许解释释超过88K字节节的程序序的“虚
34、拟BB”编译器器,来释释放地址址空间,但但它对通通用程序序来说太太慢以致致不实用用。尽管管如此,一一些用BB写的工工具还是是出现了了,包括括一个早早期版本本的,UUnixx用户熟熟悉的可可变精度度计算器器dcMcIIlrooy 779。我我做的最最有雄心心壮志的的工作,是是一个把把B翻译译为GEE-6335机器器指令而而非thhreaadedd 代码码的真正正的交叉叉编译器器。它是是一个精精巧的绝绝技:一一个用本本身语言言写的,生生成在一一个,在在有4kk字长用用户地址址空间的的18位位机器上上运行的的36位位大型机机代码,完完全的BB编译器器。这个个项目能能实现,仅仅仅是因因为B的的简单性性
35、和它的的运行时时系统。 Tjyy平坦软软件园尽管我们抱抱有关于于实现一一个那时时,像FForttrann, PPL/II或Allgoll 688的主要要语言的的偶然想想法。这这样的项项目对我我们的显显得绝望望的大:需要更更简单和和小的工工具。所所有这些些语言都都影响我我们的工工作,但但是凭我我们自己己之力来来做这些些事情则则更有趣趣。 TTjy平平坦软件件园到19700年时,我我们看起起来能在在Uniix项目目上,获获得一个个新的DDEC PDPP-111。处理理器是DDEC递递交的第第一批产产品,三三个月后后,磁盘盘才到达达。通过过thrreadded技技巧,使使B程序序在其上上运行只只需要
36、为为运算符符重写代代码段,和和一个我我用B写写的简单单的汇编编器。很很快,ddc成了了在其它它操作系系统之前前,第一一个在我我们的PPDP-11上上被测试试的有趣趣的程序序。几乎乎非常快快,但仍仍需等待待磁盘,TThommpsoon用PPDP-11汇汇编语言言,重写写了Unnix内内核和一一些基本本命令。最最早的PPDP-11上上的Unnix把把机器上上24KK内存中中的122K给操操作系统统,一个个很小的的空间给给用户程程序,其其余的作作为RAAM磁盘盘。这一一版本仅仅是用于于测试,而而不是实实际的工工作;这这个机器器通过枚枚举关闭闭的,kknigght的的不同尺尺寸象棋棋板的路路程,来来标
37、记时时间。在在磁盘到到达后,我我们把汇汇编语言言转换为为PDPP-111上的方方言,和和移植一一些B程程序,很很快移植植到它上上面去。 Tjyy平坦软软件园到19711年时,我我们的微微型计算算机中心心开始有有了用户户。我们们都希望望更容易易编写有有趣的软软件。使使用汇编编显得沉沉闷,BB不管它它的性能能问题,已已经有了了一个小小的包含含有用服服务例程程的库,并并且被用用于越来来越多的的新程序序。这段段时期的的最著名名的成果果,是SStevve JJohnnsonn的yaacc分分析生成器器Joohnsson 79aa的第第一个版版本。 Tjyy平坦软软件园B的问题我们第一次次使用BBCPLL
38、然后是是B的机机器,是是按字寻寻址的,这这些语言言的单一一数据类类型,“单元”,能恰恰当与硬硬件机器器字互相相换算。PPDP-11的的出现暴暴露了BB的语义义模型的的一些不不足。首首先,它它从BCCPL继继承的几几乎未作作改变的的字符处处理机制制是笨拙拙的:使使用库方方法把包包装的字字符串展展开到单单个的单单元,然然后再次次包装,或或者访问问或替换换单个字字符,在在一个面面向字节节的机器器上,开开始变得得笨拙,甚甚至愚蠢蠢。 TTjy平平坦软件件园其次,尽管管最初的的PDPP-111没有提提供浮点点算术运运算,制制造商承承诺将很很快提供供。浮点点运算通通过定义义特别的的运算符符,被添添加到我我
39、们的MMultticss和GCCOS的的B编译译器,但但是这种种机制仅仅在相应应的机器器上才可可能,单单个字长长足够包包含一个个浮点数数;这在在16位位PDPP-111上是不不成立的的。 TTjy平平坦软件件园最后,B和和BCPPL模型型在处理理指针时时,暗中中会做得得更多:语言规规则,通通过定义义一个指指针作为为字数组组的索引引,强迫迫指针被被表示为为字索引引。每个个指针引引用生成成一个运运行时,从从指针到到硬件要要求的字字节地址址的度量量转换。 Tjyy平坦软软件园因为这些理理由,看看起来需需要一个个类型模模式来处处理字符符和字节节寻址,以以及为即即将到来来的浮点点硬件作作准备。其其它问题
40、题,特别别是类型型安全性性和接口口检查,看看起来并并没有变变得像以以后那样样重要。 Tjyy平坦软软件园除了语言本本身的问问题,BB编译器器的thhreaadedd代码技技术得到到的程序序,比他他们对应应的汇编编语言版版本慢很很多,以以至我们们对用BB纪录操操作系统统或它的的中心工工具的可可能性打打折扣。 Tjyy平坦软软件园到19711年时,我我开始通通过添加加一个字字符类型型,并重重写它的的编译器器以生成成PDPP-111机器指指令而非非thrreadded代代码,来来扩展BB语言。因因此从BB到C的的转换,与与创造一一个同汇汇编语言言竞争,能能产生足足够快和和小的程程序的编编译器,是是同
41、时进进行的。我我称这个个轻微扩扩展的语语言为NNB,表表示“新B”(neew BB)。 Tjyy平坦软软件园C萌芽NB只存在在了很短短时间,以以至没有有编写一一个它的的完整描描述。它它提供类类型innt和ccharr,它们们的数组组,指向向它们的的指针,用用典型风风格声明明如下 Tjyy平坦软软件园 iint i, j; chaar cc, dd; iint iarrrayy100; intt ippoinnt; ccharr caarraay110; chhar cpoointt;数组的的语义与与在B和和BCPPL中保保持一样样:iaarraay和ccarrray的的声明产产生的单单元,被被
42、动态初初始化为为分别指指向十个个整数和和字符序序列中的的第一个个的值。iipoiinteer和ccpoiinteer的声声明省略略了尺寸寸,以表表明没有有存储被被自动分分配。在在过程内内部,语语言对指指针的解解释与数数组变量量是一样样的:一一个指针针声明产产生一个个单元与与数组声声明的区区别仅在在,程序序员被期期望给它它赋值,而而不是让让编译器器分配空空间和初初始化单单元。 Tjyy平坦软软件园值存储在数数组的单单元中,指指针是按按字节计计算的,对对应存储储区的机机器地址址。因此此通过指指针间接接引用,不不意味着着比按比比例缩放放指针从从字到字字节的偏偏移,有有更多运运行时开开销。另另一方面面,对应应数组取取下标的的机器代代码和指指针算术术依赖于于数组和和指针的的类型:计算iiarrrayi或或ipoointter+i表示示按比例例缩放加加数i与与所指向向对象的的尺寸。 Tjyy平坦软软件园这些语义表表示一个个来自BB的容易易转换,我我在它们们上面实实验了几几个月。当当我尝试试扩展类类型符号号,特别别是添加加结构化化(纪录录)类型型时,问问题变得得明显。结结构看起起来,应应该以一一种直接接的方式式影射到到机器的的内存,但但一个结结构包含含一个数数组,没没有合适适的地方方隐藏包包含数组组基地址址的指针针,也没没有方便便的方式式安排被被初始化化的对
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年农业项目居间服务合同2篇
- 二零二五年度范文设备租购服务合同2篇
- 二零二五年度集团公司内部子公司间借款合同范本3篇
- 二零二五版花岗石石材行业标准制定与实施合同3篇
- 二零二五年高空玻璃安装与玻璃清洁保养合同3篇
- 二零二五版公司独立董事薪酬及激励合同2篇
- 建筑工地2025年度水电暖供应与安装承包合同2篇
- 基于2025年度市场分析的营销推广合同标的修订3篇
- 二零二五版智能仓储物流设施施工合同协议3篇
- 二零二五年度花卉新品种研发与购销合同3篇
- 《无人机法律法规知识》课件-第1章 民用航空法概述
- 部编人教版六年级下册语文1-6单元作文课件
- NB/T 11434.5-2023煤矿膏体充填第5部分:胶凝材料技术要求
- 2020-2024年安徽省初中学业水平考试中考物理试卷(5年真题+答案解析)
- 手术器械与敷料的传递
- 提高护士手卫生执行率PDCA案例汇报课件(32张)
- 日本人的色彩意识与自然观
- 校园网络系统的设计规划任务书
- 部编版5年级语文下册第五单元学历案
- 建造师建设工程项目管理二局培训精简版课件
- 电工(三级)理论知识考核要素细目表
评论
0/150
提交评论