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