版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、C語言發(fā)展簡(jiǎn)史 【起源】 C 語言最早的原型是 ALGOL 60 1963 年,劍橋大學(xué)將其發(fā)展成為 CPL(Combined Programing Language)。 1967 年,劍橋大學(xué)的 Matin Richards 對(duì) CPL 語言進(jìn)行了簡(jiǎn)化,產(chǎn)生了 BCPL 語言。 1970 年,美國貝爾實(shí)驗(yàn)室(Bell Labs)的 Ken Thompson 將 BCPL 進(jìn)行了修改,并取名叫做 B 語言,意思是提取 CPL 的精華(Boiling CPL down to its basic good features)。并用 B 語言寫了第一個(gè) UNIX 系統(tǒng)。 1973 年,AT&T 貝爾
2、實(shí)驗(yàn)室的 Dennis Ritchie(D.M.RITCHIE) 在 BCPL 和 B 語言的基礎(chǔ)上設(shè)計(jì)出了一種新的語言,取 BCPL 中的第二個(gè)字母為名,這就是大名鼎鼎的 C 語言。隨后不久,UNIX 的內(nèi)核(Kernel) 和應(yīng)用程序全部用 C 語言改寫,從此,C 語言成為 UNIX 環(huán)境下使用最廣泛的主流編程語言。 【K&R C】 19778 年年,Deenniis RRitcchiee 和 Briian Kerrnigghann 合作作推出了了Thhe CC Prrogrrammmingg Laanguuagee的第第一版(按照慣慣例,經(jīng)經(jīng)典著作作一定有有簡(jiǎn)稱,該該著作簡(jiǎn)簡(jiǎn)稱為 K&R
3、R),書書末的參參考指南南 (RRefeerennce Mannuall) 一一節(jié)給出出了當(dāng)時(shí)時(shí) C 語言的的完整定定義,成成為那時(shí)時(shí) C 語言事事實(shí)上的的標(biāo)準(zhǔn),人人們稱之之為 KK&R C。從從這一年年以后,CC 語言言被移植植到了各各種機(jī)型型上,并并受到了了廣泛的的支持,使使 C 語言在在當(dāng)時(shí)的的軟件開開發(fā)中幾幾乎一統(tǒng)統(tǒng)天下。 【C89 (ANNSI C)】 隨著 C 語語言在多多個(gè)領(lǐng)域域的推廣廣、應(yīng)用用,一些些新的特特性不斷斷被各種種編譯器器實(shí)現(xiàn)并并添加進(jìn)進(jìn)來。于于是,建建立一個(gè)個(gè)新的“無歧義義、于具具體平臺(tái)臺(tái)無關(guān)的的 C 語言定定義” 成為為越來越越重要的的事情。119833 年,AA
4、SC X3(ANSSI 屬屬下專門門負(fù)責(zé)信信息技術(shù)術(shù)標(biāo)準(zhǔn)化化的機(jī)構(gòu)構(gòu),現(xiàn)已已改名為為 INNCITTS)成成立了一一個(gè)專門門的技術(shù)術(shù)委員會(huì)會(huì) J111(JJ11 是委員員會(huì)編號(hào)號(hào),全稱稱是 XX3J111),負(fù)負(fù)責(zé)起草草關(guān)于 C 語語言的標(biāo)標(biāo)準(zhǔn)草案案。19989 年,草草案被 ANSSI 正正式通過過成為美美國國家家標(biāo)準(zhǔn),被被稱為 C899 標(biāo)準(zhǔn)準(zhǔn)。 【C90 (ISSO CC)】 隨后,TThe C PProggrammminng LLangguagge第第二版開開始出版版發(fā)行,書書中內(nèi)容容根據(jù) ANSSI CC(C889)進(jìn)進(jìn)行了更更新。119900 年,在在 ISSO/IIEC JTCC
5、1/SSC222/WGG14 (ISSO/IIEC 聯(lián)合技技術(shù)第 I 委委員會(huì)第第 222 分委委員會(huì)第第 144 工作作組) 的努力力下,IISO 批準(zhǔn)了了 ANNSI C 成成為國際際標(biāo)準(zhǔn)。于于是 IISO C(又又稱為 C900) 誕誕生了。除除了標(biāo)準(zhǔn)準(zhǔn)文檔在在印刷編編排上的的某些細(xì)細(xì)節(jié)不同同外,IISO C(CC90) 和 ANSSI CC(C889) 在技術(shù)術(shù)上完全全一樣。 【C95】 之后,IISO 在 119944、19996 年 分分別出版版了 CC90 的技術(shù)術(shù)勘誤文文檔,更更正了一一些印刷刷錯(cuò)誤,并并在19995 年通過過了一份份 C990 的的技術(shù)補(bǔ)補(bǔ)充,對(duì)對(duì) C990
6、進(jìn)進(jìn)行了微微小的擴(kuò)擴(kuò)充,經(jīng)經(jīng)過擴(kuò)充充后的 ISOO C 被稱為為 C995。 【C99】 19999 年年,ANNSI 和 IISO 又通過過了最新新版本的的 C 語言標(biāo)標(biāo)準(zhǔn)和技技術(shù)勘誤誤文檔,該該標(biāo)準(zhǔn)被被稱為 C999 。這這基本上上是目前前關(guān)于 C 語語言的最最新、最最權(quán)威的的定義了了。 現(xiàn)現(xiàn)在,各各種 CC 編譯譯器都提提供了 C899(C990) 的完整整支持,對(duì)對(duì) C999 還還只提供供了部分分支持,還還有一部部分提供供了對(duì)某某些 KK&R C 風(fēng)風(fēng)格的支支持。 /C語言的發(fā)發(fā)展史Denniis MM. RRitcchieeTjyy平坦軟軟件園Bell Labbs/LLuceent
7、TecchnoologgiessTjyy平坦軟軟件園Murraay HHilll, NNJ 0079774 UUSATTjy平平坦軟件件園dmrm 概要C語言作為為最初的的Uniix操作作系統(tǒng)的的系統(tǒng)實(shí)實(shí)現(xiàn)語言言,在119700年早期期誕生。它它以無類類型的BB語言為為基礎(chǔ),形形成了一一個(gè)類型型結(jié)構(gòu);它在小小型機(jī)上上被發(fā)明明,作為為一個(gè)工工具,以以改進(jìn)貧貧乏的編編程環(huán)境境。在今今天,它它已經(jīng)成成為一種種占統(tǒng)治治地位的的語言。本本文研究究它的發(fā)發(fā)展。 Tjyy平坦軟軟件園簡(jiǎn)介版權(quán)提示:版權(quán)所所有19993計(jì)計(jì)算機(jī)協(xié)協(xié)會(huì)公司司。此電電子版由由作者授授權(quán)發(fā)表表。有關(guān)關(guān)出版事事宜,請(qǐng)請(qǐng)聯(lián)系A(chǔ)ACM或或
8、作者。本本文被用用于一九九九三年年四月,在在馬薩諸諸塞州劍劍橋的第第二次編編程語言言歷史會(huì)會(huì)議上的的演講。 Tjyy平坦軟軟件園之后被收錄錄進(jìn)會(huì)議議記錄:編程語語言歷史史,第二二版。TThommas J. Berrginn, JJr. andd Riichaard G. Gibbsonn, JJr. ACMM Prresss (NNew Yorrk) andd Adddisson-Wessleyy (RReaddingg, MMasss), 19996; ISBBN 00-2001-8895002-11. 本文是關(guān)于于C程序序設(shè)計(jì)語語言的發(fā)發(fā)展、它它所受到到的影響響以及它它誕生的的條件。為為簡(jiǎn)
9、潔起起見,我我略過了了對(duì)C本本身完整整的描述述、它的的起源BBJoohnsson 73及更上上一代BBCPLLRiichaardss 799,相相反集中中關(guān)注每每一種語語言的典典型特性性,以及及他們?nèi)缛绾伟l(fā)展展變化。 Tjyy平坦軟軟件園C在1966919773年間間與Unnix操操作系統(tǒng)統(tǒng)同時(shí)誕誕生;最最富創(chuàng)造造性的時(shí)時(shí)期是119722年。另另一次大大的變化化發(fā)生在在19777到119799年間,當(dāng)當(dāng)Uniix系統(tǒng)統(tǒng)的可移移植性得得到證明明時(shí)。在在后一段段時(shí)期的的中間,這這個(gè)語言言的第一一個(gè)被廣廣為傳播播的描述述出現(xiàn)了了:C程程序設(shè)計(jì)計(jì)語言,常常常被稱稱為白皮皮書或KK&RKerrniggh
10、ann 788。最最后,在在19880年代代中期,它它被ANNSI X3JJ11委委員會(huì)正正式標(biāo)準(zhǔn)準(zhǔn)化,作作了進(jìn)一一步修改改。直到到19880年代代早期,盡盡管編譯譯器已在在多種機(jī)機(jī)器結(jié)構(gòu)構(gòu)及操作作系統(tǒng)上上出現(xiàn),這這個(gè)語言言幾乎與與Uniix特別別密切關(guān)關(guān)聯(lián);更更近一些些,它的的使用傳傳播得更更廣,并并且在今今天它幾幾乎是計(jì)計(jì)算機(jī)行行業(yè)被使使用最多多的語言言。 TTjy平平坦軟件件園歷史:環(huán)境境貝爾電話實(shí)實(shí)驗(yàn)室的的計(jì)算機(jī)機(jī)系統(tǒng)研研究在119600代年晚晚期是亂亂糟糟的的Riitchhie 78 RRitcchiee 844。貝貝爾電話話實(shí)驗(yàn)室室公司正正從他和和麻省理理工學(xué)院院、通用用電氣公公司
11、的合合作項(xiàng)目目MullticcsOOrgaanicck 778撤撤離。到到19669年,貝貝爾實(shí)驗(yàn)驗(yàn)室管理理層和研研究人員員認(rèn)為,MMultticss項(xiàng)目不不能按期期完成并并且代價(jià)價(jià)高昂。在在GE-6455 Muultiics機(jī)機(jī)器被撤撤走之前前,Keen TThommpsoon領(lǐng)導(dǎo)導(dǎo)一個(gè)非非正式小小組,開開始一些些其它的的研究。 Tjyy平坦軟軟件園Thomppsonn希望按按自己的的設(shè)計(jì),使使用一切切有效的的方式,創(chuàng)創(chuàng)造一個(gè)個(gè)適當(dāng)?shù)牡挠?jì)算環(huán)環(huán)境。他他的計(jì)劃劃,回想想起來是是清晰的的。組合合Mullticcs中的的許多創(chuàng)創(chuàng)新特征征,包括括一個(gè)作作為控制制場(chǎng)所的的進(jìn)程的的清晰概概念、一一個(gè)樹結(jié)
12、結(jié)構(gòu)文件件系統(tǒng)、一一個(gè)作為為用戶級(jí)級(jí)程序的的命令解解釋器、文文本文件件的簡(jiǎn)單單表示和和訪問設(shè)設(shè)備的通通用化。他他們排除除其余特特性,比比如對(duì)內(nèi)內(nèi)存和文文件的統(tǒng)統(tǒng)一訪問問。開始始,他與與我們其其余人推推遲了MMultticss中的另另一個(gè)先先鋒性(但但非原創(chuàng)創(chuàng))特征征,即只只使用高高級(jí)語言言來編寫寫。我對(duì)對(duì)Mullticcs實(shí)現(xiàn)現(xiàn)所用的的語言PPL/II,并無無興趣,但但我們還還使用其其他語言言,包括括BCPPL,我我們對(duì)于于不能利利用匯編編之上的的高級(jí)語語言進(jìn)行行編程的的優(yōu)點(diǎn),比比如容易易編寫、易易于理解解,感到到遺憾。當(dāng)當(dāng)時(shí)我們們并未特特別注重重可移植植性;到到后來才才有了這這方面的的興趣。
13、 Tjyy平坦軟軟件園Thomppsonn面臨的的是那個(gè)個(gè)時(shí)代古古怪和難難纏的硬硬件:DDEC PDPP-7,他他在19968年年開始使使用時(shí),只只有8KK容量的的16位位內(nèi)存,并并且沒有有可用的的軟件。當(dāng)當(dāng)時(shí)他希希望使用用高級(jí)語語言,但但還是用用PDPP-7匯匯編編寫寫了最初初的Unnix系系統(tǒng)。開開始,他他并未在在PDPP-7上上編碼,相相反使用用一套GGE-6635機(jī)機(jī)器上,用用于GEEMAPP匯編器器的宏。一一個(gè)后期期處理器器生成PPDP-7可讀讀的紙帶帶。 TTjy平平坦軟件件園這些紙帶從從GE機(jī)機(jī)器傳送送到PDDP-77進(jìn)行測(cè)測(cè)試,直直到一個(gè)個(gè)原始的的Uniix內(nèi)核核、一個(gè)個(gè)編輯器
14、器、一個(gè)個(gè)匯編器器、一個(gè)個(gè)簡(jiǎn)單的的sheell(命命令解析析器),和和其它工工具(像像Uniix rrm, catt, ccp命令令)被完完成。此此后,這這個(gè)操作作系統(tǒng)可可以自我我支撐:可以編編寫、測(cè)測(cè)試程序序勿需借借助紙帶帶,并且且程序開開發(fā)可以以在PDDP-77上繼續(xù)續(xù)進(jìn)行。 Tjyy平坦軟軟件園Thomppsonn的PDDP-77匯編器器在簡(jiǎn)明明性上甚甚至優(yōu)于于DECC的;它它對(duì)表達(dá)達(dá)式求值值并得到到對(duì)應(yīng)的的數(shù)據(jù)位位。沒有有庫、裝裝載器或或鏈接器器:程序序的全部部源文件件被送給給匯編器器,輸出出文件有一一個(gè)固定定名字產(chǎn)生生后被直直接執(zhí)行行(這個(gè)個(gè)名字,aa.ouut,解解釋了一一點(diǎn)Unn
15、ix的的淵源;它是匯匯編器的的輸出。甚甚至在系系統(tǒng)有了了鏈接器器和顯式式指定另另一個(gè)名名字的方方式之后后,它仍仍被保留留作為編編譯的默默認(rèn)可執(zhí)執(zhí)行文件件)。 Tjyy平坦軟軟件園在Unixx首次在在PDPP-7運(yùn)運(yùn)行后不不久,DDougg MccIlrroy在在19669年創(chuàng)創(chuàng)造了新新系統(tǒng)的的第一個(gè)個(gè)新語言言:一個(gè)個(gè)McCClurre的TTMGMcCClurre 665實(shí)實(shí)現(xiàn)。TTMG是是一種編編寫編譯譯器(更更普通來來說,TTrannsMooGriifieers)的的語言,通通過在一一個(gè)混合合過程元元素,上上下文無無關(guān)的語語法標(biāo)記記的自頂頂而下,遞遞歸降解解的風(fēng)格格。MccIlrroy和和B
16、obb Moorriis使用用TMGG為Muultiics編編寫了早早期的PPL/II編譯器器。 TTjy平平坦軟件件園為了挑戰(zhàn)MMcIllroyy重新生生成TMMG的技技巧,TThmoopsoon決定定Uniix當(dāng)時(shí)可可能還沒沒有取這這個(gè)名字字需要要一種系系統(tǒng)編程程語言。在在很快用用Forrtraan嘗試試一番后后,相反反,他創(chuàng)創(chuàng)造了一一種他自自己的語語言,他他命名為為B。BB可以認(rèn)認(rèn)為是沒沒有類型型的C。更更準(zhǔn)確,它它是被擠擠進(jìn)了88K字節(jié)節(jié)內(nèi)存,經(jīng)經(jīng)過Thhomppsonn大腦過過濾的BBCPLL。它的的名字最最有可能能表示BBCPLL的縮寫寫,盡管管另一種種理論認(rèn)認(rèn)為它繼繼承自BBon
17、Thoompsson 69,一個(gè)個(gè)Thoompsson在在Mullticcs的那那些日子子創(chuàng)造的的不相關(guān)關(guān)的語言言。Boon可能能是以他他妻子BBonnnie的的名字,或或者(根根據(jù)它的的手冊(cè)中中的一個(gè)個(gè)enccycllopeediaa引用)以以一種具具有咕隆隆咕隆發(fā)發(fā)音的神神奇儀式式的宗教教命名的的。 TTjy平平坦軟件件園起源:語言言BCPL由由Marrtinn Riichaardss于19960年年代中期期在訪問問麻省理理工學(xué)院院時(shí)設(shè)計(jì)計(jì),在119700年代早早期被用用在幾個(gè)個(gè)有趣的的項(xiàng)目中中,其中中包括牛牛津大學(xué)學(xué)的OSS6操作作系統(tǒng)Stooy 772,和和施樂公公司PAARC研研究中
18、心心創(chuàng)造性性的Allto上上的部分分工作Thaackeer 779。因因?yàn)镽iichaardss工作過過的麻省省理工學(xué)學(xué)院的CCTSSS系統(tǒng)Corrbatto 662被被用于MMultticss開發(fā),我我們也熟熟悉該語語言。最最初的BBCPLL編譯器器被Ruudd Cannadaay和貝貝爾實(shí)驗(yàn)驗(yàn)室的一一些人們們遷移到到Mullticcs和GGE-6635 GECCOS系系統(tǒng)CCanaadayy 699;在在Mullticcs的生生命在貝貝爾實(shí)驗(yàn)驗(yàn)室的最最后痛苦苦掙扎中中,它很很快成了了那些以以后參與與Uniix的人人們選擇擇的語言言。 TTjy平平坦軟件件園BCPL, B和和C全都都嚴(yán)格符符
19、合以FForttrann和Allgoll 600代表的的傳統(tǒng)過過程類型型語言。它它們都面面向系統(tǒng)統(tǒng)編程、小小、定義義簡(jiǎn)潔,以以及可被被簡(jiǎn)單編編譯器翻翻譯。它它們接近近機(jī)器,它它們引入入的抽象象以傳統(tǒng)統(tǒng)計(jì)算機(jī)機(jī)提供的的具體數(shù)數(shù)據(jù)類型型和操作作為基礎(chǔ)礎(chǔ),它們們依賴于于輸入輸輸出庫例例程,與與操作系系統(tǒng)的其其它交互互。盡管管并未成成功,它它們還使使用庫程程序指定定其他有有趣的控控制結(jié)構(gòu)構(gòu),如協(xié)協(xié)程和過過程關(guān)閉閉。同時(shí)時(shí),它們們的抽象象層次足足夠高,足足夠用心心的話,能能達(dá)到機(jī)機(jī)器間的的可移植植性。 Tjyy平坦軟軟件園BCPL, B和和C在語語法上差差異眾多多,粗略略地說,它它們是相相似的。程程序由
20、全全局聲明明和函數(shù)數(shù)(過程程)聲明明組成。BBCPLL中的過過程能夠夠嵌套,但但不能引引用包含含過程中中的非靜靜態(tài)對(duì)象象。B和和C避免免了這個(gè)個(gè)限制,通通過強(qiáng)加加一個(gè)更更嚴(yán)格限限制:完完全沒有有嵌套過過程。每每一種語語言(除除了早期期版本BB)都認(rèn)認(rèn)可分離離編譯,以以及提供供了包含含指定文文件文本本的方式式。 TTjy平平坦軟件件園BCPL中中的幾個(gè)個(gè)語法和和詞法機(jī)機(jī)制是優(yōu)優(yōu)雅和常常見的,甚甚于B和和C中的的那些。例例如,BBCPLL的過程程和數(shù)據(jù)據(jù)聲明有有更一致致的結(jié)構(gòu)構(gòu),并且且它提供供了一套套更完整整的循環(huán)環(huán)構(gòu)造。盡盡管BCCPL程程序在概概念上是是由未被被間隔的的字符流流,聰明明的規(guī)則則
21、允許語語句后的的行分界界處的大大多數(shù)分分號(hào)被忽忽略。BB和C忽忽略了這這種便利利,并以以分號(hào)來來結(jié)束大大多數(shù)語語句。不不管這些些差異,BBCPLL的大多多數(shù)語句句和操作作符直接接對(duì)應(yīng)BB和C中中的相應(yīng)應(yīng)語句和和操作符符。 TTjy平平坦軟件件園BCPL和和B之間間的一些些結(jié)構(gòu)化化的差異異源于介介質(zhì)存儲(chǔ)儲(chǔ)的限制制。比如如,BCCPL聲聲明采用用這樣的的形式 Tjyy平坦軟軟件園 llet P1 be commmannd aand P2 be commmannd aand P3 be commmannd .此處的的命令表表示的程程序文本本包含完完整過程程。關(guān)聯(lián)聯(lián)的子聲聲明同時(shí)時(shí)出現(xiàn),所所以名字字P
22、3在在guoocheengPP1內(nèi)可可見。相相似地,BBCPLL能在一一個(gè)求得得一個(gè)值值的表達(dá)達(dá)式里包包含一組組聲明和和語句,例例如 TTjy平平坦軟件件園 EE1 := vvaloof ( deeclaarattionns ; coommaandss ; ressulttis E2 ) + 1BBCPLL編譯器器可以容容易地處處理此類類構(gòu)造,在在產(chǎn)生輸輸出前,通通過存儲(chǔ)儲(chǔ)和分析析內(nèi)存中中一個(gè)完完整程序序解析過過的表示示。B編編譯器的的存儲(chǔ)限限制要求求一個(gè)一一步技術(shù)術(shù),通過過它盡可可能快生生成輸出出,語法法上的重重新設(shè)計(jì)計(jì),令這這種可能能邁進(jìn)了了C。 Tjyy平坦軟軟件園BCPL中中一些不不令
23、人滿滿意的地地方歸因因于它的的技術(shù)問問題,在在B的設(shè)設(shè)計(jì)中它它們被有有意識(shí)的的避免了了。例如如,BCCPL使使用一個(gè)個(gè)“全局向向量”(gllobaal vvecttor)機(jī)機(jī)制以在在分離編編譯的程程序間通通信。在在這種模模式中,程程序員使使用一個(gè)個(gè)全局向向量的數(shù)數(shù)值偏移移量,顯顯式關(guān)聯(lián)聯(lián)每個(gè)外外部可見見過程和和數(shù)據(jù)對(duì)對(duì)象的名名字。鏈鏈接使用用這些數(shù)數(shù)值偏移移量,在在被編譯譯過的代代碼上完完成。BB起初堅(jiān)堅(jiān)持,整整個(gè)程序序一次性性全部傳傳遞給編編譯器,來來規(guī)避這這個(gè)麻煩煩。B的的后期實(shí)實(shí)現(xiàn),和和C的全全部實(shí)現(xiàn)現(xiàn),使用用一個(gè)傳傳統(tǒng)的鏈鏈接器,來來解決出出現(xiàn)在分分離編譯譯文件中中的外部部名字,而而不
24、是把把指定偏偏移量的的負(fù)擔(dān)推推給程序序員。 Tjyy平坦軟軟件園BCPL到到B的轉(zhuǎn)轉(zhuǎn)換中引引入的其其它變化化,大概概是因?yàn)闉轱L(fēng)格的的緣故,一一些仍是是有爭(zhēng)議議的,例例如賦值值使用單單個(gè)字符符=代替替:=。類類似地,BB使用/*/來括起起注釋,而而B使用用/注注釋直至至行末的的文本。這這顯然是是從PLL/I繼繼承來的的。(CC+重重新啟用用了BCCPL的的注釋慣慣例。) Forrtraan影響響了聲明明的語法法:B的的聲明以以一個(gè)aautoo, sstattic這這樣的類類型指定定符開始始,跟著著一列名名字,CC不僅遵遵循這種種風(fēng)格,還還把它的的類型關(guān)關(guān)鍵字,加加入這種種聲明的的開始處處。 TT
25、jy平平坦軟件件園在Richhardds的書書中文檔檔化的BBCPLL與B之之間的差差別,并并非都是是經(jīng)過深深思熟慮慮的;我我們是從從一個(gè)BBCPLLRiichaardss 799的早早期版本本開始工工作的。例例如,用用于跳離離swiitchhon語語句的eendccasee在我們們19660年代代開始學(xué)學(xué)習(xí)該語語言時(shí),并并沒有出出現(xiàn),所所以B和和C中重重復(fù)出現(xiàn)現(xiàn)的,用用于跳離離swiitchh語句的的關(guān)鍵字字breeak,乃乃是一種種背離的的發(fā)展,而而不是清清醒的改改變。 Tjyy平坦軟軟件園對(duì)比B產(chǎn)生生過程中中發(fā)生的的普遍的的語法變變化,BBCPLL的核心心語義內(nèi)內(nèi)容類型結(jié)結(jié)構(gòu)和表表達(dá)式求
26、求值保持不不變。它它們兩種種語言都都是無類類型的,或或更恰當(dāng)當(dāng)?shù)卣f有有一種單單一的數(shù)數(shù)據(jù)類型型,“字”(woord)或或“單元”(ceell),一一個(gè)固定定長(zhǎng)度的的位模式式。這些些語言中中的內(nèi)存存由此類類單元的的線形數(shù)數(shù)組組成成,每一一個(gè)單元元的內(nèi)容容的含義義與應(yīng)用用的運(yùn)算算相關(guān)。例例如,求求和運(yùn)算算符使用用機(jī)器的的整數(shù)加加法指令令,簡(jiǎn)單單相加其其運(yùn)算對(duì)對(duì)象,其其它算術(shù)術(shù)運(yùn)算同同樣不清清楚它們們運(yùn)算對(duì)對(duì)象的含含義。因因?yàn)閮?nèi)存存是一個(gè)個(gè)線形數(shù)數(shù)組,只只可能解解析單元元的值為為該數(shù)組組的索引引,并且且BCPPL為這這個(gè)目的的提供一一個(gè)運(yùn)算算符。在在最初的的語言中中,它被被拼寫為為rv,后后來為!,
27、但是是B使用用一元*。因此此,如果果p是單單元,包包含另一一個(gè)單元元的索引引(其地地址,或或指向的的指針),*p引用用被指向向單元的的內(nèi)容,作作為表達(dá)達(dá)式的值值或賦值值對(duì)象。 Tjyy平坦軟軟件園因?yàn)橹羔樤谠贐CPPL和BB中只不不過是整整型內(nèi)存存數(shù)組的的索引,對(duì)對(duì)它們進(jìn)進(jìn)行算術(shù)術(shù)運(yùn)算是是有意義義的:如如果p是是一個(gè)單單元的地地址,那那么p+1是下下一個(gè)單單元的地地址。這這種約定定是兩種種語言中中數(shù)組語語義的基基礎(chǔ)。在在BCPPL中,一一個(gè)人這這樣寫 Tjyy平坦軟軟件園 llet V = veec 110或在在B中, Tjyy平坦軟軟件園 aautoo V10;效果果是一樣樣的:分分配了一一
28、個(gè)名字字為V的的單元,然然后保留留另一組組10個(gè)個(gè)連續(xù)單單元,它它們中第第一個(gè)的的內(nèi)村索索引,被被存放在在V中。按按照一般般的規(guī)則則,在BB中的表表達(dá)式 Tjyy平坦軟軟件園 *(V+i)把把V和ii相加,并并指向VV后第ii個(gè)位置置。BCCPL和和B都增增加了特特別的符符號(hào),使使這種對(duì)對(duì)數(shù)組的的訪問更更簡(jiǎn)潔;在B中中的等價(jià)價(jià)表達(dá)式式是 TTjy平平坦軟件件園 VVi在BCCPL中中是 TTjy平平坦軟件件園 VV!i這這種引用用數(shù)組的的方法甚甚至在當(dāng)當(dāng)時(shí)仍是是不常見見的;CC后來同同化它為為一種更更不常規(guī)規(guī)的方式式。 TTjy平平坦軟件件園BCPL,BB或C都都沒有強(qiáng)強(qiáng)烈支持持字符數(shù)數(shù)據(jù);每
29、每一個(gè)都都把字符符串當(dāng)作作整型數(shù)數(shù)組,并并通過一一些慣例例提供了了一些一一般規(guī)則則。字符符串字面面值在BBCPLL和B中中表示一一個(gè)使用用串內(nèi)字字符初始始化的靜靜態(tài)區(qū)的的地址,被被包裝成成單元。在在BCPPL中,第第一個(gè)被被包裝的的單元包包含串所所擁有的的字符個(gè)個(gè)數(shù);在在B中,沒沒有此計(jì)計(jì)數(shù),字字符串以以一個(gè)特特別的字字符終結(jié)結(jié),在BB中杯拼拼寫為“*e”。這個(gè)個(gè)改變部部分是為為了避免免把計(jì)數(shù)數(shù)值放在在一個(gè)88位或99位槽(sslott)產(chǎn)生生的串長(zhǎng)長(zhǎng)度限制制,部分分是因?yàn)闉榫S護(hù)這這個(gè)計(jì)數(shù)數(shù),從我我們的經(jīng)經(jīng)驗(yàn)看來來,不如如使用一一個(gè)終結(jié)結(jié)符方便便。 TTjy平平坦軟件件園在BCPLL,串中中每
30、個(gè)字字符的使使用,是是通過被被展開為為另一個(gè)個(gè)數(shù)組,一一個(gè)字符符對(duì)應(yīng)一一個(gè)單元元,然后后進(jìn)行再再次包裝裝;B提提供了對(duì)對(duì)應(yīng)的例例程,但但人們更更多地使使用,另另外的訪訪問或替替換一個(gè)個(gè)串內(nèi)字字符的庫庫函數(shù)。 Tjyy平坦軟軟件園更多歷史在TMG版版本B工工作后,TThommpsoon利用用B重寫寫了B(編編譯器)(一一個(gè)boootsstraappiing步步驟)。在在開發(fā)中中,他不不斷與內(nèi)內(nèi)存限制制作斗爭(zhēng)爭(zhēng):每次次語言版版本使編編譯器膨膨脹令內(nèi)內(nèi)存幾乎乎不夠使使用,但但每次重重寫利用用語言特特征的優(yōu)優(yōu)點(diǎn),減減少了它它的尺寸寸。例如如,B引引入通用用賦值運(yùn)運(yùn)算符,使使用x=+y來來把y加加入x。
31、這這個(gè)符號(hào)號(hào)經(jīng)過MMcIllroyy引自AAlgool 668WWijnngaaardeen 775,他他將它合合并到他他實(shí)現(xiàn)的的一個(gè)TTMG版版本。(在在B和早早期C,該該運(yùn)算符符被拼作作=+而而不是+=;這這個(gè)由BB的詞法法分析的的第一種種形式的的迷惑捷捷徑導(dǎo)致致的錯(cuò)誤誤,在119677年被修修復(fù)。) Tjyy平坦軟軟件園Thomppsonn通過發(fā)發(fā)明自增增+和和自減-運(yùn)算算符,走走出了更更深遠(yuǎn)的的一步;它們的的前綴或或后綴位位置決定定變更是是發(fā)生在在計(jì)算運(yùn)運(yùn)算對(duì)象象值之前前或之后后。它們們沒有出出現(xiàn)在BB的最早早版本中中,而是是隨后才才出現(xiàn)的的。人們們經(jīng)常猜猜測(cè),它它們被創(chuàng)創(chuàng)造是為為了使
32、用用,C和和Uniix在其其上首次次流行的的DECC PDDP-111提供供的自增增和自減減地址模模式。這這在歷史史上來說說是不可可能的,因因?yàn)锽被被發(fā)明的的時(shí)候還還沒有PPDP-11。PPDP-7有一一些“自增”內(nèi)存單單元,使使用這種種特性,一一個(gè)間接接內(nèi)存引引用通過過它們來來自增單單元。這這些特征征可能提提示Thhomppsonn創(chuàng)造了了那些自自增運(yùn)算算符;他他把前綴綴和后綴綴一般化化。甚至至,自增增單元沒沒有被直直接用于于實(shí)現(xiàn)這這些運(yùn)算算符,并并且這種種創(chuàng)新一一個(gè)更強(qiáng)強(qiáng)烈的動(dòng)動(dòng)機(jī)可能能是,他他發(fā)覺+x的的翻譯在在尺寸上上小于xx=x+1。 Tjyy平坦軟軟件園PDP-77上的BB編譯器器
33、不產(chǎn)生生機(jī)器指指令,而而是一個(gè)個(gè)由編譯譯器輸出出組成代代碼段地地址序列列,執(zhí)行行基本運(yùn)運(yùn)算的解解釋模式式的thhreaadedd代碼Belll 772。這這些操作作特別別對(duì)B典型型地運(yùn)行行在一個(gè)個(gè)簡(jiǎn)單堆堆棧機(jī)器器上。 Tjyy平坦軟軟件園在PDP-7的UUnixx系統(tǒng)上上,除了了B本身身只有幾幾個(gè)東西西是B寫寫的,因因?yàn)檫@個(gè)個(gè)機(jī)器太太小和太太慢,除除了試驗(yàn)驗(yàn)而不能能做更多多事情;完全用用B重寫寫操作系系統(tǒng)和其其它應(yīng)用用程序,是是看起來來不可行行的代價(jià)價(jià)高昂的的動(dòng)作。TThommpsoon在某某些地方方,通過過提供一一個(gè)利用用換頁解解釋器代代碼和數(shù)數(shù)據(jù),允允許解釋釋超過88K字節(jié)節(jié)的程序序的“虛
34、擬BB”編譯器器,來釋釋放地址址空間,但但它對(duì)通通用程序序來說太太慢以致致不實(shí)用用。盡管管如此,一一些用BB寫的工工具還是是出現(xiàn)了了,包括括一個(gè)早早期版本本的,UUnixx用戶熟熟悉的可可變精度度計(jì)算器器dcMcIIlrooy 779。我我做的最最有雄心心壯志的的工作,是是一個(gè)把把B翻譯譯為GEE-6335機(jī)器器指令而而非thhreaadedd 代碼碼的真正正的交叉叉編譯器器。它是是一個(gè)精精巧的絕絕技:一一個(gè)用本本身語言言寫的,生生成在一一個(gè),在在有4kk字長(zhǎng)用用戶地址址空間的的18位位機(jī)器上上運(yùn)行的的36位位大型機(jī)機(jī)代碼,完完全的BB編譯器器。這個(gè)個(gè)項(xiàng)目能能實(shí)現(xiàn),僅僅僅是因因?yàn)锽的的簡(jiǎn)單性性
35、和它的的運(yùn)行時(shí)時(shí)系統(tǒng)。 Tjyy平坦軟軟件園盡管我們抱抱有關(guān)于于實(shí)現(xiàn)一一個(gè)那時(shí)時(shí),像FForttrann, PPL/II或Allgoll 688的主要要語言的的偶然想想法。這這樣的項(xiàng)項(xiàng)目對(duì)我我們的顯顯得絕望望的大:需要更更簡(jiǎn)單和和小的工工具。所所有這些些語言都都影響我我們的工工作,但但是憑我我們自己己之力來來做這些些事情則則更有趣趣。 TTjy平平坦軟件件園到19700年時(shí),我我們看起起來能在在Uniix項(xiàng)目目上,獲獲得一個(gè)個(gè)新的DDEC PDPP-111。處理理器是DDEC遞遞交的第第一批產(chǎn)產(chǎn)品,三三個(gè)月后后,磁盤盤才到達(dá)達(dá)。通過過thrreadded技技巧,使使B程序序在其上上運(yùn)行只只需要
36、為為運(yùn)算符符重寫代代碼段,和和一個(gè)我我用B寫寫的簡(jiǎn)單單的匯編編器。很很快,ddc成了了在其它它操作系系統(tǒng)之前前,第一一個(gè)在我我們的PPDP-11上上被測(cè)試試的有趣趣的程序序。幾乎乎非??炜?,但仍仍需等待待磁盤,TThommpsoon用PPDP-11匯匯編語言言,重寫寫了Unnix內(nèi)內(nèi)核和一一些基本本命令。最最早的PPDP-11上上的Unnix把把機(jī)器上上24KK內(nèi)存中中的122K給操操作系統(tǒng)統(tǒng),一個(gè)個(gè)很小的的空間給給用戶程程序,其其余的作作為RAAM磁盤盤。這一一版本僅僅是用于于測(cè)試,而而不是實(shí)實(shí)際的工工作;這這個(gè)機(jī)器器通過枚枚舉關(guān)閉閉的,kknigght的的不同尺尺寸象棋棋板的路路程,來來標(biāo)
37、記時(shí)時(shí)間。在在磁盤到到達(dá)后,我我們把匯匯編語言言轉(zhuǎn)換為為PDPP-111上的方方言,和和移植一一些B程程序,很很快移植植到它上上面去。 Tjyy平坦軟軟件園到19711年時(shí),我我們的微微型計(jì)算算機(jī)中心心開始有有了用戶戶。我們們都希望望更容易易編寫有有趣的軟軟件。使使用匯編編顯得沉沉悶,BB不管它它的性能能問題,已已經(jīng)有了了一個(gè)小小的包含含有用服服務(wù)例程程的庫,并并且被用用于越來來越多的的新程序序。這段段時(shí)期的的最著名名的成果果,是SStevve JJohnnsonn的yaacc分分析生成器器Joohnsson 79aa的第第一個(gè)版版本。 Tjyy平坦軟軟件園B的問題我們第一次次使用BBCPLL
38、然后是是B的機(jī)機(jī)器,是是按字尋尋址的,這這些語言言的單一一數(shù)據(jù)類類型,“單元”,能恰恰當(dāng)與硬硬件機(jī)器器字互相相換算。PPDP-11的的出現(xiàn)暴暴露了BB的語義義模型的的一些不不足。首首先,它它從BCCPL繼繼承的幾幾乎未作作改變的的字符處處理機(jī)制制是笨拙拙的:使使用庫方方法把包包裝的字字符串展展開到單單個(gè)的單單元,然然后再次次包裝,或或者訪問問或替換換單個(gè)字字符,在在一個(gè)面面向字節(jié)節(jié)的機(jī)器器上,開開始變得得笨拙,甚甚至愚蠢蠢。 TTjy平平坦軟件件園其次,盡管管最初的的PDPP-111沒有提提供浮點(diǎn)點(diǎn)算術(shù)運(yùn)運(yùn)算,制制造商承承諾將很很快提供供。浮點(diǎn)點(diǎn)運(yùn)算通通過定義義特別的的運(yùn)算符符,被添添加到我我
39、們的MMultticss和GCCOS的的B編譯譯器,但但是這種種機(jī)制僅僅在相應(yīng)應(yīng)的機(jī)器器上才可可能,單單個(gè)字長(zhǎng)長(zhǎng)足夠包包含一個(gè)個(gè)浮點(diǎn)數(shù)數(shù);這在在16位位PDPP-111上是不不成立的的。 TTjy平平坦軟件件園最后,B和和BCPPL模型型在處理理指針時(shí)時(shí),暗中中會(huì)做得得更多:語言規(guī)規(guī)則,通通過定義義一個(gè)指指針作為為字?jǐn)?shù)組組的索引引,強(qiáng)迫迫指針被被表示為為字索引引。每個(gè)個(gè)指針引引用生成成一個(gè)運(yùn)運(yùn)行時(shí),從從指針到到硬件要要求的字字節(jié)地址址的度量量轉(zhuǎn)換。 Tjyy平坦軟軟件園因?yàn)檫@些理理由,看看起來需需要一個(gè)個(gè)類型模模式來處處理字符符和字節(jié)節(jié)尋址,以以及為即即將到來來的浮點(diǎn)點(diǎn)硬件作作準(zhǔn)備。其其它問題
40、題,特別別是類型型安全性性和接口口檢查,看看起來并并沒有變變得像以以后那樣樣重要。 Tjyy平坦軟軟件園除了語言本本身的問問題,BB編譯器器的thhreaadedd代碼技技術(shù)得到到的程序序,比他他們對(duì)應(yīng)應(yīng)的匯編編語言版版本慢很很多,以以至我們們對(duì)用BB紀(jì)錄操操作系統(tǒng)統(tǒng)或它的的中心工工具的可可能性打打折扣。 Tjyy平坦軟軟件園到19711年時(shí),我我開始通通過添加加一個(gè)字字符類型型,并重重寫它的的編譯器器以生成成PDPP-111機(jī)器指指令而非非thrreadded代代碼,來來擴(kuò)展BB語言。因因此從BB到C的的轉(zhuǎn)換,與與創(chuàng)造一一個(gè)同匯匯編語言言競(jìng)爭(zhēng),能能產(chǎn)生足足夠快和和小的程程序的編編譯器,是是同
41、時(shí)進(jìn)進(jìn)行的。我我稱這個(gè)個(gè)輕微擴(kuò)擴(kuò)展的語語言為NNB,表表示“新B”(neew BB)。 Tjyy平坦軟軟件園C萌芽NB只存在在了很短短時(shí)間,以以至沒有有編寫一一個(gè)它的的完整描描述。它它提供類類型innt和ccharr,它們們的數(shù)組組,指向向它們的的指針,用用典型風(fēng)風(fēng)格聲明明如下 Tjyy平坦軟軟件園 iint i, j; chaar cc, dd; iint iarrrayy100; intt ippoinnt; ccharr caarraay110; chhar cpoointt;數(shù)組的的語義與與在B和和BCPPL中保保持一樣樣:iaarraay和ccarrray的的聲明產(chǎn)產(chǎn)生的單單元,被被
42、動(dòng)態(tài)初初始化為為分別指指向十個(gè)個(gè)整數(shù)和和字符序序列中的的第一個(gè)個(gè)的值。iipoiinteer和ccpoiinteer的聲聲明省略略了尺寸寸,以表表明沒有有存儲(chǔ)被被自動(dòng)分分配。在在過程內(nèi)內(nèi)部,語語言對(duì)指指針的解解釋與數(shù)數(shù)組變量量是一樣樣的:一一個(gè)指針針聲明產(chǎn)產(chǎn)生一個(gè)個(gè)單元與與數(shù)組聲聲明的區(qū)區(qū)別僅在在,程序序員被期期望給它它賦值,而而不是讓讓編譯器器分配空空間和初初始化單單元。 Tjyy平坦軟軟件園值存儲(chǔ)在數(shù)數(shù)組的單單元中,指指針是按按字節(jié)計(jì)計(jì)算的,對(duì)對(duì)應(yīng)存儲(chǔ)儲(chǔ)區(qū)的機(jī)機(jī)器地址址。因此此通過指指針間接接引用,不不意味著著比按比比例縮放放指針從從字到字字節(jié)的偏偏移,有有更多運(yùn)運(yùn)行時(shí)開開銷。另另一方面面,對(duì)應(yīng)應(yīng)數(shù)組取取下標(biāo)的的機(jī)器代代碼和指指針?biāo)阈g(shù)術(shù)依賴于于數(shù)組和和指針的的類型:計(jì)算iiarrrayi或或ipoointter+i表示示按比例例縮放加加數(shù)i與與所指向向?qū)ο蟮牡某叽纭?Tjyy平坦軟軟件園這些語義表表示一個(gè)個(gè)來自BB的容易易轉(zhuǎn)換,我我在它們們上面實(shí)實(shí)驗(yàn)了幾幾個(gè)月。當(dāng)當(dāng)我嘗試試擴(kuò)展類類型符號(hào)號(hào),特別別是添加加結(jié)構(gòu)化化(紀(jì)錄錄)類型型時(shí),問問題變得得明顯。結(jié)結(jié)構(gòu)看起起來,應(yīng)應(yīng)該以一一種直接接的方式式影射到到機(jī)器的的內(nèi)存,但但一個(gè)結(jié)結(jié)構(gòu)包含含一個(gè)數(shù)數(shù)組,沒沒有合適適的地方方隱藏包包含數(shù)組組基地址址的指針針,也沒沒有方便便的方式式安排被被初始化化的對(duì)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年標(biāo)準(zhǔn)醫(yī)院器械采購協(xié)議版
- 2024年度養(yǎng)老地產(chǎn)購房合同標(biāo)準(zhǔn)范本3篇
- 2024全新起重機(jī)轉(zhuǎn)讓與操作培訓(xùn)及配件供應(yīng)協(xié)議3篇
- 2024版土地開發(fā)利用轉(zhuǎn)讓合同3篇
- 2024年度飼料添加劑研發(fā)與應(yīng)用合作協(xié)議3篇
- 2024年標(biāo)準(zhǔn)餐飲租賃協(xié)議模板一
- 2024年特色餐飲加盟協(xié)議
- 2024年度智慧城市基礎(chǔ)設(shè)施建設(shè)承包合同3篇
- 2024版冷鏈物流配送承包合同范本(含溫度監(jiān)控服務(wù))2篇
- 2024年度企業(yè)財(cái)務(wù)分析與稅務(wù)籌劃咨詢合同匯編2篇
- 新人教小學(xué)五年級(jí)數(shù)學(xué)上冊(cè)《植樹問題(三)》示范教學(xué)課件
- PLC控制系統(tǒng)合同
- 2024安徽省氣象局事業(yè)單位招聘非氣象類本科及以上畢業(yè)生歷年(高頻重點(diǎn)提升專題訓(xùn)練)共500題附帶答案詳解
- NB-T32036-2017光伏發(fā)電工程達(dá)標(biāo)投產(chǎn)驗(yàn)收規(guī)程
- 國有企業(yè)采購管理規(guī)范 T/CFLP 0027-2020
- 高低壓配電施工施工方法及工藝要求
- 古代埃及文明史智慧樹知到期末考試答案章節(jié)答案2024年上海大學(xué)
- 胎膜早破護(hù)理查房完整模板
- 停車場(chǎng)充電樁建設(shè)項(xiàng)目設(shè)計(jì)方案
- vte的預(yù)防及護(hù)理課件
- 2024年湖南工藝美術(shù)職業(yè)學(xué)院?jiǎn)握新殬I(yè)適應(yīng)性測(cè)試題庫完整版
評(píng)論
0/150
提交評(píng)論