JIT是just in time,一門包含了JIT的腳本引擎就是將腳本編譯成機(jī)器碼,讓CPU而不是自己寫的虛擬機(jī)運(yùn)行。這樣做有助于提供高速的運(yùn)行環(huán)境、以及與C++更加方便的融合。這次計(jì)劃所需要的任務(wù)如下:
匯編器。匯編器指的是可以做如下轉(zhuǎn)變的一個工具:機(jī)器碼 <--> 匯編程序的數(shù)據(jù)結(jié)構(gòu) <--> 匯編程序文本表示。有了三個可以互相轉(zhuǎn)換的結(jié)構(gòu)之后,編譯器可以在更高層的層面上開發(fā),調(diào)試也變得更加容易。
中間指令。由于x86的指令集過于復(fù)雜,并且以后可能會發(fā)生重大變更,因此有必要開發(fā)一個容易使用的、功能簡潔但是強(qiáng)大的另一個指令集,提供中間指令到匯編的單向轉(zhuǎn)換操作。這主要是用來解決x86指令互相之間操作不夠統(tǒng)一、寄存器分配和更好的x86指令選擇等問題,并且可以讓以后的編譯器更加容易開發(fā)。
內(nèi)存管理器。由于匯編是不處理內(nèi)存申請釋放等操作的,因此需要將內(nèi)存管理器,連同垃圾收集器,一起封裝成函數(shù)供匯編代碼調(diào)用。這個內(nèi)存管理器屆時將使用C#和Java均驗(yàn)證過的多代收集方法。如果語言不直接操作指針的話,還能提供壓縮操作。
基本語言?;菊Z言擁有絕大多數(shù)的沒有重復(fù)的必要的基礎(chǔ)設(shè)施,并提供基本語言到中間指令的單向轉(zhuǎn)換操作。
腳本語言。當(dāng)然基本語言如果足夠強(qiáng)大的話也能變成一門腳本。這里指的腳本是類似DSL那樣有特殊目的語言。編譯器所需要的詞法分析器可以大部分交給我開發(fā)的VL++2.0的Syngram負(fù)責(zé),并且編譯成基本語言。以后制作DSL將會變得非常簡單。
匯編器是體力活,因此我想了一個辦法。Intel手冊上的指令集的二進(jìn)制碼表還是寫得相當(dāng)有規(guī)律的,因此可以復(fù)制下來集中到一起(已完成),然后使用正則表達(dá)式進(jìn)行第一步處理,將碼表、語法和說明三部分分開成更加合理的格式,然后再用一個正則表達(dá)式進(jìn)行處理,最后生成記載著翻譯方法的C++代碼。等這一部分完成之后,可能會給出相關(guān)的代碼,并且解釋x86在32位下的詳細(xì)的指令格式。64位等購買新電腦并安裝win7之后才開始,目前沒有條件。
posted on 2009-02-13 21:18
陳梓瀚(vczh) 閱讀(2799)
評論(5) 編輯 收藏 引用 所屬分類:
JIT