2011年10月28日 星期五

自己動手建置Smalltalk VM(CogVM)

Jimmy's papa平常都拿人家已建置好的VM執行Pharo,但讀了這篇文章後Building the VM from scratch using Git and CMakeVMMaker, 也搜尋了關於Slang這個有趣的東東,Slang是Smalltalk語法的子集合,可轉譯為標準C語言,Slang能夠用來撰寫Smalltalk VM自身,雖然以現在的編譯器技術這應該不是什麼先進的技術,但在早期的年代用Smalltalk開發Smalltalk這構想實在太厲害了!!!

以下是轉譯smalltalk "slang" to C的小小例子
這是Smalltalk程式

sayHello
<returnTypeC: 'char*'>
^ 'JimmyScratchLab say hello'
這是對應的C程式
static char*
sayHello(void)
{
 return "JimmyScratchLab say hello";
}
看了那麼多資料,Jimmy's papa一時手癢也想親自動手建置虛擬機器,於是開始捲起袖子開始動工

安裝gcc, make...一些開發工具到Linux/Ubuntu
sudo apt-get install build-essential

安裝cmake
sudo apt-get install cmake

到這裡下載cogvm-blessed-master.tar.gz
https://gitorious.org/cogvm/blessed/archive-tarball/master

下載Pharo 1.3 one-click
http://www.pharo-project.org/pharo-download/release-1-3
解開Pharo 1.3 one-click,進入/Contents目錄
寄件者 scratchlab01
將解開的cogvm-blessed-master.tar.gz的所有檔案拉進去上述的/Contents目錄
寄件者 scratchlab01
檔案一堆,其實依照這篇文章有些檔案目錄是不需要
寄件者 scratchlab01


啟動Pharo
寄件者 scratchlab01
然後打開Workspace,輸入逐步以下指令
下載VMMaker
Gofer new
squeaksource: 'MetacelloRepository';
package: 'ConfigurationOfCog';
load.
((Smalltalk at: #ConfigurationOfCog) project version: '1.5') load.
寄件者 scratchlab01
等一下下
寄件者 scratchlab01

安裝VMMaker
Gofer new
squeaksource: 'VMMaker';
package: 'CMakeVMMaker';
version: 'CMakeVMMaker-MarianoMartinezPeck.73';
load.
寄件者 scratchlab01
要等待一下
寄件者 scratchlab01

使用VMMaker將Cog SLANG轉譯為C程式碼
CogUnixNoGLConfig  new generateSources;  generate.
寄件者 scratchlab01

執行結果,會發覺多了/src目錄,還有供cmake作處理的/build目錄的相關檔案

/src/vm,一堆虛擬機器核心的C原始碼
寄件者 scratchlab01
/src/plugins,,一堆擴展虛擬機器功能插件的C原始碼
寄件者 scratchlab01

接著打開Linux/Ubuntu的終端機shell,執行
cd build
cmake .
跑出一卡車訊息
寄件者 scratchlab01
不過,到訊息結尾說少了tribox.c這個檔,不過為了完成整個步驟,Jimmy's papa將那個CMakeLists.txt稍做處理,再次cmake
寄件者 scratchlab01
接著
make
還是一堆編譯訊息
寄件者 scratchlab01
最後結果,由於我的執行環境的關係,當然還得再接再厲,不過這次建置實驗讓Jimmy's papa學到許多寶貴的經驗

沒有留言:

張貼留言