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