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