版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
高級(jí)程式設(shè)計(jì)語(yǔ)言原理
第一章程式設(shè)計(jì)語(yǔ)言研究什麼是語(yǔ)言:語(yǔ)言是資訊交流工具。有如下幾種定義:1、Webster字典定義Anartificiallyconstructedprimarilyformalsystemofsignsandsymbols(assymboliclogic)includingrulesfortheformationofadmissibleexpressionsandfortheirtransformation基於一組記號(hào)與符號(hào)由人工構(gòu)造的(基本上是)形式化的系統(tǒng)(如符號(hào)邏輯),包括合法運(yùn)算式的形成規(guī)則和轉(zhuǎn)換規(guī)則。2、Longman字典定義Anysystemofsigns,movements,etc.,usedtoexpressmeaningsorfeelings任何表情達(dá)意的記號(hào)系統(tǒng)。3、英漢雙解電腦辭典定義(清華大學(xué)出版社)Asetofcharacters,conventionsandrules,thatisusedforconveyinginformation.Thethreeaspectsoflanguagearepragmatics,semanticsandsyntax一種用於傳遞資訊之字元、約定和規(guī)則的集合。語(yǔ)言的三個(gè)方面是語(yǔ)用、語(yǔ)義和語(yǔ)法。4、中國(guó)大百科全書,電子學(xué)與電腦卷語(yǔ)言的基礎(chǔ)是一組記號(hào)和一組規(guī)則,根據(jù)規(guī)則由記號(hào)構(gòu)成之記號(hào)串的總體就是語(yǔ)言。5、徐家福:軟體語(yǔ)言及其實(shí)現(xiàn)語(yǔ)言是基於一組記號(hào)與一組規(guī)則、根據(jù)規(guī)則由記號(hào)構(gòu)成之記號(hào)串的總體。任何語(yǔ)言均包括語(yǔ)法、語(yǔ)義和語(yǔ)用三個(gè)方面。語(yǔ)言的作用描述作用、交流作用和標(biāo)誌作用(軟體語(yǔ)言可作為計(jì)算技術(shù)發(fā)展的里程碑標(biāo)誌)語(yǔ)言是人類生活的必要工具,不同的語(yǔ)言被使用於不同的領(lǐng)域和方面在計(jì)算領(lǐng)域,也存在不同層次的語(yǔ)言,本書所論及的是實(shí)現(xiàn)層次的語(yǔ)言,即程式設(shè)計(jì)語(yǔ)言。程式設(shè)計(jì)語(yǔ)言=字元集+規(guī)則集(用於組合字元)任何用於描述演算法和數(shù)據(jù)結(jié)構(gòu)的一套符號(hào)系統(tǒng)均可稱為程式設(shè)計(jì)語(yǔ)言本課程研究的對(duì)象:主要考慮那些在電腦上實(shí)現(xiàn)的程式設(shè)計(jì)語(yǔ)言術(shù)語(yǔ)所界定的範(fàn)圍:術(shù)語(yǔ)“程式設(shè)計(jì)語(yǔ)言”並沒(méi)有一個(gè)公認(rèn)的範(fàn)圍定義通常這個(gè)術(shù)語(yǔ)是指高級(jí)語(yǔ)言電腦上語(yǔ)言的層次:純二進(jìn)位機(jī)器碼或符號(hào)機(jī)器碼符號(hào)組合語(yǔ)言宏組合語(yǔ)言高級(jí)語(yǔ)言甚高級(jí)語(yǔ)言Byte或word,指令、數(shù)據(jù)不分用一些符號(hào)來(lái)代表指令,如sub代表減,Add代表加等,機(jī)器地址用十進(jìn)位。有時(shí)組合語(yǔ)言等同於符號(hào)機(jī)器碼。變數(shù)名用符號(hào),地址也可用符號(hào)而非數(shù)字。編制的程式稱為組合語(yǔ)言程式。用戶可以定義新指令及副程式根源程式編譯為目標(biāo)程式,或解釋執(zhí)行高級(jí)程式語(yǔ)言的高層規(guī)約語(yǔ)言,提供比高級(jí)程式語(yǔ)言更高級(jí)的語(yǔ)言設(shè)施。又稱為“可執(zhí)行的規(guī)約語(yǔ)言”。有時(shí)也不區(qū)別於高級(jí)語(yǔ)言。程式設(shè)計(jì)語(yǔ)言的四個(gè)基本特徵:1、用戶不需要具有機(jī)器代碼的知識(shí),只需學(xué)習(xí)特定的程式設(shè)計(jì)語(yǔ)言,並獨(dú)立於任何特定的機(jī)器代碼而使用。這並不意味著用戶可以完全忽略實(shí)際的電腦,如:需知道浮點(diǎn)數(shù)的表示或使用某些機(jī)器資源。2、程式設(shè)計(jì)語(yǔ)言必須有較大程度的機(jī)器獨(dú)立性(完全的機(jī)器獨(dú)立性)。這意味著必須有較大潛力,使得根源程式可運(yùn)行在具有不同機(jī)器代碼的兩臺(tái)電腦上,不需要完全重寫。
3、當(dāng)根源程式翻譯成機(jī)器代碼時(shí),通常對(duì)每個(gè)執(zhí)行單元有多個(gè)機(jī)器指令,如:A=A+B需多個(gè)機(jī)器指令來(lái)實(shí)現(xiàn)4、程式設(shè)計(jì)語(yǔ)言的記號(hào)比機(jī)器語(yǔ)言更接近於被求解的問(wèn)題。如:A=A+B比其機(jī)器翻譯更易於理解。1.1為什麼研究程式設(shè)計(jì)語(yǔ)言兩個(gè)基本觀察:1、已有數(shù)百種語(yǔ)言被設(shè)計(jì)和實(shí)現(xiàn)。在1969年,Sammet就列出了當(dāng)時(shí)120種相當(dāng)廣泛使用的語(yǔ)言,在此以後,又有很多語(yǔ)言被開(kāi)發(fā)。在早期,為一個(gè)專案的進(jìn)行而開(kāi)發(fā)一種語(yǔ)言是常有的事。2、大多數(shù)程式員通常不會(huì)同時(shí)使用多種語(yǔ)言,一般限制到1~2種。事實(shí)上,都是直接使用電腦上已有的語(yǔ)言如C、Ada、Fortran等。既然如此,為什麼要去研究各種不同的語(yǔ)言,有的語(yǔ)言甚至永遠(yuǎn)不可能再被使用?學(xué)習(xí)、研究程式設(shè)計(jì)語(yǔ)言的理由不僅僅是停留於膚淺的對(duì)語(yǔ)言特性的瞭解和考慮深入瞭解根本性的語(yǔ)言設(shè)計(jì)概念及它們對(duì)語(yǔ)言實(shí)現(xiàn)的影響1、提高開(kāi)發(fā)有效演算法的能力很多語(yǔ)言提供的特性如果被合適地使用,會(huì)給程式員帶來(lái)益處,但如被不合適地使用,將可能導(dǎo)致大量電腦時(shí)間浪費(fèi)或使程式員出現(xiàn)耗時(shí)的邏輯錯(cuò)誤。有可能一個(gè)長(zhǎng)期使用某一語(yǔ)言的程式員也並不理解該語(yǔ)言的所有特性。如遞歸特性:是一個(gè)非常便利的程式設(shè)計(jì)語(yǔ)言特性如正確、合適使用,可得到優(yōu)美和高效演算法的直接實(shí)現(xiàn)。如不正確使用,將可能導(dǎo)致執(zhí)行時(shí)間的天文數(shù)字增長(zhǎng)。如果程式員不知道遞歸蘊(yùn)含的設(shè)計(jì)問(wèn)題和實(shí)現(xiàn)困難,將難於使用這種結(jié)構(gòu);對(duì)遞歸原理和實(shí)現(xiàn)技術(shù)的瞭解可使程式員瞭解在特定語(yǔ)言中的遞歸的相對(duì)代價(jià)並通過(guò)其理解確定其使用是否合適。新的程式設(shè)計(jì)方法不斷在文獻(xiàn)中引入,如OO程式設(shè)計(jì),邏輯程式設(shè)計(jì)和併發(fā)程式設(shè)計(jì)的使用均需要對(duì)實(shí)現(xiàn)這些概念的語(yǔ)言的詳細(xì)瞭解和掌握。2、改善對(duì)現(xiàn)行程式設(shè)計(jì)語(yǔ)言的使用通過(guò)對(duì)語(yǔ)言特性的實(shí)現(xiàn)細(xì)節(jié)的瞭解,可大大增加書寫高效的程式的能力。如:對(duì)數(shù)據(jù)結(jié)構(gòu),諸如數(shù)組、串、表、記錄等,如何被創(chuàng)建和操作的瞭解對(duì)遞歸的實(shí)現(xiàn)細(xì)節(jié)的瞭解以及對(duì)對(duì)象類如何被創(chuàng)建的瞭解將對(duì)書寫高效程式有很大幫助3、增加可使用的有用的程式設(shè)計(jì)結(jié)構(gòu)的辭彙量語(yǔ)言對(duì)思維既有幫助,也有限制人們使用語(yǔ)言去表達(dá)思想,但語(yǔ)言也控制人如何思維,用字句中沒(méi)有直接表達(dá)的方式來(lái)思維是十分困難的。在解決一個(gè)問(wèn)題時(shí),要尋找合適的數(shù)據(jù)和程式結(jié)構(gòu),通常人們首先考慮他熟悉的語(yǔ)言中可直接表達(dá)的結(jié)構(gòu)。研究各種語(yǔ)言提供的結(jié)構(gòu)和這些結(jié)構(gòu)被實(shí)現(xiàn)的方式,程式員可增加其編程辭彙。對(duì)實(shí)現(xiàn)技術(shù)的瞭解非常重要。如要使用一個(gè)結(jié)構(gòu),該結(jié)構(gòu)在語(yǔ)言中沒(méi)有直接提供,程式員必須提供自己的實(shí)現(xiàn)(使用語(yǔ)言提供的基本結(jié)構(gòu))。如副程式控制結(jié)構(gòu)、協(xié)同例程(coroutine)在很多程式中有用,但很少有語(yǔ)言直接提供協(xié)同例程特性。C或Fortran程式員可以設(shè)計(jì)程式來(lái)使用協(xié)同例程結(jié)構(gòu),然後將它們實(shí)現(xiàn)為C或Fortran程式(如果熟悉相關(guān)概念及實(shí)現(xiàn))從而可以提供大型程式的正確控制結(jié)構(gòu)。4、允許更好地選擇語(yǔ)言對(duì)程式設(shè)計(jì)語(yǔ)言知識(shí)的掌握可以允許程式員針對(duì)特定的專案,恰當(dāng)?shù)剡x取合適的語(yǔ)言,從而減少編碼工作量。如:C、Fortran、Ada可用於數(shù)值運(yùn)算,Lisp、ML、Prolog可用於人工智慧應(yīng)用。對(duì)每種語(yǔ)言的特性的長(zhǎng)處和弱點(diǎn)的瞭解和掌握有利於程式員做出廣泛而正確的選擇。5、更易於學(xué)習(xí)新語(yǔ)言對(duì)自然語(yǔ)言語(yǔ)法結(jié)構(gòu)的學(xué)習(xí)和瞭解可使對(duì)新語(yǔ)言的學(xué)習(xí)更容易對(duì)程式設(shè)計(jì)語(yǔ)言各種結(jié)構(gòu)和實(shí)現(xiàn)技術(shù)的瞭解,也可使程式員能夠在需要時(shí)更容易地學(xué)習(xí)新語(yǔ)言6、更易於設(shè)計(jì)新語(yǔ)言很少有程式員把自己考慮為語(yǔ)言設(shè)計(jì)者,然而,任何程式都有一個(gè)用戶介面,這事實(shí)上也是某種形式的程式設(shè)計(jì)語(yǔ)言,用戶介面包括提供給用戶用於和程式通訊的命令和數(shù)據(jù)格式。大型程式,如文本編輯器、操作系統(tǒng)、圖形包的用戶介面的設(shè)計(jì)者,必須考慮很多存在於通用程式設(shè)計(jì)語(yǔ)言設(shè)計(jì)中的相同問(wèn)題。如果程式員熟悉一般程式設(shè)計(jì)語(yǔ)言中的結(jié)構(gòu)和實(shí)現(xiàn)方法,則程式設(shè)計(jì)將可以大為簡(jiǎn)化??傊?,程式設(shè)計(jì)語(yǔ)言的研究十分重要,包括語(yǔ)言特性和實(shí)現(xiàn)技術(shù)(特別是不同結(jié)構(gòu)的運(yùn)行時(shí)表示技術(shù))等主要研究?jī)?nèi)容。程式設(shè)計(jì)語(yǔ)言的優(yōu)點(diǎn)比機(jī)器或組合語(yǔ)言更易於學(xué)習(xí)。這涉及很多方面的問(wèn)題,如一個(gè)極端強(qiáng)大的程式設(shè)計(jì)語(yǔ)言可能比一個(gè)只有十幾條指令的機(jī)器的組合語(yǔ)言更難學(xué)。但給定基本相同的複雜度,程式設(shè)計(jì)語(yǔ)言更易學(xué)(記號(hào)更接近問(wèn)題域;更少關(guān)心物理硬體)程式設(shè)計(jì)語(yǔ)言書寫的程式更易於調(diào)試debug(程式更為短??;記號(hào)本身更自然,因此更多注意力可放在程式邏輯而非語(yǔ)法細(xì)節(jié)上)。程式更易於理解程式設(shè)計(jì)語(yǔ)言的記號(hào)自然起到了文檔的作用上述原因?qū)е陆鉀Q問(wèn)題的時(shí)間和代價(jià)減少。程式設(shè)計(jì)語(yǔ)言的缺點(diǎn)編譯過(guò)程需要機(jī)器時(shí)間,它可能超過(guò)易於調(diào)試所節(jié)省的時(shí)間編譯器可能產(chǎn)生低效的代碼如果用戶不知道機(jī)器代碼或編譯器未提供合適的調(diào)試工具,則程式調(diào)試可能非常困難。程式設(shè)計(jì)語(yǔ)言的分類這是一個(gè)非常困難的問(wèn)題,並沒(méi)有公認(rèn)的定義。這裏給出一些術(shù)語(yǔ),有些是相互交迭的,一個(gè)語(yǔ)言可能歸屬於兩個(gè)類別。面向過(guò)程的語(yǔ)言(procedure-oriented)用戶刻劃一個(gè)可執(zhí)行操作集合,它將以某種順序完成,從而刻劃了一個(gè)過(guò)程。關(guān)鍵因素是這些明確可執(zhí)行的操作,執(zhí)行順序由用戶確定。非過(guò)程型語(yǔ)言(nonprocedural)這只是一個(gè)相對(duì)的術(shù)語(yǔ),沒(méi)有人定義過(guò),也不可能定義。意指用戶指定的順序步驟的減少程度,越接近於用戶只陳述問(wèn)題而不指定求解步驟,語(yǔ)言就越是非過(guò)程的。更進(jìn)一步,可以有一個(gè)有序的步驟序列,其中每一步是某種程度上非過(guò)程性的,或是一個(gè)可執(zhí)行操作的集合,其順序用戶並沒(méi)有指定。兩種情形均導(dǎo)致更多的非過(guò)程性。在Fortran出現(xiàn)前,語(yǔ)句Y=A+B*C-D/E被認(rèn)為是非過(guò)程性的。因?yàn)樗荒軐懗梢粋€(gè)可執(zhí)行單元和被任何系統(tǒng)翻譯。隨著編譯系統(tǒng)的發(fā)展,過(guò)去非過(guò)程的今天變成過(guò)程的,而今天非過(guò)程的,明天可能是過(guò)程的。當(dāng)今非過(guò)程系統(tǒng)的例子如:RPG(報(bào)告生成器)或排序生成器,只需給定輸入和希望的輸出即可,過(guò)程將被自動(dòng)完成。說(shuō)明型語(yǔ)言(DeclarativeLanguage)——完全非過(guò)程的程式只定義做什麼,不需指定如何做,如函數(shù)式(歸約)、邏輯式(歸結(jié)、合一)語(yǔ)言及其它甚高級(jí)語(yǔ)言。面向問(wèn)題的語(yǔ)言(problem-oriented)該術(shù)語(yǔ)有不同解釋和用法,最常見(jiàn)用法是強(qiáng)調(diào)一個(gè)語(yǔ)言易於對(duì)特定問(wèn)題求解(相對(duì)組合語(yǔ)言),很多人將其用於針對(duì)非常特殊的應(yīng)用領(lǐng)域。面向應(yīng)用的語(yǔ)言(Application-oriented)這是極易誤解的、但廣為使用的術(shù)語(yǔ)。實(shí)際上,所有語(yǔ)言均是面向應(yīng)用的,只是領(lǐng)域大小不同罷了。如:Fortran適合數(shù)值科學(xué)計(jì)算,Cobol適合商業(yè)數(shù)據(jù)處理PL/1則二者均適合,領(lǐng)域更廣,又稱通用(generalpurpose)語(yǔ)言,實(shí)際上很少有真正通用的語(yǔ)言一般考慮:數(shù)值科學(xué)應(yīng)用,非數(shù)值應(yīng)用(如形式代數(shù)),商業(yè)數(shù)值處理,串、表處理等更特殊的領(lǐng)域:網(wǎng)形、仿真、數(shù)控、設(shè)備檢查等專用語(yǔ)言(specialpurpose)用於滿足單一的目標(biāo)(指定領(lǐng)域;對(duì)特殊應(yīng)用易用;提高效率等)問(wèn)題定義或規(guī)約語(yǔ)言(problem-defining,specification)文字地定義問(wèn)題,或特別定義輸入、輸出,但不定義變換方法問(wèn)題求解語(yǔ)言(problem-solving)可以完整地刻劃一個(gè)問(wèn)題的求解,這也是一個(gè)相對(duì)的術(shù)語(yǔ)標(biāo)注語(yǔ)言(reference)是一個(gè)確定的字元集,具有語(yǔ)言的格式。通常用唯一字元表示某概念或語(yǔ)言中的字元,不一定要適合電腦輸入。通常包含英文單詞(作為多單個(gè)字元),也可能提供固定符號(hào)集。不需要易讀。出版語(yǔ)言(publication)標(biāo)注語(yǔ)言的變種,如A↑2變成A2。硬體語(yǔ)言(hardware)又稱hardwarerepresentation,是標(biāo)注語(yǔ)言直接映射到合適的格式以利於電腦直接輸入。硬體語(yǔ)言本身和標(biāo)注語(yǔ)言必須有很好映射,如**作為↑的硬體表示,begin用‘BEGIN’表示等1.2程式設(shè)計(jì)語(yǔ)言簡(jiǎn)史程式設(shè)計(jì)的歷史很複雜,至今已很難於擬出一條全面清晰的發(fā)展軌跡。已有各種不同的總結(jié)方式。1978年,ACMSpecialInterestGrouponProgrammingLanguage(SIGPLAN)召開(kāi)了一個(gè)會(huì)議,HOPL(HistoryofProgrammingLanguage),專門研討語(yǔ)言發(fā)展歷史。程式語(yǔ)言的早期發(fā)展語(yǔ)言發(fā)展可追溯到1945年,德國(guó)的KonradZuse設(shè)計(jì)了“Plankalkul”,未實(shí)現(xiàn)。1954年,Laning和Zierler開(kāi)發(fā)了一個(gè)用於數(shù)學(xué)計(jì)算的高級(jí)語(yǔ)言,運(yùn)行於M.I.T的Whirlwind上,這大概是第一個(gè)運(yùn)行的編譯器。它可以書寫數(shù)學(xué)運(yùn)算式(具有上、下標(biāo))、賦值、分叉、輸入/輸出、副程式,並處理微分方程。第一個(gè)廣泛使用的高級(jí)語(yǔ)言是Fortran。IBM的JohnBackus領(lǐng)頭在50年代中期完成,初衷是解決科學(xué)及工程計(jì)算,但後也用於更多領(lǐng)域,甚至寫編譯器。該語(yǔ)言證明了高級(jí)語(yǔ)言的可行性,奠定了後來(lái)語(yǔ)言研究的基礎(chǔ)。1958年,ACM和歐洲的GAMM聯(lián)合開(kāi)發(fā)用於演算法處理的語(yǔ)言IAL(InternationalAlgebraicLanguage),最終修改變成了Algol60(早點(diǎn)的版本是Algol58),Algol58和Algol60導(dǎo)致了很多相關(guān)的程式設(shè)計(jì)語(yǔ)言研究和編譯技術(shù)開(kāi)發(fā)的發(fā)展。在實(shí)踐方面Fortran有很大影響,但Algol帶動(dòng)了語(yǔ)言的理論研究熱潮。50年代中期,RemingtonRandUnivac的GraceHopper及其同事設(shè)計(jì)了Flow-Matic,該語(yǔ)言面向商業(yè)數(shù)據(jù)處理,這是第一個(gè)面向英語(yǔ)的語(yǔ)言,並成為Cobol的主要源泉。1959年,在DoD贊助下,組織了一批電腦製造商和用戶開(kāi)發(fā)了Cobol(CommonBusinessOrientedLanguage),該語(yǔ)言在商業(yè)數(shù)據(jù)處理領(lǐng)域的影響甚至大於Fortran在科學(xué)計(jì)算領(lǐng)域的影響。1958、1959可能是語(yǔ)言歷史上生產(chǎn)率最大的兩年。M.I.T的VictorYngve開(kāi)發(fā)了Comit,這是串處理語(yǔ)言,用於翻譯自然語(yǔ)言。M.I.T的JohnMcCarthy和其學(xué)生開(kāi)發(fā)了人工智慧語(yǔ)言Lisp。Lisp至今仍在使用,Comit後來(lái)變成了Snobol(Bell電話實(shí)驗(yàn)室於60年代中期開(kāi)發(fā))科學(xué)計(jì)算和數(shù)據(jù)處理是電腦早期的主要應(yīng)用,語(yǔ)言也是如此,向跨兩個(gè)領(lǐng)域的通用性發(fā)展。1959-1960,SystemDevelopmentCorporation和JulesSchwartz在Algol58基礎(chǔ)上開(kāi)發(fā)了Jovial,這是第一次通用性嘗試。1963-1964,IBM和SHARE的一個(gè)聯(lián)繫計(jì)畫開(kāi)發(fā)了第一個(gè)通用語(yǔ)言(跨兩個(gè)領(lǐng)域)PL/I。Algol68是隨後的一個(gè)大的語(yǔ)言計(jì)畫,這是一個(gè)全新的開(kāi)發(fā),而不僅僅是升版,其主要特性是正交性,它定義了少量的基本特徵和組合它們的系統(tǒng)規(guī)則,允許程式員定義新的數(shù)據(jù)類型及操作。下一個(gè)大的語(yǔ)言計(jì)畫是,1975年開(kāi)始的DOD專案,目標(biāo)是開(kāi)發(fā)適合於嵌入式電腦系統(tǒng)的語(yǔ)言,此即Ada。1979年開(kāi)始發(fā)佈,1980年定稿,成為後期開(kāi)發(fā)、實(shí)現(xiàn)和標(biāo)準(zhǔn)化的基礎(chǔ),Ada不僅僅是適合嵌入系統(tǒng),可有更廣用途。隨著交互計(jì)算系統(tǒng)的出版,適合交互環(huán)境的語(yǔ)言開(kāi)始出現(xiàn)。1963年,RandCorporation的J.CliffShaw開(kāi)發(fā)了Joss.。1964年,DartmouthCollege的JohnKemeny和ThomasKurtz開(kāi)發(fā)了廣為流傳的Basic。針對(duì)非數(shù)值數(shù)學(xué)計(jì)算(如形式代數(shù)操作)的需要。IBM的JeanSammet於1962-1964開(kāi)發(fā)了Formac。MIT的JoelMoses於1970年代早期開(kāi)發(fā)了Macsyma。專用領(lǐng)域語(yǔ)言開(kāi)發(fā)。1956年,MIT的DouglasRoss為機(jī)床控制開(kāi)發(fā)了APT。其他有:civilengineeriy:Cogo computer-assistedinstruction:Coursewriter equipmentcheckout:Atlas。1967~1977,在美國(guó),在給定年度內(nèi)使用的語(yǔ)言數(shù)大概是170種,同時(shí),每年或每?jī)赡暧?5—30的增減。1978年HOPL會(huì)議,討論的語(yǔ)言滿足如下標(biāo)準(zhǔn):a.1967年時(shí)已出版並被使用。b.1977年仍在使用。c.在計(jì)算領(lǐng)域有很大影響。選出的語(yǔ)言有:Algol,Apl,APT,Basic,Cobol,Fortran,GPSS,Joss,Jovial,Lisp,PL/I,Simula,Snobol。80年代的兩個(gè)重要語(yǔ)言PASCAL(NiklausWirth,1968)和Ada未列入。PASCAL在70年代後期成為非常重要的語(yǔ)言,特別是在電腦教學(xué)方面。E.Sammet在“ProgrammingLanguage:HistoryandFuture”,CommunicationsoftheACM中列出了若干代表性語(yǔ)言:APT(AutomaticallyProgrammedTools)1956,第一個(gè)專用領(lǐng)域語(yǔ)言。Fortran(FORmulaTRANslation)1956,第一個(gè)廣泛使用的高級(jí)語(yǔ)言,為大量的科學(xué)和工程人員打開(kāi)了使用電腦的大門。Flow-Matic1956,第一個(gè)商業(yè)數(shù)據(jù)處理語(yǔ)言,第一次強(qiáng)調(diào)“類英文”的語(yǔ)法。IPL-V(InformationProcessingLanguageV)1958,第一個(gè)表處理語(yǔ)言。Comit1957,第一個(gè)實(shí)用的串處理和模式匹配語(yǔ)言。Cobol(CommonBusiness-OrientedLanguage)1960,最廣泛使用的數(shù)據(jù)處理語(yǔ)言。具有類英文的語(yǔ)法和機(jī)器獨(dú)立性。Algol60(ALGOrithmicLanguage)1960,用於刻劃演算法。形式化語(yǔ)法定義,帶動(dòng)了語(yǔ)言的理論和實(shí)現(xiàn)技術(shù)研究。Lisp(LIStProcessing)1960,引入了函數(shù)程式設(shè)計(jì)概念,基於表處理。Jovial(JulesOwnVersionofIAL)1960,第一次包含了科學(xué)計(jì)算,I/O資訊的邏輯操作、數(shù)據(jù)存貯和處理等能力。大多數(shù)Jovial編譯器用Jovial書寫。GPSS(General-PurposeSystemSimulator)1961,第一個(gè)仿真語(yǔ)言。Joss(JOHNNIACOpen-ShopSystem)1964,第一個(gè)互動(dòng)式語(yǔ)言。Formac(FORmulaManipulationCompiler)1964,第一個(gè)廣泛使用的形式代數(shù)操作語(yǔ)言。APL/360(AProgrammingLanguage)1967,引入了許多高級(jí)操作子,允許很短的演算法,產(chǎn)生了看問(wèn)題的新方式。Pascal1971,在一個(gè)小語(yǔ)言中引入了如賦類型的新概念,並以優(yōu)美方式組合了各種著名結(jié)構(gòu)。程式設(shè)計(jì)語(yǔ)言的角色早期,電腦非常昂貴,而程式員年薪不高,關(guān)鍵資源是電腦。因此,語(yǔ)言設(shè)計(jì)是為了更高效地執(zhí)行程式,高級(jí)語(yǔ)言需和組合語(yǔ)言競(jìng)爭(zhēng)。Fortran的主要設(shè)計(jì)者Backus在Fortran面世十年後曾說(shuō):坦率地講,我們當(dāng)時(shí)未曾有過(guò)任何最模糊的關(guān)於FORTRAN及其編譯器將如何工作的想法。我們只是簡(jiǎn)單地努力優(yōu)化目標(biāo)程式,運(yùn)行時(shí)間,因?yàn)楫?dāng)時(shí)大多數(shù)人不相信你可以真正完成這樣的事。他們認(rèn)為機(jī)器編碼的程式將是極端低效的,對(duì)很多應(yīng)用都是不實(shí)用的。我們未曾想到的一個(gè)結(jié)果是:有這樣一個(gè)系統(tǒng),它被設(shè)計(jì)為完全獨(dú)立於程式將最終運(yùn)行於其上的機(jī)器。這後來(lái)證明是非常有價(jià)值的能力,但當(dāng)時(shí)我們肯定未曾想到。我們的活動(dòng)沒(méi)有任何組織。程式的每個(gè)部分由一到二人完成,除了極少數(shù)例外,他們完全負(fù)責(zé)他們所做的事情。事情無(wú)序地發(fā)展,當(dāng)FORTRAN發(fā)佈時(shí),我們面臨這樣一個(gè)事實(shí):25000條指令將並不是全正確的,存在著大量將在大量使用後才會(huì)顯示出來(lái)的問(wèn)題。60年代中期,程式設(shè)計(jì)發(fā)生了變化,機(jī)器價(jià)格下降,程式設(shè)計(jì)價(jià)格上升。程式移植的需求越來(lái)越多,軟體的維護(hù)佔(zhàn)用了大量的計(jì)算資源。此時(shí)的目標(biāo)不再是編譯程序後使其高效地運(yùn)行,高級(jí)語(yǔ)言的任務(wù)變成使其易於開(kāi)發(fā)正確的程式以解決某給定應(yīng)用領(lǐng)域中的問(wèn)題。編譯技術(shù)成熟於60、70年代,語(yǔ)言技術(shù)以解決特定領(lǐng)域問(wèn)題為中心,如:Fortran用於科學(xué)計(jì)算,COBOL用於商業(yè)應(yīng)用,JOVIAL用於軍事應(yīng)用,LISP用於人工智慧應(yīng)用,以及Ada用於嵌入式軍事應(yīng)用等。程式設(shè)計(jì)語(yǔ)言也會(huì)進(jìn)化和消亡,如:Algol已不再使用,Cobol使用正在下降,Pascal的很多結(jié)構(gòu)仍在Ada中存在,但其黃金時(shí)代已過(guò)去。仍在使用的舊語(yǔ)言也經(jīng)歷了不斷的修訂以反應(yīng)來(lái)自其他計(jì)算領(lǐng)域的影響,F(xiàn)ortran和Cobol已有多個(gè)標(biāo)準(zhǔn)化標(biāo)本。Ada有1995年新標(biāo)準(zhǔn)。Lisp修訂後有Scheme和CommonLisp。C++和ML則反應(yīng)了人們?cè)谠O(shè)計(jì)和使用語(yǔ)言中獲得的經(jīng)驗(yàn)的混合。對(duì)語(yǔ)言的主要影響源自如下幾個(gè)方面:1、電腦能力電腦經(jīng)歷了數(shù)代的巨大變化,操作系統(tǒng)成為語(yǔ)言基於的平臺(tái)(不再僅依靠硬體)。這些因素影響了高級(jí)語(yǔ)言的結(jié)構(gòu)和使用語(yǔ)言特性的代價(jià)。2、應(yīng)用應(yīng)用領(lǐng)域有了很大變化,電腦應(yīng)用已滲透到幾乎所有領(lǐng)域,新應(yīng)用的需求影響了新語(yǔ)言的設(shè)計(jì)和舊語(yǔ)言的修訂。特別是近幾年,INTERNET的發(fā)展進(jìn)一步拓廣的應(yīng)用範(fàn)圍。3、程式設(shè)計(jì)方法人們對(duì)書寫大型複雜系統(tǒng)的方法的深入研究和程式設(shè)計(jì)環(huán)境的變化也影響語(yǔ)言的發(fā)展。4、實(shí)現(xiàn)方法更好的實(shí)現(xiàn)方法影響到新語(yǔ)言中特性的選擇。5、理論研究使用形式化的數(shù)學(xué)方法,對(duì)語(yǔ)言設(shè)計(jì)和實(shí)現(xiàn)的概念基礎(chǔ)的研究加深了我們對(duì)語(yǔ)言特性的優(yōu)勢(shì)和弱點(diǎn)的理解,從而影響語(yǔ)言中特性的選取,如“繼承”,因語(yǔ)義複雜,而被有的語(yǔ)言放棄。6、標(biāo)準(zhǔn)化標(biāo)準(zhǔn)化語(yǔ)言需要易於在不同電腦上實(shí)現(xiàn),使程式易於移植,這對(duì)語(yǔ)言的設(shè)計(jì)影響是保守的,即輕易不引入新特性。一些重要的語(yǔ)言和技術(shù)影響:1951-55:硬體:電子管電腦,水銀延遲線記憶體方法:組合語(yǔ)言,基礎(chǔ)概念:副程式,數(shù)據(jù)結(jié)構(gòu)語(yǔ)言:運(yùn)算式編譯器的實(shí)驗(yàn)性使用1956-60:硬體:磁帶記憶體,磁芯記憶體,電晶體電路方法:早期編譯技術(shù),BNF文法,代碼優(yōu)化,解釋器,動(dòng)態(tài)存儲(chǔ)方法和表處理語(yǔ)言:FORTRAN,ALGOL58,ALGOL60,COBOL,LISP1961-65硬體:可相容的體系結(jié)構(gòu)家族,磁片記憶體方法:多道程序設(shè)計(jì)操作系統(tǒng),語(yǔ)法制導(dǎo)的編譯器語(yǔ)言:COBOL61,ALGOL60(修訂),SNOBOL,JOVIAL,APL符號(hào)體系1966-1970硬體:增加尺寸和速度並降低成本,小型電腦,微程式設(shè)計(jì),積體電路方法:分時(shí)和互動(dòng)式系統(tǒng),優(yōu)化編譯器,翻譯器書寫系統(tǒng)語(yǔ)言:APL,F(xiàn)ORTRAN66,COBOL65,ALGOL68,SNOBOL4,BASIC,PL/1,SIMULA67,ALGOL-W1971-75硬體:微型電腦,小型電腦時(shí)代,小型大規(guī)模存儲(chǔ)系統(tǒng),磁性記憶體的衰落和半導(dǎo)體記憶體的興起方法:程式驗(yàn)證,結(jié)構(gòu)化程式設(shè)計(jì),軟體工程作為一門學(xué)科的早期發(fā)展語(yǔ)言:PASCAL,COBOL74,PL/1(標(biāo)準(zhǔn)),C,Scheme,Prolog1976-80硬體:商用品質(zhì)的微機(jī),大型大規(guī)模存儲(chǔ)系統(tǒng),分佈式計(jì)算方法:數(shù)據(jù)抽象,形式化語(yǔ)義,併發(fā)、嵌入式、和即時(shí)程式設(shè)計(jì)技術(shù)語(yǔ)言:Smalltalk,Ada,F(xiàn)ORTRAN77,ML1981-85硬體:個(gè)人電腦,第一代工作站,視頻遊戲,局域網(wǎng),Arpanet方法:面向?qū)ο蟪淌皆O(shè)計(jì),互動(dòng)式環(huán)境,語(yǔ)法制導(dǎo)編輯器語(yǔ)言:TurboPascal,Smalltalk80,Prolog的發(fā)展,Ada83,Postscript1986-90硬體:微機(jī)時(shí)代,工程工作站的上升,RISC體系結(jié)構(gòu),全域網(wǎng),Internet方法:客戶/伺服器計(jì)算語(yǔ)言:FORTRAN90,C++,SML(標(biāo)準(zhǔn)ML)1991-95硬體:非??斓牧畠r(jià)工作站和微機(jī),大規(guī)模並行體系結(jié)構(gòu),語(yǔ)音,視頻,傳真,多媒體方法:開(kāi)放系統(tǒng),環(huán)境框架,國(guó)家資訊基礎(chǔ)設(shè)施(資訊高速公路)語(yǔ)言:Ada95,過(guò)程語(yǔ)言(TCL,PERL)1996-2000硬體:二代Internet,機(jī)群,網(wǎng)路電腦(NC)方法:軟體構(gòu)件技術(shù),Agent,中間件,流覽器/伺服器計(jì)算,Internet計(jì)算語(yǔ)言:JAVA,XML,IDL(後兩種一個(gè)意義上不能算為程式設(shè)計(jì)語(yǔ)言)1.3程式設(shè)計(jì)語(yǔ)言的評(píng)價(jià)好語(yǔ)言的屬性1、清晰、簡(jiǎn)單、一致(協(xié)調(diào))程式設(shè)計(jì)語(yǔ)言既是思考演算法的概念框架,又是表達(dá)演算法的工具。語(yǔ)言對(duì)程式的幫助不僅在編碼階段,還會(huì)在此階段前較長(zhǎng)一段時(shí)間,均有幫助。語(yǔ)言應(yīng)該是提供清晰、簡(jiǎn)單、一致的概念,用作演算法開(kāi)發(fā)的基本原語(yǔ)。因此,希望有最少數(shù)量的不同概念及其盡可能簡(jiǎn)單和規(guī)則的組合規(guī)則,稱為概念完整性。語(yǔ)言的語(yǔ)法對(duì)程式的書寫、測(cè)試、理解和修改有較大影響,因此,可讀性是一個(gè)中心問(wèn)題。特別精簡(jiǎn)或隱義的語(yǔ)言使程式易於書寫(對(duì)有經(jīng)驗(yàn)的程式員),但難於讀(當(dāng)要修改時(shí)),如APL,甚至程式員本人過(guò)一段間後也難讀懂。有的語(yǔ)言幾乎相同的語(yǔ)句實(shí)際上代表了完全不同的事。因此,一條基本原則是,語(yǔ)義不同應(yīng)在語(yǔ)法中完全反映出來(lái)。2、正交性意味著可以以所有可能的方式來(lái)組合語(yǔ)言特性以得到有意義的組合結(jié)果,如條件語(yǔ)句和任意運(yùn)算式的組合。正交性使語(yǔ)言易學(xué),程式易寫,因?yàn)椴恍栌涀√嗟睦夂吞厥馇闆r,缺點(diǎn)是:邏輯上不協(xié)調(diào)或極端低效的組合可能會(huì)被編譯器忽略。正交性在語(yǔ)言設(shè)計(jì)中是一個(gè)有爭(zhēng)議的屬性。3、應(yīng)用自然性語(yǔ)言的語(yǔ)法應(yīng)使得正確的使用可以允許程式結(jié)構(gòu)反映出演算法的邏輯結(jié)構(gòu)。理想地:直接將程式的設(shè)計(jì)翻譯為合適的反映演算法結(jié)構(gòu)的程式語(yǔ)句。順序演算法、併發(fā)演算法、邏輯演算法等各有不同的自然結(jié)構(gòu)。語(yǔ)言應(yīng)提供合適的數(shù)據(jù)結(jié)構(gòu)、操作、控制結(jié)構(gòu)和麵向問(wèn)題的自然語(yǔ)法。語(yǔ)言流行的主要原因之一便是對(duì)自然性的需要。特別適合某類應(yīng)用的語(yǔ)言將大大簡(jiǎn)化該領(lǐng)域程式的創(chuàng)建,如Prolog適合於推導(dǎo),C++適合於OO設(shè)計(jì)。4、對(duì)抽象的支持即使對(duì)最自然的語(yǔ)言,在刻劃問(wèn)題求解的抽象數(shù)據(jù)結(jié)構(gòu)和操作與語(yǔ)言固有的特別的基本數(shù)據(jù)結(jié)構(gòu)和操作間總是存在著差距。如C可能是一個(gè)合適的用於構(gòu)造大學(xué)課程調(diào)度應(yīng)用的語(yǔ)言,但抽象的數(shù)據(jù)結(jié)構(gòu)如“學(xué)生”、“課程”、“授課老師”、“教室”等以及抽象操作“分配某學(xué)生到某課程”,“安排某課在某教室”等並不在C語(yǔ)言中提供,而它們對(duì)應(yīng)用本身是非常自然的。程式員的任務(wù)之一便是為問(wèn)題求解設(shè)計(jì)合適的抽象,然後用實(shí)際語(yǔ)言提供的更基本的特性來(lái)實(shí)現(xiàn)這些抽象。理想地:語(yǔ)言應(yīng)允許數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)類型和操作作為自包含的抽象而定義,程式員可以將它們用在程式的其他部分(只需瞭解其抽象性質(zhì),而無(wú)需知道實(shí)現(xiàn)細(xì)節(jié))。5、程式易於驗(yàn)證程式的可靠性總是一個(gè)中心的問(wèn)題,有很多技術(shù)驗(yàn)證一個(gè)程式是否正確地完成所需功能。程式可以用形式化方法證明是正確的,也可以用桌面檢查方式非形式地證明正確性(讀程式文本)也可以用測(cè)試的方法,用測(cè)試數(shù)據(jù)輸入,檢查輸出結(jié)果是否滿足規(guī)約,對(duì)大型程式,可能需要這些方法的組合語(yǔ)言應(yīng)該對(duì)程式驗(yàn)證提供支持,其支持力度是選擇語(yǔ)言的主要標(biāo)準(zhǔn)之一。語(yǔ)義和語(yǔ)法結(jié)構(gòu)的簡(jiǎn)單性是簡(jiǎn)化程式驗(yàn)證的主要因素。6、編程環(huán)境語(yǔ)言的技術(shù)結(jié)構(gòu)僅僅是影響其使用的一個(gè)方面,而合適的編程環(huán)境可以彌補(bǔ)語(yǔ)言技術(shù)上的弱點(diǎn)。編程環(huán)境包含很多因素:可靠的、有效的、有良好文檔的語(yǔ)言實(shí)現(xiàn)自然是首要因素。特殊的編輯器和測(cè)試包可以加速程式的創(chuàng)建和測(cè)試。維護(hù)和修改程式的多個(gè)版本的機(jī)制有利於大型程式的開(kāi)發(fā)。7、程式的易移植性程式的易移植性是很多專案的重要目標(biāo)。廣泛使用的和獨(dú)立於機(jī)器特性而定義的語(yǔ)言是易移植性的有用的基礎(chǔ),如:Ada、Fortran、C、Pascal等有標(biāo)準(zhǔn)化定義的語(yǔ)言書寫的程式易移植性較好。8、使用代價(jià)代價(jià)是評(píng)價(jià)語(yǔ)言的主要元素,但具有不同的代價(jià)度量。a.程式執(zhí)行代價(jià)在早期,代價(jià)主要是程式執(zhí)行代價(jià)。因此,優(yōu)化編譯器的實(shí)現(xiàn)、高效的寄存器的分配和高效的運(yùn)行時(shí)支持機(jī)制的設(shè)計(jì)是非常重要的。程式執(zhí)行代價(jià)對(duì)語(yǔ)言設(shè)計(jì)是重要的,但主要對(duì)將重複執(zhí)行的大程式更為重要。目前,對(duì)很多應(yīng)用、執(zhí)行速度不再是主要考慮。對(duì)程式開(kāi)發(fā)的更好診斷和更容易的用戶控制以及程式的維護(hù)也需要考慮,在此情況下,執(zhí)行時(shí)間增加10%—20%,也是可容忍的。b.程式翻譯代價(jià)當(dāng)Fortran或C等用於教學(xué)時(shí),高效的翻譯(編譯)比高效執(zhí)行更為重要。通常學(xué)生程式會(huì)多次編譯,而執(zhí)行次數(shù)不多,需要快速、高效的編譯器。c.程式生成、測(cè)試和使用的代價(jià)對(duì)某類問(wèn)題,求解應(yīng)該在程式員最少投入的情形下被設(shè)計(jì)、編碼、測(cè)試、修改和使用。如:Smalltalk是價(jià)格有效的,求解一個(gè)問(wèn)題的時(shí)間和努力均較少。對(duì)使用語(yǔ)言的總代價(jià)的考慮在很多情況下變得和傳統(tǒng)的代價(jià)同等重要。d.程式維護(hù)的代價(jià)研究表明,對(duì)較長(zhǎng)時(shí)間運(yùn)行的程式的代價(jià)不是初始設(shè)計(jì)、編碼、測(cè)試的代價(jià)而是整過(guò)生命週期代價(jià)(涉及開(kāi)發(fā)和維護(hù))。維護(hù)包括發(fā)現(xiàn)錯(cuò)誤的修改、平臺(tái)的變化所需的修改、程式的擴(kuò)展和加強(qiáng)。語(yǔ)言對(duì)維護(hù)的支持是非常重要的(長(zhǎng)期運(yùn)行的程式由多個(gè)人員維護(hù),語(yǔ)言應(yīng)有支持)語(yǔ)言的應(yīng)用領(lǐng)域語(yǔ)言的使用依賴於所求解問(wèn)題的應(yīng)用領(lǐng)域,過(guò)去30年各種應(yīng)用領(lǐng)域的語(yǔ)言已有很大變化。1、60年代的應(yīng)用60年代的程式設(shè)計(jì)可分為四個(gè)基本類:商業(yè)處理、科學(xué)計(jì)算、系統(tǒng)程式設(shè)計(jì)、人工智慧應(yīng)用。商業(yè)處理這類應(yīng)用大多是大的數(shù)據(jù)處理系統(tǒng),運(yùn)行在大型機(jī)上,其基本特徵是:讀大量在多個(gè)磁帶設(shè)備上的歷史數(shù)據(jù),讀少量的當(dāng)前事務(wù)集,寫出一個(gè)新的歷史數(shù)據(jù)集。COBOL是這類應(yīng)用的代表語(yǔ)言。商業(yè)應(yīng)用還包括商業(yè)計(jì)畫、風(fēng)險(xiǎn)分析和“Whatif”方案(60年代,這樣一個(gè)應(yīng)用通常需幾個(gè)月)??茖W(xué)計(jì)算主要用於各種數(shù)學(xué)方程的求解,包括數(shù)值分析、微積分求解、統(tǒng)計(jì),這是電腦的第一個(gè)應(yīng)用領(lǐng)域,F(xiàn)ortran是最流行語(yǔ)言,其語(yǔ)法接近數(shù)學(xué)。系統(tǒng)操作系統(tǒng)和編譯器這類應(yīng)用要求能夠訪問(wèn)硬體的全部功能和資源,當(dāng)時(shí)沒(méi)有有效的語(yǔ)言存在。組合語(yǔ)言是主要的選擇。Jovial(Algol的變體)曾用於美國(guó)DoD的一些專案,60年代末,PL/I可用於此目的。一個(gè)相關(guān)的應(yīng)用領(lǐng)域是過(guò)程控制,由於當(dāng)時(shí)電腦的龐大和昂貴,大多數(shù)過(guò)程控制應(yīng)用是非常大的,如電站控制和自動(dòng)裝配線控制。Forth語(yǔ)言專為此而設(shè)計(jì),組合語(yǔ)言也常被使用。人工智慧其特徵是對(duì)大的數(shù)據(jù)空間的搜索演算法。LISP是主要語(yǔ)言。2、90年代的應(yīng)用當(dāng)前的情況遠(yuǎn)較過(guò)去複雜,有更多的應(yīng)用領(lǐng)域,可選語(yǔ)言也更多。商業(yè)處理COBOL仍然是主要語(yǔ)言,C和PL/1也時(shí)常被使用然而“Whatif”方案已完全改變,spreadsheet已完全改革該領(lǐng)域過(guò)去對(duì)典型的商業(yè)計(jì)畫程式需化一個(gè)程式員幾個(gè)月,現(xiàn)在可在幾小時(shí)內(nèi)泡制出很多。第四代語(yǔ)言也開(kāi)始進(jìn)入此市場(chǎng)。4GL提供了基於窗口的程式員介面,易於訪問(wèn)資料庫(kù)記錄,易於產(chǎn)生填空式的輸入表和優(yōu)美的輸出報(bào)告,有時(shí)4GL編譯器產(chǎn)生COBOL程式作為輸出??茖W(xué)計(jì)算Fortran仍有較大市場(chǎng),C開(kāi)始進(jìn)入該領(lǐng)域。Fortran90加入了許多Ada和其他語(yǔ)言的特徵。系統(tǒng)軟體60年代末的C和後來(lái)的C++佔(zhàn)據(jù)了這個(gè)領(lǐng)域。C提供了非常高效的執(zhí)行,允許程式員對(duì)操作系統(tǒng)和硬體的完全訪問(wèn),其他語(yǔ)言如:Modula、Pascal、現(xiàn)代BASIC也可用於此。Ada以支持系統(tǒng)軟體開(kāi)發(fā)為目標(biāo),但從未達(dá)到其成為此領(lǐng)域主要語(yǔ)言的目標(biāo)。組合語(yǔ)言的使用已成為過(guò)去。即時(shí)語(yǔ)言的需求也在增加,C、Ada、Pascal常用於此。AILISP仍在使用,只是改為Scheme和CommonLisp。Prolog是此領(lǐng)域的新軍。出版字處理系統(tǒng)有自己的輸入命令和輸出檔語(yǔ)法。TEX是常用的語(yǔ)言,它產(chǎn)生Postscript頁(yè)面描述語(yǔ)言(直接使用已不多見(jiàn))。Process(處理)60年代,程式員通過(guò)命令操作電腦,現(xiàn)在常用程式來(lái)控制其他程式,如:每天半夜備份檔,自動(dòng)回答電子郵件等。這樣的活動(dòng)稱為處理,這需要專用的處理語(yǔ)言,例如有:UNIX中的Shell,DOS中的BAT等。新範(fàn)型新的應(yīng)用模型仍在研究中,ML用於類型理論研究,其用戶正在增長(zhǎng)。Smalltalk是另一重要語(yǔ)言,它是OO語(yǔ)言的起源。JAVA的應(yīng)用域也在逐步擴(kuò)大。語(yǔ)言的標(biāo)準(zhǔn)化一個(gè)例子:inti;i=(1&&2)+3;這是一條C語(yǔ)言語(yǔ)句,該語(yǔ)句是否有效?i的值是什麼?要回答這個(gè)問(wèn)題,三個(gè)方法是常用的。1.通過(guò)閱讀語(yǔ)言參考手冊(cè)以決定語(yǔ)句的含義2.在自己的電腦上寫一段程式查看其結(jié)果3.閱讀語(yǔ)言標(biāo)準(zhǔn)中的定義選擇2是常用的方法——簡(jiǎn)單易行,因?yàn)檎Z(yǔ)言概念和其特殊實(shí)現(xiàn)相關(guān)。直接查用戶參考手冊(cè)也是常用的。但選擇3較少用,因?yàn)楹苌儆腥丝凑Z(yǔ)言標(biāo)準(zhǔn)。選擇1、2意味著一個(gè)語(yǔ)言的概念是和其特殊實(shí)現(xiàn)相關(guān)的。但實(shí)現(xiàn)是否正確?如:移植一個(gè)程式到另一電腦上,仍能正確編譯嗎?通常語(yǔ)言設(shè)計(jì)涉及一些複雜的細(xì)節(jié),各個(gè)廠商有不同的解釋,從而產(chǎn)生細(xì)微的執(zhí)行行為上的差異。廠商也可能決定加入新的特性到語(yǔ)言中以增強(qiáng)其有用性,但新加入是否“合法”是一個(gè)問(wèn)題,它有可能導(dǎo)致移植的困難。為解決這些問(wèn)題,大多數(shù)語(yǔ)言有標(biāo)準(zhǔn)定義,所有實(shí)現(xiàn)應(yīng)該符合標(biāo)準(zhǔn),通常有兩種標(biāo)準(zhǔn):1.業(yè)主標(biāo)準(zhǔn)(Proprietary)。開(kāi)發(fā)並擁有語(yǔ)言的公司所給定的定義。這類標(biāo)準(zhǔn)通常不適合已廣泛使用的語(yǔ)言。實(shí)現(xiàn)上的變體會(huì)隨著很多增強(qiáng)和不相容而出現(xiàn)。2.合議標(biāo)準(zhǔn)(Consensus)。基於相關(guān)參與者的同意而由一個(gè)組織產(chǎn)生的標(biāo)準(zhǔn)。合議標(biāo)準(zhǔn)是保證語(yǔ)言實(shí)現(xiàn)一致性的主要方法。每個(gè)國(guó)家都有自己的標(biāo)準(zhǔn)化組織美國(guó):AmericanNationalStandardInstitute,ANSI負(fù)責(zé)程式設(shè)計(jì)語(yǔ)言標(biāo)準(zhǔn)的是:ComputerBusinessEquipmentManufactureAssociation(CBEMA)的X3委員會(huì)。IEEE(InstituteofElectricalandElectronicEngineers)也開(kāi)發(fā)相應(yīng)標(biāo)準(zhǔn)。英國(guó):BSI(BritishStandardsInstitute)國(guó)際:ISO(InternationalStandardsOrganization),在瑞士、日內(nèi)瓦。標(biāo)準(zhǔn)開(kāi)發(fā)遵循類似的過(guò)程在某一時(shí)間,一組人認(rèn)為一個(gè)語(yǔ)言需要一個(gè)標(biāo)準(zhǔn)定義了,標(biāo)準(zhǔn)化組織將組織一批志願(yuàn)者來(lái)開(kāi)發(fā)標(biāo)準(zhǔn),當(dāng)工作組提出標(biāo)準(zhǔn)後,讓更大範(fàn)圍的人進(jìn)行投票,不能達(dá)成共識(shí)的部分去掉,然後產(chǎn)生語(yǔ)言標(biāo)準(zhǔn)。從理論上說(shuō),這是一個(gè)好過(guò)程,然而,實(shí)際上標(biāo)準(zhǔn)制訂技術(shù)和政治因素參半,如:編譯器的製造商在標(biāo)準(zhǔn)化過(guò)程中均有財(cái)力投入,都希望標(biāo)準(zhǔn)按自己的思路走,從而避免改變自己的實(shí)現(xiàn)以及失去用戶群。標(biāo)準(zhǔn)的制定是一個(gè)合議的過(guò)程,不是每一個(gè)人按自己的方式辦,而是希望最終的語(yǔ)言能為所有人所接受。在意見(jiàn)不同時(shí),有時(shí)不得不將有的特性排除在標(biāo)準(zhǔn)外。為了更好地使用標(biāo)準(zhǔn),有三個(gè)值得強(qiáng)調(diào)的問(wèn)題:1.時(shí)限:什麼時(shí)候開(kāi)始標(biāo)準(zhǔn)化一個(gè)語(yǔ)言?Fortran於1966年開(kāi)始標(biāo)準(zhǔn)化,當(dāng)時(shí)已有很多不相容版本,從而導(dǎo)致了很多問(wèn)題。另一個(gè)極端,Ada於1983年在有任何實(shí)現(xiàn)前即開(kāi)始標(biāo)準(zhǔn)化,因此,並不清楚標(biāo)準(zhǔn)產(chǎn)生時(shí)是否有語(yǔ)言可以使用。第一批的Ada編譯器在87或88年才出現(xiàn)。人們應(yīng)該儘早開(kāi)始一個(gè)語(yǔ)言的標(biāo)準(zhǔn)化,只要有足夠的語(yǔ)言使用經(jīng)驗(yàn)即可,太晚則會(huì)導(dǎo)致很多不相容的實(shí)現(xiàn)。2.相符性——什麼意味著程式和編譯器符合標(biāo)準(zhǔn)程式符合標(biāo)準(zhǔn)——如果該程式只使用標(biāo)準(zhǔn)定義的特性編譯器符合標(biāo)準(zhǔn)——對(duì)一個(gè)給定的符合標(biāo)準(zhǔn)的程式,可以生成能夠產(chǎn)生正確輸出的可執(zhí)行碼。這裏並未涉及對(duì)標(biāo)準(zhǔn)的擴(kuò)充,如編譯器加了附加特性,則使用這些特性的程式將不合標(biāo)準(zhǔn)。標(biāo)準(zhǔn)通常強(qiáng)調(diào)符合標(biāo)準(zhǔn)的程度,大多數(shù)編譯器都加入了自己的特性。3.廢棄新的電腦結(jié)構(gòu)需要新的語(yǔ)言特性。一旦我們標(biāo)準(zhǔn)化一個(gè)語(yǔ)言,幾年以後它可能會(huì)變得古怪。如:Fortran66標(biāo)準(zhǔn)就已過(guò)時(shí),它沒(méi)有類型、嵌套控制結(jié)構(gòu)、封裝、塊結(jié)構(gòu)和其他現(xiàn)代特徵。一般每五年應(yīng)復(fù)審標(biāo)準(zhǔn),或者重新修訂或者丟棄。所有標(biāo)準(zhǔn)的一個(gè)問(wèn)題是:遵循舊標(biāo)準(zhǔn)書寫的程式怎麼辦?重寫程式代價(jià)非常大,因此大多數(shù)標(biāo)準(zhǔn)需要向後相容。這樣也存在一些問(wèn)題:具有廢棄結(jié)構(gòu)的語(yǔ)言可能變得難以控制,更危險(xiǎn)的是這些結(jié)構(gòu)可能會(huì)對(duì)好的程式設(shè)計(jì)有害。目前,存在兩個(gè)相關(guān)概念:廢棄和反對(duì)(deprecate)廢棄——一個(gè)特性被廢棄是指:它是一個(gè)可能在下一個(gè)標(biāo)準(zhǔn)版本中丟棄的特性,這意味著,該特性仍然可用,但在5—10年內(nèi)會(huì)被丟棄,這樣提前可為重寫作好準(zhǔn)備。反對(duì)——反對(duì)特性將在下一個(gè)標(biāo)準(zhǔn)版本中變成廢棄的,新編寫的程式不應(yīng)再使用此類特性。符合標(biāo)準(zhǔn)的編譯器允許有擴(kuò)展,只要能正確地編譯符合標(biāo)準(zhǔn)的程式即可。大多數(shù)編譯器均有擴(kuò)展,廠商加入特性以力爭(zhēng)擴(kuò)大市場(chǎng)份額。這是導(dǎo)致語(yǔ)言發(fā)展的重要因素之一。學(xué)術(shù)界,人們並不關(guān)心這樣的標(biāo)準(zhǔn),總是根據(jù)自己的研究擴(kuò)展和修改語(yǔ)言。這也是語(yǔ)言發(fā)展的重要源泉。1.4環(huán)境對(duì)語(yǔ)言的影響語(yǔ)言的發(fā)展不能在真空中進(jìn)行,支持語(yǔ)言的硬體對(duì)語(yǔ)言有很大影響。支持程式執(zhí)行的外部環(huán)境稱為操作或目標(biāo)環(huán)境。程式被設(shè)計(jì)、編碼、測(cè)試和調(diào)試的環(huán)境稱為宿主環(huán)境。通??煞譃樗念惸繕?biāo)環(huán)境:批處理環(huán)境互動(dòng)式環(huán)境嵌入式系統(tǒng)環(huán)境程式設(shè)計(jì)環(huán)境--互動(dòng)式環(huán)境的特例批處理環(huán)境最早和最簡(jiǎn)單的操作環(huán)境只含有外部數(shù)據(jù)檔數(shù)據(jù)檔→程式處理→數(shù)據(jù)檔稱為批處理:因?yàn)檩斎霐?shù)據(jù)聚集成批並成批處理。Fortran、C、和Pascal均是為批處理而設(shè)計(jì)的,當(dāng)然也可用於互動(dòng)式嵌入式環(huán)境。對(duì)語(yǔ)言設(shè)計(jì)的影響環(huán)境的影響可分為四個(gè)方面:I/O特性、錯(cuò)誤和例外處理、時(shí)間設(shè)施和程式結(jié)構(gòu)。批處理語(yǔ)言中,檔是大多數(shù)I/O特性的基礎(chǔ)。雖然檔可用作到終端的互動(dòng)式I/O,但對(duì)交互I/O的特殊需要並不涉及。檔通常存貯定長(zhǎng)記錄,而終端需要鍵盤上每輸入一個(gè)字元就讀入一次。嵌入系統(tǒng)需訪問(wèn)特殊的I/O設(shè)備,批處理器則不作此考慮。批處理中,終止程式執(zhí)行的錯(cuò)誤是可接受的,但代價(jià)昂貴,因?yàn)殄e(cuò)誤糾正後,必須重複全部運(yùn)行。同時(shí),來(lái)自用戶的立即處理和糾正錯(cuò)誤的幫助是不可能的。這樣語(yǔ)言的錯(cuò)誤或例外處理機(jī)制強(qiáng)調(diào)在程式中進(jìn)行錯(cuò)誤/例外處理,使得程式可從大多數(shù)錯(cuò)誤恢復(fù),無(wú)終止地繼續(xù)執(zhí)行碼。批處理的第三特徵是程式時(shí)間限制的缺乏。語(yǔ)言通常不提供監(jiān)控或直接影響執(zhí)行速度的設(shè)施。語(yǔ)言特性的實(shí)現(xiàn)也通常反映出時(shí)間限制的缺乏。程式結(jié)構(gòu)通常包含一個(gè)主程序和一個(gè)副程式集合,如:C、Fortran、Pascal等。副程式完全由編譯器處理,編譯器在工作時(shí)間內(nèi)很少和程式員交流。互動(dòng)式環(huán)境當(dāng)前的PC機(jī)和工作站大多如此使用,程式在執(zhí)行過(guò)程中直接和用戶交互,從鍵盤或mouse接收數(shù)據(jù)並送到顯示器顯示。如字處理、遊戲、數(shù)據(jù)管理、CAI等。影響:互動(dòng)式I/O完全不同於一般的檔操作.錯(cuò)誤處理方式不同,一旦錯(cuò)誤輸入,程式可能顯示錯(cuò)誤消息並請(qǐng)求糾正,在程式中處理錯(cuò)誤的設(shè)施並不重要,錯(cuò)誤時(shí)終止程式通常是不可接受的。必須經(jīng)常使用某種時(shí)間限制,至少必須有可以忍受的時(shí)間反應(yīng)。有時(shí),長(zhǎng)時(shí)間不輸入會(huì)導(dǎo)致其他操作的調(diào)用。主程序的概念通常不存在。程式由一系列副程式構(gòu)成,用戶在終端輸入“主程序”作為命令序列。和用戶的交互形式為:請(qǐng)求命令,按命令執(zhí)行,請(qǐng)求另一命令。嵌入式系統(tǒng)環(huán)境一個(gè)用於控制一個(gè)大系統(tǒng)的部分的電腦系統(tǒng)稱為嵌入式系統(tǒng)(成為大系統(tǒng)的有機(jī)集成部分,其失誤將導(dǎo)致整個(gè)大系統(tǒng)的失?。???煽啃院驼_性是這類系統(tǒng)程式的主要屬性。影響:嵌入式系統(tǒng)的程式通常沒(méi)有操作系統(tǒng)的支持,也沒(méi)有通常的檔和I/O設(shè)備環(huán)境,程式必須和非標(biāo)準(zhǔn)的I/O設(shè)備直接交互,通常使用特殊的過(guò)程。因此,語(yǔ)言通常不考慮檔和麵向檔的I/O操作。特殊設(shè)備的訪問(wèn)能力是必須提供的:通過(guò)訪問(wèn)特殊的硬體寄存器、存儲(chǔ)位置中斷處理器或以彙編或其他低級(jí)語(yǔ)言書寫的副程式。錯(cuò)誤處理是十分重要的。每個(gè)程式應(yīng)準(zhǔn)備好處理所有錯(cuò)誤,採(cǎi)取適當(dāng)?shù)膭?dòng)作去恢復(fù)和繼續(xù)。程式終止是不可接受的,除非災(zāi)難性的系統(tǒng)失誤。通常也無(wú)用戶提供交互幫助。錯(cuò)誤處理還必須處理系統(tǒng)部件的失?。ǔ艘话愕腻e(cuò)誤外)。嵌入系統(tǒng)總是涉及即時(shí)操作,即能對(duì)輸入作出及時(shí)反應(yīng)並同時(shí)產(chǎn)生輸出,語(yǔ)言必須具有時(shí)間設(shè)施。嵌入式電腦系統(tǒng)通常是分佈系統(tǒng),涉及多個(gè)電腦。這樣,運(yùn)行的程式通常是一個(gè)併發(fā)執(zhí)行的任務(wù)集,每個(gè)任務(wù)控制或監(jiān)控一個(gè)局部。如果有主程序,也僅僅是為了初始化任務(wù)的執(zhí)行,一旦初始化後,任務(wù)通常併發(fā)運(yùn)行,且無(wú)限地運(yùn)行,除非整個(gè)系統(tǒng)失敗或關(guān)閉。程式設(shè)計(jì)環(huán)境這是程式創(chuàng)建和測(cè)試的環(huán)境,和操作環(huán)境相比,它對(duì)程式設(shè)計(jì)影響稍小,然而,普遍的認(rèn)識(shí)是:好的程式設(shè)計(jì)環(huán)境對(duì)程式生產(chǎn)有較大影響,程式設(shè)計(jì)環(huán)境通常包含一個(gè)支持工具的集合和調(diào)用它們的命令集(編輯器、調(diào)試器、驗(yàn)證器、測(cè)試數(shù)據(jù)生成器、美化列印器等)。對(duì)語(yǔ)言的影響主要體現(xiàn)在兩個(gè)方面:分開(kāi)編譯和部件裝配,程式測(cè)試和調(diào)試分開(kāi)編譯——這對(duì)大型程式的實(shí)現(xiàn)非常重要分開(kāi)編譯的困難在於:編譯一個(gè)副程式時(shí),編譯器可能需要其他副程式或共用數(shù)據(jù)對(duì)象的資訊。所需指導(dǎo)的資訊包括:1、被調(diào)用副程式的參數(shù)的數(shù)量、類型、順序等的規(guī)約,允許編譯器檢查外部副程式的調(diào)用是否有效。其他副程式的書寫語(yǔ)言也是需要知道的,編譯器可以據(jù)此設(shè)置適當(dāng)調(diào)用順序,以傳送數(shù)據(jù)和控制資訊。2、被引用變數(shù)的類型聲明是需要的,允許編譯器確定外部變數(shù)的存儲(chǔ)表示,使得引用可以用適合的訪問(wèn)格式來(lái)編譯。3、外部定義而在內(nèi)部聲明使用的數(shù)據(jù)類型的定義是需要的,允許編譯器分配存儲(chǔ)和計(jì)算局部數(shù)據(jù)格式。為了提供關(guān)於分開(kāi)編譯的副程式、共用數(shù)據(jù)對(duì)象和類型定義的資訊,通常有三個(gè)方法:1、語(yǔ)言可能需要資訊在副程式中重新申明(如Fortran)。2、指定特殊的編譯順序,先編譯所需的外部資訊(如Ada、Pascal)3、需要在編譯過(guò)程中包含相關(guān)規(guī)約的庫(kù)的存在,使得編譯器可隨時(shí)查詢(Ada、C++)方法一又可稱為獨(dú)立編譯每個(gè)副程式可不需外部資訊而獨(dú)立編譯,副程式是完全自包含的。缺點(diǎn)是:沒(méi)有辦法檢查內(nèi)外資訊的一致性。這種不一致錯(cuò)誤只能在裝配階段才可能知道。方法二、三需要工具將副程式、類型定義和公共環(huán)境的規(guī)約放到庫(kù)中。通常副程式的體(body,含局部變數(shù)和語(yǔ)句)可以略去,只需規(guī)約。體部分可在以後分開(kāi)編譯。如Ada中,每個(gè)副程式、任務(wù)或包分成兩個(gè)部分(可以分開(kāi)編譯):規(guī)約和體。一個(gè)對(duì)尚未編譯的副程式的調(diào)用稱為Stub,包含Stub的副程式可以執(zhí)行。但當(dāng)?shù)竭_(dá)Stub點(diǎn)時(shí),該調(diào)用產(chǎn)生一個(gè)系統(tǒng)診斷資訊而不進(jìn)行實(shí)際調(diào)用,從而可達(dá)到單獨(dú)測(cè)試目的。分開(kāi)編譯影響語(yǔ)言設(shè)計(jì)的另一面是共用名(不同開(kāi)發(fā)者可能對(duì)子程式類型定義、公共變數(shù)使用相同的名)的使用。通常解決共用名的方法有三:1、每個(gè)共用名必須是唯一的(由程式員來(lái)保證),如C中extern中的變數(shù)名。命名約定用於每個(gè)小組使用不同的副程式名(如固定的名字首碼),如C中的_綴。2、語(yǔ)言常使用作用域(Scope)(在嵌套情況下,只有最外層副程式中的名對(duì)外可知)規(guī)則來(lái)隱藏名字。3、通過(guò)顯式地加入來(lái)自外部的定義而使名字可用,OOPL的繼承即為這種機(jī)制,通過(guò)包含外部定義的類在一個(gè)副程式中,該類定義的其他對(duì)象也就自然可知。Ada中,名字可以重載,n個(gè)對(duì)象可有相同名字,需編譯器來(lái)指定實(shí)際的引用。測(cè)試和調(diào)試大多數(shù)語(yǔ)言會(huì)有輔助程式測(cè)試和調(diào)試的特性。1、執(zhí)行追蹤。Prolog、LISP和很多其他交互語(yǔ)言提供了允許特殊語(yǔ)句和變數(shù)被標(biāo)誌為執(zhí)行時(shí)“追蹤”。當(dāng)標(biāo)記的語(yǔ)句被執(zhí)行或標(biāo)記的變數(shù)被賦新值時(shí),程式的執(zhí)行中斷,指定的追蹤副程式被調(diào)用。2、中斷點(diǎn)(Breakpoint)。在互動(dòng)式編程環(huán)境中,語(yǔ)言常提供中斷點(diǎn)設(shè)施,當(dāng)達(dá)到中斷點(diǎn),執(zhí)行中止,控制權(quán)交給程式員,他可檢查或修改變數(shù)值並且開(kāi)始程式執(zhí)行。3、斷言(Assertion)。斷言是一個(gè)條件運(yùn)算式,插入在程式中。例:assert(x>0andA=1)or(x=0andA>B+10)斷言陳述了在指定點(diǎn)變數(shù)值間應(yīng)有的關(guān)係。當(dāng)斷言被“使能”,編譯器插入相應(yīng)的代碼來(lái)測(cè)試被陳述的條件,條件不成立,則執(zhí)行終止,調(diào)用例外處理。程式正確後,可將斷言設(shè)置掉重編譯,此時(shí),它只作為注釋用。早期的語(yǔ)言設(shè)計(jì)需使程式能高效地運(yùn)行於昂貴的硬體上,因此,早期語(yǔ)言總以翻譯成高效的機(jī)器碼為目標(biāo),既使程式難以書寫。現(xiàn)在,硬體價(jià)格下降、軟體價(jià)格上升,更強(qiáng)調(diào)程式容易書寫,即使慢點(diǎn)也可。例如,ML的類型特性、C++的類、Ada的Package均在執(zhí)行速度上有代價(jià),但對(duì)保證程式正確性有幫助。開(kāi)發(fā)語(yǔ)言時(shí),有三個(gè)影響語(yǔ)言設(shè)計(jì)的主要因素:電腦本身在電腦上支持語(yǔ)言的執(zhí)行模型,即虛擬電腦語(yǔ)言所實(shí)現(xiàn)的計(jì)算模型2.1電腦的結(jié)構(gòu)和操作一個(gè)電腦是能夠存儲(chǔ)和執(zhí)行程式的數(shù)據(jù)結(jié)構(gòu)和演算法的集成集合。電腦可構(gòu)造為實(shí)際的物理設(shè)備,用導(dǎo)線、積體電路、電路板等。此即實(shí)際電腦或稱硬體電腦。電腦構(gòu)造為軟體,用運(yùn)行於其他電腦上的程式。此即軟體仿真電腦。程式設(shè)計(jì)語(yǔ)言的實(shí)現(xiàn)是通過(guò)一個(gè)翻譯器,將以語(yǔ)言書寫的程式翻譯為機(jī)器語(yǔ)言程式(可為某電腦直接執(zhí)行,可以是硬體電腦,也可以為軟硬參雜的虛擬機(jī))。一個(gè)電腦包含6個(gè)主要部件,它們緊密地對(duì)應(yīng)於程式設(shè)計(jì)語(yǔ)言的主要方面。1、數(shù)據(jù):電腦必須提供各種基本資料項(xiàng)目和操作的數(shù)據(jù)結(jié)構(gòu)。2、基本操作:必須提供對(duì)運(yùn)算元據(jù)有用的基本操作集。3、順序控制:必須提供控制基本操作執(zhí)行順序的機(jī)制。4、數(shù)據(jù)訪問(wèn):必須提供控制向操作的執(zhí)行供給數(shù)據(jù)的機(jī)制。5、存儲(chǔ)管理:必須提供控制程式和數(shù)據(jù)存儲(chǔ)分配的機(jī)制。6、操作環(huán)境:必須提供與包圍程式和被處理數(shù)據(jù)的外部環(huán)境通訊的機(jī)制。電腦硬體一個(gè)典型的傳統(tǒng)電腦組織如下:包括程式和被處理的數(shù)據(jù)操作主存和高速緩存中的數(shù)據(jù)在主存和外部環(huán)境間傳遞程式或數(shù)據(jù)完成處理工作取機(jī)器指令解碼調(diào)用指定的基本操作,以指定的運(yùn)算元作為輸入數(shù)據(jù)有三個(gè)主要的存貯部件:主存,高速寄存和外部檔。主存:組織為線性位串,可分為定長(zhǎng)的字(32或64)或8位位元組。寄存器:字長(zhǎng)度的位串,可能有特殊的子域可直接訪問(wèn),可存數(shù)據(jù)或主存地址。外部檔:存在盤、帶或CD-ROM上,按記錄劃分,記錄是位或位元組的序列。一個(gè)電腦有被硬體基本操作直接操作的固有數(shù)據(jù)類型。一般有:整數(shù)、單精確度實(shí)數(shù)(浮點(diǎn)數(shù))、定長(zhǎng)字串、定長(zhǎng)位串等。除了明顯的硬體數(shù)據(jù)元素外,程式(也有固有的內(nèi)部表示,稱為機(jī)器語(yǔ)言表示)也是一種數(shù)據(jù)形式。機(jī)器語(yǔ)言程式可構(gòu)造為存儲(chǔ)位置的序列,每個(gè)包含一或多條指令,每條包括操作碼和若干運(yùn)算元(指示)。操作電腦必須包含有一個(gè)固有的基本操作集,通常和機(jī)器語(yǔ)言指令中操作碼一一對(duì)應(yīng)。典型的操作集包括在固有數(shù)值類型上的基本算術(shù)操作。測(cè)試資料項(xiàng)目各種性質(zhì)的基本操作。訪問(wèn)和修改資料項(xiàng)目的基本操作??刂艻/O設(shè)備的基本操作。順序控制的基本操作。傳統(tǒng)的機(jī)器是CISC,complexinstructionsetcomputers.新近發(fā)展的是RISC,reducedinstructionsetcomputers.更少的基本指令,更簡(jiǎn)單的內(nèi)部邏輯。順序控制程式地址寄存器(位置計(jì)數(shù)器)的內(nèi)容決定了下一條將執(zhí)行的指令,即包含了下條指令的地址。某些基本操作允許修改程式寄存器,從而傳遞控制到程式的其他部分。解釋器實(shí)際地使用程式地址寄存器並指導(dǎo)操作序列。解釋器是電腦操作的中心,其週期動(dòng)作如圖所示:數(shù)據(jù)訪問(wèn)除了操作碼外,每個(gè)機(jī)器指令必須指明所需的運(yùn)算元(必須在主存或寄存器中)電腦必須結(jié)合指定運(yùn)算元的手段和從給定運(yùn)算元指示器檢索運(yùn)算元的機(jī)制。同時(shí),操作的結(jié)果也必須存儲(chǔ)在指定的位置。傳統(tǒng)的存儲(chǔ)控制機(jī)制是為存儲(chǔ)位置設(shè)定整數(shù)地址,提供操作從給定地址的位置檢索內(nèi)容和存儲(chǔ)新值。寄存器也賦以整數(shù)地址。存儲(chǔ)管理機(jī)器設(shè)計(jì)的一個(gè)驅(qū)動(dòng)原則是保持所有電腦資源盡可能多地被使用,中心衝突是:CPU中的操作是納秒級(jí)(一個(gè)操作10—50ns)訪問(wèn)主存是是微秒級(jí)(0.1~0.2微秒,100—200ns)外部數(shù)據(jù)操作是毫秒級(jí)(15—30毫秒)這樣在內(nèi)外速度間相差1000,000倍。為了平衡速度差異,各種存儲(chǔ)管理機(jī)制是必須的。1、在最簡(jiǎn)單的設(shè)計(jì)(如低價(jià)PC)中,只有簡(jiǎn)單的存儲(chǔ)管理設(shè)施。程式和數(shù)據(jù)執(zhí)行時(shí)駐留記憶體,在一個(gè)時(shí)刻只有一個(gè)程式準(zhǔn)備執(zhí)行。雖然CPU必須等待數(shù)據(jù),它也是價(jià)格有效的,因?yàn)椴恍杓尤敫郊佑搀w。2、為加速外部數(shù)據(jù)訪問(wèn)和CPU間的平衡,操作系統(tǒng)常使用多道程序設(shè)計(jì),當(dāng)?shù)却撩肴プx數(shù)據(jù)時(shí),電腦將執(zhí)行另一個(gè)程式。為了保證多個(gè)程式同時(shí)駐留主存,通常有硬體設(shè)施負(fù)責(zé)頁(yè)面查找或動(dòng)態(tài)程式重定位,頁(yè)面查找通過(guò)預(yù)測(cè)進(jìn)行,預(yù)測(cè)在最近將來(lái)最可能使用的頁(yè)面,將其放入主存。如在主存,則程式執(zhí)行,否則,出現(xiàn)頁(yè)間錯(cuò),操作系統(tǒng)將從外存中讀取所需頁(yè),同時(shí)執(zhí)行別的程式。3、為加速主存和CPU間的不平衡,常使用Cache記憶體(小的高速數(shù)據(jù)存儲(chǔ))。Cache可允許電腦操作,好象主存具有和CPU相同速度,通常是1K到256K位元組,32K的Cache,可達(dá)到95%的選中率。操作環(huán)境電腦的操作環(huán)境通常包括週邊記憶體和I/O設(shè)備,這些設(shè)備表示了電腦的外部世界,和電腦的任何通訊必須通過(guò)它們。操作環(huán)境中通常有硬體的不同,如:高速存儲(chǔ)(擴(kuò)展記憶體),中速存儲(chǔ)(磁片),低速存儲(chǔ)(磁帶)和I/O設(shè)備。各種電腦體系結(jié)構(gòu)電腦硬體的組織有多種形式,上面的討論是基於VonNeumann體系結(jié)構(gòu)。VonNeumann體系結(jié)構(gòu):命名來(lái)源於數(shù)學(xué)家JohnvonNeumann,他在40年代開(kāi)發(fā)這個(gè)初始設(shè)計(jì),作為ENIAC電腦設(shè)計(jì)的一部分,現(xiàn)今電腦仍屬此體系結(jié)構(gòu)。多處理器:VonNeumann設(shè)計(jì)的最大問(wèn)題是外部數(shù)據(jù)設(shè)備的慢速和CPU寄存器高速間的矛盾。解決方案之一是在指定系統(tǒng)中使用多個(gè)CPU,這樣的多處理系統(tǒng)已使用了30多年,通過(guò)幾個(gè)相對(duì)不昂貴的CPU的粘合,再加上單一的主存、磁片、磁帶等,得到一個(gè)高效系統(tǒng)。操作系統(tǒng)將不同程式運(yùn)行於不同CPU上,從而整個(gè)性能得到改善。語(yǔ)言和系統(tǒng)設(shè)計(jì)正在演化,使得能夠書寫程式在多個(gè)電腦上執(zhí)行並相互通訊。電腦狀態(tài)對(duì)電腦靜態(tài)組織的瞭解只是一個(gè)部分,全面瞭解則涉及電腦在程式執(zhí)行時(shí)的動(dòng)態(tài)操作,包括:執(zhí)行開(kāi)始時(shí)各存儲(chǔ)部件的內(nèi)容,操作執(zhí)行順序。執(zhí)行進(jìn)行時(shí)如何修改各種數(shù)據(jù)部件,程式執(zhí)行的最後結(jié)果等。通常對(duì)電腦動(dòng)態(tài)行為的觀察是通過(guò)電腦狀態(tài)(執(zhí)行過(guò)程中某點(diǎn)主存、寄存器和外存的內(nèi)容決定)的概念。程式的執(zhí)行體現(xiàn)為一系列狀態(tài)的變化初始狀態(tài)通過(guò)一系列狀態(tài)變遷(從當(dāng)前狀態(tài)通過(guò)存貯內(nèi)容的修改進(jìn)入新的狀態(tài)),得到最終狀態(tài)。如果我們可以預(yù)測(cè)狀態(tài)變遷序列,則可以聲稱瞭解了電腦的動(dòng)態(tài)行為。固件電腦如前定義,電腦=演算法集+數(shù)據(jù)結(jié)構(gòu)集 可執(zhí)行程式表示為電腦的機(jī)器語(yǔ)言程式通常認(rèn)為電腦操作在相當(dāng)?shù)图?jí)的機(jī)器語(yǔ)言之上,具有簡(jiǎn)單的指令格式。然而,機(jī)器語(yǔ)言並不一定限制到低級(jí)??梢赃x擇任何程式設(shè)計(jì)語(yǔ)言,精確地刻劃數(shù)據(jù)結(jié)構(gòu)集和定義程式執(zhí)行規(guī)則的演算法,這樣該電腦的“機(jī)器語(yǔ)言”就是該高級(jí)語(yǔ)言。每個(gè)程式定義了電腦的初態(tài),程式執(zhí)行的規(guī)則定義了程式執(zhí)行過(guò)程中狀態(tài)的變遷序列,程式執(zhí)行結(jié)果由程式執(zhí)行完成後電腦的終態(tài)決定。給定一個(gè)精確的電腦定義,總是可能將其用硬體實(shí)現(xiàn),從而可使電腦的機(jī)器語(yǔ)言為C、Ada、或其他高級(jí)語(yǔ)言。如此考慮的一個(gè)重要的基本原則是:任何精確定義的演算法或數(shù)據(jù)結(jié)構(gòu)可以用硬體實(shí)現(xiàn)。電腦簡(jiǎn)單地是演算法和數(shù)據(jù)結(jié)構(gòu)的集合,我們可以假定其硬體實(shí)現(xiàn)是可能的,不管其複雜度和相應(yīng)的機(jī)器語(yǔ)言。實(shí)際的電腦通常有相當(dāng)?shù)图?jí)的機(jī)器語(yǔ)言。高級(jí)語(yǔ)言作為機(jī)器語(yǔ)言會(huì)使機(jī)器非常複雜,具應(yīng)用靈活性較差。一個(gè)具有低級(jí)通用指令集和簡(jiǎn)單的、無(wú)結(jié)構(gòu)的主存和寄存器的電腦可以被編程為相當(dāng)廣範(fàn)圍的高效電腦。一個(gè)常用的選擇(相對(duì)於電腦的嚴(yán)格硬體實(shí)現(xiàn))是固件電腦,由運(yùn)行在特殊的微可偏程硬體電腦上運(yùn)行的微程式來(lái)仿真。這種電腦的機(jī)器語(yǔ)言是絕對(duì)低級(jí)的微指令集,用微指令集可編碼得到微程式,微程式將仿真所希望的電腦的操作,並定義瞭解釋週期和各種基本操作。通常微程式本身駐留在特殊的只讀記憶體中,由宿主機(jī)硬體高速執(zhí)行,這種電腦在執(zhí)行速度上和硬體直接實(shí)現(xiàn)電腦無(wú)太大差別。電腦的微程式仿真有時(shí)可稱為emulation(仿真),該電腦稱為虛擬機(jī),因?yàn)闄C(jī)器本身並不存在。翻譯器和軟體仿真電腦理論上,有可能直接構(gòu)造硬體或固件電腦,運(yùn)行任何特殊的程式設(shè)計(jì)語(yǔ)言,但構(gòu)造這樣的電腦並不經(jīng)濟(jì)。現(xiàn)實(shí)的考慮是實(shí)際電腦採(cǎi)用低級(jí)機(jī)器語(yǔ)言(基於速度、靈活性和價(jià)格考慮),編程仍以高級(jí)語(yǔ)言進(jìn)行。語(yǔ)言實(shí)現(xiàn)者面臨的任務(wù)是如何使高級(jí)語(yǔ)言程式執(zhí)行在實(shí)際電腦上,不管其機(jī)器語(yǔ)言。這個(gè)實(shí)現(xiàn)問(wèn)題有兩個(gè)基本方案。1、翻譯(編譯)高級(jí)語(yǔ)言程式→翻譯器→等價(jià)的機(jī)器語(yǔ)言程式→硬體直接執(zhí)行源語(yǔ)言→目標(biāo)語(yǔ)言幾種特殊類型的翻譯器:A、彙編器目標(biāo)語(yǔ)言:實(shí)際電腦的機(jī)器語(yǔ)言源語(yǔ)言:組合語(yǔ)言,機(jī)器語(yǔ)言的符號(hào)表示大多數(shù)指令是一對(duì)一的翻譯B、編譯器目標(biāo)語(yǔ)言:彙編和機(jī)器語(yǔ)言源語(yǔ)言:高級(jí)語(yǔ)言C、裝配器或連接編輯器(loader/linkeditor)目標(biāo)語(yǔ)言:實(shí)際的機(jī)器代碼源語(yǔ)言:幾乎相同於機(jī)器代碼,通常包含可重定位的機(jī)器語(yǔ)言程式和數(shù)據(jù)表(刻劃可重定位代碼為變成真正可執(zhí)行所必須修改的地方)D、預(yù)處理器或宏處理器源語(yǔ)言:某種高級(jí)語(yǔ)言的擴(kuò)展形式目標(biāo)語(yǔ)言:同樣語(yǔ)言的標(biāo)準(zhǔn)形式。通常進(jìn)行宏替換。高級(jí)源語(yǔ)言到可執(zhí)行機(jī)器語(yǔ)言的翻譯通常涉及多個(gè)翻譯步驟,有時(shí),編譯本本身也涉及多遍(多步),如:先產(chǎn)生某種中間形式。2、軟體仿真(軟體解釋)我們可以通過(guò)運(yùn)行在另一臺(tái)宿主機(jī)上的程式仿真一臺(tái)電腦,其機(jī)器語(yǔ)言為高級(jí)語(yǔ)言。用宿主機(jī)的機(jī)器語(yǔ)言構(gòu)造一個(gè)程式集(表達(dá)高級(jí)語(yǔ)言執(zhí)行必需的演算法和數(shù)據(jù)結(jié)構(gòu)),即用軟體構(gòu)造運(yùn)行於宿主機(jī)上的高級(jí)語(yǔ)言電腦,稱為高級(jí)語(yǔ)言電腦在宿主機(jī)上的軟體仿真(或軟體解釋)。仿真電腦接受高級(jí)語(yǔ)言程式作為輸入,主仿真器程式完成解釋演算法(解碼並執(zhí)行語(yǔ)言),最後從程式產(chǎn)生輸出。軟體仿真和翻譯的不同:均以高級(jí)語(yǔ)言程式為輸入,但是,翻譯為目標(biāo)碼後再運(yùn)行於實(shí)際電腦上仿真電腦直接執(zhí)行輸入程式翻譯器以物理輸入順序處理程式語(yǔ)句,每個(gè)語(yǔ)句只處理一次。仿真器以邏輯控制流處理程式,可能重複處理某些語(yǔ)句而完全忽略其他語(yǔ)句。純粹的翻譯和純粹的仿真形成兩個(gè)極端全翻譯是很少的,除了輸入語(yǔ)言和輸出語(yǔ)言非常相似,如組合語(yǔ)言。全仿真也非常少,除了操作系統(tǒng)控制語(yǔ)言或互動(dòng)式語(yǔ)言情形。通常語(yǔ)言實(shí)現(xiàn)是二者的結(jié)合。如圖所示。翻譯和仿真各有不同優(yōu)點(diǎn)有的程式結(jié)構(gòu)最好翻譯成更簡(jiǎn)單的形式,——如迴圈中語(yǔ)句多次執(zhí)行,翻譯可省去解碼時(shí)間。有的方面最好保持原有形式,在執(zhí)行時(shí)根據(jù)需要處理。翻譯的主要缺點(diǎn)是失去了關(guān)於程式的一些資訊。單個(gè)的高級(jí)語(yǔ)言語(yǔ)句比單條機(jī)器語(yǔ)言指令含有更多資訊。仿真的優(yōu)缺點(diǎn)基本正好相反。不需要太多的空間來(lái)存儲(chǔ)代碼序列的多份拷貝。但解碼代價(jià)高。通常,如源語(yǔ)言結(jié)構(gòu)在目標(biāo)語(yǔ)言中有直接表示,則代碼擴(kuò)展不太嚴(yán)重,可採(cǎi)用翻譯。其他情形,可採(cǎi)用仿真。是否程式執(zhí)行時(shí)的基本表示為實(shí)際機(jī)器的機(jī)器語(yǔ)言,形成了語(yǔ)言劃分的基礎(chǔ)。1、編譯型語(yǔ)言。如:C、C++、Fortran、Ada等源語(yǔ)言翻成機(jī)器碼,仿真僅限於一些運(yùn)行支持例程(用於仿真源語(yǔ)言中和機(jī)器語(yǔ)言沒(méi)有緊密類似的基本操作)。通過(guò)硬體解釋器,可實(shí)現(xiàn)更快的程式執(zhí)行。當(dāng)然,也可能有的部分仍採(cǎi)用軟體仿真,如數(shù)據(jù)控制結(jié)構(gòu)和存儲(chǔ)管理。2、解釋型語(yǔ)言。如:LISP、ML、Prolog、Smalltalk等翻譯器不是產(chǎn)生機(jī)器代碼,而是產(chǎn)生某種中間形式,比源語(yǔ)言更易執(zhí)行。然後使用軟體解釋器對(duì)中間代碼進(jìn)行執(zhí)行。通常執(zhí)行慢,也需要對(duì)基本操作、存儲(chǔ)管理和其他語(yǔ)言特性的仿真,這類語(yǔ)言翻譯器很簡(jiǎn)單,更多的複雜性在軟體仿真。2.2虛擬電腦和綁定時(shí)間電腦的構(gòu)造方式1、通過(guò)硬體實(shí)現(xiàn),直接使用物理設(shè)備2、固件實(shí)現(xiàn),在合適的硬體電腦上使用微程式設(shè)計(jì)3、軟體仿真,在宿主機(jī)上用某種語(yǔ)言實(shí)現(xiàn)4、上述技術(shù)的組合,各自選擇合適的實(shí)現(xiàn)方式當(dāng)一個(gè)程式設(shè)計(jì)語(yǔ)言被實(shí)現(xiàn),程式執(zhí)行時(shí)使用的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu)和演算法定義了一個(gè)電腦。類似電腦的固件實(shí)現(xiàn),我們稱其為由語(yǔ)言實(shí)現(xiàn)定義的虛擬電腦。該虛擬機(jī)的機(jī)器語(yǔ)言是該語(yǔ)言的翻譯器產(chǎn)生的可執(zhí)行程式(形式:對(duì)編譯是實(shí)際的機(jī)器碼形式;對(duì)解釋是某種任意結(jié)構(gòu));其數(shù)據(jù)結(jié)構(gòu)是程式運(yùn)行時(shí)使用的運(yùn)行時(shí)數(shù)據(jù)結(jié)構(gòu);基本操作是那些運(yùn)行時(shí)實(shí)際可執(zhí)行的;順序控制、數(shù)據(jù)控制和存貯管理結(jié)構(gòu)也是那些運(yùn)行時(shí)使用的,不管其是用軟體、硬體或微程式表示。語(yǔ)法和語(yǔ)義語(yǔ)法:程式看起來(lái)象什麼。語(yǔ)法規(guī)則規(guī)定了如何書寫語(yǔ)句、聲明和其他語(yǔ)言結(jié)構(gòu)。語(yǔ)義:對(duì)各種語(yǔ)法結(jié)構(gòu)賦予的含義。在語(yǔ)言手冊(cè)和其他語(yǔ)言描述中,通常圍繞語(yǔ)言中的各種語(yǔ)法結(jié)構(gòu)組織語(yǔ)言描述。典型地,給出語(yǔ)法(對(duì)一個(gè)語(yǔ)言結(jié)構(gòu),如語(yǔ)句、聲明),然後給出語(yǔ)義,BNF是主要的語(yǔ)法記號(hào)體系。本書的組織方式略有不同,圍繞和虛擬機(jī)相關(guān)聯(lián)的結(jié)構(gòu)來(lái)組織,這種風(fēng)格用用在虛擬機(jī)中的數(shù)據(jù)結(jié)構(gòu)和操作來(lái)描述語(yǔ)言的語(yǔ)義。有時(shí),這些數(shù)據(jù)結(jié)構(gòu)和操作是直接和語(yǔ)言語(yǔ)法中的特殊結(jié)構(gòu)相關(guān)聯(lián)的,而通常,這種聯(lián)繫並不是太直接。如:Pascal虛擬機(jī)中可能在程式執(zhí)行中使用向量,而向量結(jié)構(gòu)是在聲明中直接給出的;然而,虛擬機(jī)也可能有其他不能在程式中直接可見(jiàn)數(shù)據(jù)結(jié)構(gòu),如副程式“活躍記錄”的中心棧。這些“隱藏”的虛擬機(jī)結(jié)構(gòu)和那些直接對(duì)應(yīng)程式員寫在程式中的某些東西的“可見(jiàn)”結(jié)構(gòu)一樣,對(duì)更好地瞭解語(yǔ)言同等重要。因此,這裏的討論是圍繞在虛擬機(jī)中看到的結(jié)構(gòu),而不僅僅是語(yǔ)法元素來(lái)進(jìn)行的。一個(gè)特殊的虛擬機(jī)元素可能在程式中沒(méi)有語(yǔ)法表示;可被單個(gè)語(yǔ)法元素直接表示;可被幾個(gè)分開(kāi)的語(yǔ)法元素表示(由翻譯器合起來(lái)產(chǎn)生一個(gè)虛擬機(jī)元素)。虛擬機(jī)和語(yǔ)言實(shí)現(xiàn)如果語(yǔ)言用它們的虛擬機(jī)來(lái)定義,使得每個(gè)語(yǔ)言和一個(gè)共同理解的虛擬機(jī)相關(guān)聯(lián),則使用虛擬機(jī)來(lái)描述語(yǔ)言的語(yǔ)義是直接的。然而,語(yǔ)言定義通常是個(gè)體地對(duì)每個(gè)語(yǔ)法結(jié)構(gòu)給出語(yǔ)義,語(yǔ)言定義僅隱含地刻劃了一個(gè)虛擬機(jī)。語(yǔ)言在不同電腦上的每次實(shí)現(xiàn),實(shí)現(xiàn)者都會(huì)從語(yǔ)言定義中看到略微(或非常)不同的虛擬機(jī)。同一語(yǔ)言的兩個(gè)不同實(shí)現(xiàn),可能使用不同的數(shù)據(jù)結(jié)構(gòu)和操作集合(特別是在語(yǔ)法中隱藏的部分)。每個(gè)實(shí)現(xiàn)者有很大自由度確定自己的虛擬機(jī)結(jié)構(gòu),這些是他的語(yǔ)言實(shí)現(xiàn)的基礎(chǔ)。當(dāng)語(yǔ)言在一特定電腦上實(shí)現(xiàn)時(shí),實(shí)現(xiàn)者首先確定表示語(yǔ)言的語(yǔ)義解釋的虛擬機(jī),然後通過(guò)基本電腦提供的軟、硬體元素來(lái)構(gòu)造虛擬機(jī)。語(yǔ)言實(shí)現(xiàn)的組織和結(jié)構(gòu)由實(shí)現(xiàn)者的許多細(xì)微決策確定,需考慮電腦各種軟、硬體設(shè)施和使用代價(jià)。例:虛擬機(jī)如有整數(shù)加和平方根操作,則整數(shù)加可直接用硬體提供的整數(shù)加來(lái)實(shí)現(xiàn),平方根可用軟體仿真,使用一個(gè)副程式。整數(shù)變數(shù)x可直接用存儲(chǔ)位置實(shí)現(xiàn),該位置存放x的值;也可帶有標(biāo)記,由標(biāo)記和指針(擴(kuò)向存取x值的位置)構(gòu)成)。實(shí)現(xiàn)者還需確定什麼通過(guò)翻譯處理?什麼在執(zhí)行中解決?通常,如果在程式翻譯並建立運(yùn)行時(shí)結(jié)構(gòu)的過(guò)程中,採(cǎi)用了某些動(dòng)作,則可以使用一個(gè)特定的表示虛擬機(jī)數(shù)據(jù)結(jié)構(gòu)或操作的方式。如果實(shí)現(xiàn)者略去這些動(dòng)作而簡(jiǎn)化翻譯器,則不同的運(yùn)行時(shí)表示可能是必須的。三個(gè)因素導(dǎo)致相同語(yǔ)言的不同實(shí)現(xiàn)1、實(shí)現(xiàn)者虛擬機(jī)概念的不同(隱含在語(yǔ)言定義中)2、宿主機(jī)提供的設(shè)施的不同3、實(shí)現(xiàn)者如何用宿主機(jī)提供的設(shè)施仿真虛擬機(jī)元素的選擇和如何去構(gòu)造翻譯器支持這些虛擬機(jī)選擇的不同。電腦層次程式員以某種高級(jí)語(yǔ)言編程使用的虛擬機(jī)事實(shí)上形成了一個(gè)虛擬電腦層次。底層:實(shí)際的硬體電腦。通常程式員很少直接使用這個(gè)電腦,一般地,硬體機(jī)被一個(gè)或多個(gè)軟體層(或微程式)變換成一個(gè)虛擬機(jī),它可能和硬體機(jī)有很大不同。二層:由稱為操作系統(tǒng)的例程集合定義的虛擬機(jī)(如微程式形成第二層,那麼這也可稱為第三層)。典型地,OS提供了一系列新的操作和數(shù)據(jù)結(jié)構(gòu)的仿真(這不是由硬體直接提供的)。如:外部檔結(jié)構(gòu)或檔管理原語(yǔ)。OS也從OS定義的虛擬機(jī)上刪去了某些硬體原語(yǔ),使得它們不能由操作系統(tǒng)用戶直接訪問(wèn)。如:關(guān)於I/O、錯(cuò)誤監(jiān)測(cè)、多道程序設(shè)計(jì)和多道處理的硬體原語(yǔ)。OS定義的虛擬機(jī)通常就是高級(jí)語(yǔ)言實(shí)現(xiàn)者使用的機(jī)器。三層:語(yǔ)言實(shí)現(xiàn)者提供了一個(gè)新的軟體層,運(yùn)行於OS虛擬機(jī)上,仿真高級(jí)語(yǔ)言虛擬機(jī)的操作;也提供了翻譯器:將用戶程式翻譯成語(yǔ)言定義虛擬機(jī)的機(jī)器語(yǔ)言。四層:高級(jí)語(yǔ)言定義的虛擬機(jī)並不是層次的最後一層。實(shí)際上,程式員編制的程式形成了新的一層虛擬機(jī)。那麼,什麼是這個(gè)程式員定義的軟體仿真虛擬機(jī)的機(jī)器語(yǔ)言呢?(這個(gè)程式的輸入數(shù)據(jù)將由這個(gè)機(jī)器語(yǔ)言構(gòu)成或?qū)懗桑R坏┏淌絾T建立了一個(gè)程式,必須有一個(gè)“程式”在該程式定義的虛擬機(jī)上運(yùn)行,這個(gè)“程式”通過(guò)選擇合適的輸入數(shù)據(jù)集合而寫成。這個(gè)概念之所以難於理解,是因?yàn)閷?duì)很多程式而言,輸入數(shù)據(jù)非常簡(jiǎn)單,僅僅可稱為最平凡的程式設(shè)計(jì)語(yǔ)言。如:排序程式的機(jī)器語(yǔ)言可認(rèn)為是整數(shù)集,即以一定格式構(gòu)成的整數(shù)表為程式。然而,明顯的是:每一個(gè)在我們上述層次上構(gòu)造較低層次的程式員必須記住這個(gè)觀點(diǎn),因?yàn)樵诿恳粚訕?gòu)造的程式和數(shù)據(jù)結(jié)構(gòu)事實(shí)上表示了下一層程式員編程使用的虛擬機(jī)的仿真。上面討論中一個(gè)隱含的中心概念是:程式和數(shù)據(jù)是等價(jià)的。我們習(xí)慣於在編程中將對(duì)象區(qū)分為“程式”和“數(shù)據(jù)”,這通常是一種有用的直覺(jué)的區(qū)分,但如上所討論,這種區(qū)分是一種表面性的。在某語(yǔ)境中的程式可能在另外的語(yǔ)境中變成數(shù)據(jù)。如:我們寫Pascal程式,但對(duì)Pascal編譯器來(lái)說(shuō),該程式是被輸入處理的數(shù)據(jù),其輸出是機(jī)器語(yǔ)言程式。如果觀察程式的執(zhí)行,你會(huì)發(fā)現(xiàn)它又是執(zhí)行電腦中解釋器的數(shù)據(jù)。我們總是將某程式的輸入等價(jià)為將被處理的數(shù)據(jù)或?qū)⒈粓?zhí)行的程式。進(jìn)一步考慮這個(gè)問(wèn)題(等價(jià)性)。如:在C、Fortran語(yǔ)言中,表示可執(zhí)行程式的存儲(chǔ)空間通常是和其數(shù)據(jù)空間分開(kāi)的。但在LISP和Prolog中,則沒(méi)有不同,程式和數(shù)據(jù)是混合的,只有執(zhí)行過(guò)程可將其區(qū)分開(kāi)來(lái)。綁定和綁定時(shí)間不嚴(yán)格地說(shuō),一個(gè)程式元素到某特定特徵或性質(zhì)的綁定,僅是從一個(gè)可能性質(zhì)的集合中性質(zhì)的簡(jiǎn)單選擇。決定這個(gè)選擇的程式陳述或處理的時(shí)間稱為性質(zhì)對(duì)元素的綁定時(shí)間。語(yǔ)言中有不同的綁定和不同的綁定時(shí)間。綁定時(shí)間的類型對(duì)綁定類型沒(méi)有簡(jiǎn)單的分類,但可區(qū)分出一些主要的綁定時(shí)間。這裏,我們基於一個(gè)基本假設(shè):程式的處理總是先翻譯,後執(zhí)行。1、執(zhí)行時(shí)(運(yùn)行時(shí))很多綁定是在程式執(zhí)行過(guò)程中完成的。如:變數(shù)到值的綁定,變數(shù)到特定存儲(chǔ)位置的綁定(在很多語(yǔ)言中)。進(jìn)一步可分為:a.進(jìn)入副程式或塊時(shí)。大多數(shù)語(yǔ)言中,重要的綁定只限制發(fā)生在執(zhí)行中進(jìn)入副程式或塊時(shí),如C、Fortran中形參到實(shí)參、以及形參到特定存儲(chǔ)位置的綁定。b.在執(zhí)行中的任意點(diǎn)。某些綁定可以發(fā)生在程式執(zhí)行中的任意點(diǎn),如:變數(shù)通過(guò)賦值到值的綁定,以及在LISP、ML中,名字到存儲(chǔ)位置的綁定。2、翻譯時(shí)(編
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 金融幫扶框架協(xié)議書
- 律師委托代理協(xié)議包干
- 2025版?zhèn)€人獨(dú)資企業(yè)股權(quán)置換及轉(zhuǎn)讓合同范本2篇
- 2025版二手房買賣退房條件協(xié)議書
- 2025-2030全球液體金合歡烯橡膠行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球變頻用移相變壓器行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球國(guó)防輕型戰(zhàn)術(shù)車輛行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 2025-2030全球高性能碳纖維材料行業(yè)調(diào)研及趨勢(shì)分析報(bào)告
- 食堂炊事員聘用協(xié)議范本
- 2025年度個(gè)人自有房產(chǎn)租賃轉(zhuǎn)租委托協(xié)議3篇
- 電纜擠塑操作手冊(cè)
- 浙江寧波鄞州區(qū)市級(jí)名校2025屆中考生物全真模擬試卷含解析
- 2024-2025學(xué)年廣東省深圳市南山區(qū)監(jiān)測(cè)數(shù)學(xué)三年級(jí)第一學(xué)期期末學(xué)業(yè)水平測(cè)試試題含解析
- IATF16949基礎(chǔ)知識(shí)培訓(xùn)教材
- 【MOOC】大學(xué)生創(chuàng)新創(chuàng)業(yè)知能訓(xùn)練與指導(dǎo)-西北農(nóng)林科技大學(xué) 中國(guó)大學(xué)慕課MOOC答案
- 勞務(wù)派遣公司員工考核方案
- 基礎(chǔ)生態(tài)學(xué)-7種內(nèi)種間關(guān)系
- 2024年光伏農(nóng)田出租合同范本
- 《阻燃材料與技術(shù)》課件 第3講 阻燃基本理論
- 2024-2030年中國(guó)黃鱔市市場(chǎng)供需現(xiàn)狀與營(yíng)銷渠道分析報(bào)告
- 新人教版九年級(jí)化學(xué)第三單元復(fù)習(xí)課件
評(píng)論
0/150
提交評(píng)論