賈巧蘭 河南大學(xué)軟件學(xué)院
機(jī)器語(yǔ)言是機(jī)器直接能夠識(shí)別的語(yǔ)言,匯編語(yǔ)言與機(jī)器有關(guān),屬于低級(jí)語(yǔ)言,需要進(jìn)行編譯之后才可運(yùn)行。編譯技術(shù)的必要性來(lái)自于匯編語(yǔ)言的缺點(diǎn):閱讀和理解較為困難、編寫過(guò)程不易且嚴(yán)格依賴于特定的機(jī)器,因此,編譯技術(shù)應(yīng)運(yùn)而生。
在20世紀(jì)40年代,由于馮.諾伊曼在存儲(chǔ)-程序計(jì)算機(jī)方面的先鋒作用,為使計(jì)算機(jī)能夠執(zhí)行所需的計(jì)算,編寫一串代碼或程序已成必要。起初,這些程序都是用機(jī)器語(yǔ)言(machine language)進(jìn)行編寫。機(jī)器語(yǔ)言就是表示機(jī)器實(shí)際操作的數(shù)字代碼,但編寫這樣的代碼十分費(fèi)時(shí)和乏味,這種代碼形式很快就被匯編語(yǔ)言(assembly language)所代替。在匯編語(yǔ)言中,都是以符號(hào)形式給出指令和存儲(chǔ)地址的,大大提高了編程的速度和準(zhǔn)確度,但是由于匯編語(yǔ)言的編寫嚴(yán)格依賴于特定的機(jī)器,所以為一臺(tái)計(jì)算機(jī)編寫的代碼在應(yīng)用于另一臺(tái)計(jì)算機(jī)時(shí)必須完全重寫,費(fèi)時(shí)費(fèi)力。
20世紀(jì)50年代早期,由于當(dāng)初大量的實(shí)驗(yàn)和實(shí)現(xiàn)工作是由不同的小組獨(dú)立完成的,多數(shù)早期的編譯工作是將算術(shù)公式翻譯成機(jī)器代碼。用現(xiàn)在的標(biāo)準(zhǔn)來(lái)衡量,當(dāng)時(shí)的編譯程序能完成的工作十分基礎(chǔ)且有限,如只允許進(jìn)行簡(jiǎn)單的單目運(yùn)算,數(shù)據(jù)元素的命名方式也有很多限制。然而它們奠定了對(duì)高級(jí)語(yǔ)言編譯系統(tǒng)的研究和開(kāi)發(fā)的基礎(chǔ)。
20世紀(jì)50年代中期出現(xiàn)了FORTRAN等一批高級(jí)語(yǔ)言,相應(yīng)的一批編譯系統(tǒng)開(kāi)發(fā)成功。隨著編譯技術(shù)的發(fā)展和社會(huì)對(duì)編譯程序需求的不斷增長(zhǎng),20世紀(jì)50年代末有人開(kāi)始研究編譯程序的自動(dòng)生成工具,提出并研制編譯程序的編譯程序。它的功能是以任一語(yǔ)言的詞法規(guī)則、語(yǔ)法規(guī)則和語(yǔ)義解釋出發(fā),自動(dòng)產(chǎn)生該語(yǔ)言的編譯程序。目前很多自動(dòng)生成工具已廣泛使用,如詞法分析程序的生成系統(tǒng)LEX,語(yǔ)法分析程序的生成系統(tǒng)YACC等。20世紀(jì)60年代起,不斷有人使用自展技術(shù)來(lái)構(gòu)造編譯程序。自展的主要特征是用被編譯的語(yǔ)言來(lái)書寫該語(yǔ)言自身的編譯程序;70年代后期和80年代早期,大量的項(xiàng)目都貫注于編譯器其它部分生成自動(dòng)化,其中也包括代碼的生成。
目前流行的編譯技術(shù)主要有:并行編譯技術(shù)、交叉編譯技術(shù)、動(dòng)態(tài)編譯技術(shù)。并行編譯技術(shù)首先利用重構(gòu)技術(shù)將串行程序并行化,將已有的串行語(yǔ)言編寫的程序經(jīng)過(guò)相關(guān)分析分解成可并行的成分分配到CPU或多處理機(jī)上運(yùn)行,最后直接編寫并行程序;由于目標(biāo)機(jī)的指令系統(tǒng)與宿主機(jī)的指令系統(tǒng)的不同,通常使用交叉編譯技術(shù)把某個(gè)機(jī)器(宿主機(jī))上已有的軟件移植到另一臺(tái)(目標(biāo)機(jī))上,主要是編譯程序在宿主機(jī)A上運(yùn)行把應(yīng)用程序的源程序生成目標(biāo)機(jī)B的代碼;動(dòng)態(tài)編譯技術(shù)即編譯運(yùn)行時(shí)的程序變換,是優(yōu)化利用在運(yùn)行時(shí)提供的信息對(duì)程序提供更安全的優(yōu)化,因此利用動(dòng)態(tài)編譯技術(shù)可大大擴(kuò)大優(yōu)化范圍從而能夠產(chǎn)生更有效的代碼。
自展法:主要特征即用被編譯的語(yǔ)言來(lái)書寫該語(yǔ)言自身的編譯程序。1971年P(guān)ASCAL的編譯程序用自展技術(shù)生成后,其影響就越來(lái)越大;自動(dòng)生成法:典型的自動(dòng)生成工具有LEX-詞法分析器和YACC-語(yǔ)法分析器;自編譯:主要思想是用目標(biāo)機(jī)的匯編語(yǔ)言或機(jī)器語(yǔ)言對(duì)源程序的核心部分構(gòu)造一個(gè)小小的編譯程序,再以它為工具構(gòu)造一個(gè)能夠編譯更多語(yǔ)言成分的較大編譯程序。
編譯技術(shù)的應(yīng)用主要有:在反病毒方面、基于編譯技術(shù)的可信賴計(jì)算方法以及基于編譯技術(shù)的協(xié)議解析方法。
由于不同結(jié)構(gòu)的處理器核的指令集不同,需要生成在不同處理器核上執(zhí)行不同的執(zhí)行碼,因此編譯過(guò)程更加復(fù)雜,為了提高性能,對(duì)編譯優(yōu)化技術(shù)的要求也更高。多核處理器的編譯過(guò)程主要是代碼劃分、分別編譯、執(zhí)行代碼的組織。
所面臨的的三個(gè)挑戰(zhàn):需要開(kāi)發(fā)相關(guān)的工程技術(shù)來(lái)幫助檢測(cè)和避免程序缺陷;安全風(fēng)險(xiǎn)-開(kāi)發(fā)相關(guān)的策略檢測(cè)程序?qū)ν獠抗舻牡钟芰?;開(kāi)發(fā)自動(dòng)的程序驗(yàn)證技術(shù)
隨著智能手機(jī)的迅速發(fā)展,移動(dòng)領(lǐng)域的編譯發(fā)展顯得尤為重要。利用交叉編譯技術(shù)來(lái)跨平臺(tái),將具備更強(qiáng)的競(jìng)爭(zhēng)優(yōu)勢(shì),未來(lái)或?qū)⒃趲追N主要的移動(dòng)設(shè)備開(kāi)發(fā)技術(shù)中脫穎而出。
編譯技術(shù)是人類智慧到機(jī)器執(zhí)行的橋梁,軟件到硬件層層推進(jìn)的銜接力量!
[1]張亞娟、馮靈霞、王雪春.編譯技術(shù)的發(fā)展及應(yīng)用2010
[2]陳火旺、劉春林、譚慶平、趙克佳、劉越.程序設(shè)計(jì)編譯原理1980