April 16,2008
Boo(3) - ildasm
使用 ildasm 有兩個目的:
print macro 與 print 函數算是差別很大吧。
print 函數會調用 Boo.Lang.Builtins 類別裡的 print 函數,雖然實際上此函數的內容也是使用 Console.WriteLine(),但是除了你需要多附上 Boo.Lang.dll 之外,你還需要負擔 CLR 執行時動態把 Boo.Lang.dll 載入的成本。
使用 print macro 的話,就只是把 Console.WriteLine 替換進去,以編譯出來的結果而言,這會比較有效率,但如果作為 script 執行時,我想應該會有些損失。
這就是為甚麼BOO Primer建議使用 print macro 的原因。
booc 編譯出來的結果與使用 gmcs (我使用 Mono 的 c# 2.0 編譯器)編譯出來的結果非常接近,都同樣直接呼叫 System.Console.WriteLine,可以視為一樣。
p.s. 我也看過以 csc 編譯出來的結果了,實際上也非常相近,不過反組譯出來的IL代碼裡面的編排有些許不同。
- 比較print macro 與 print 函數的差別
- 比較 booc 編譯出來的可執行檔與 c# 編譯出來的可執行代碼
print macro 與 print 函數算是差別很大吧。
print 函數會調用 Boo.Lang.Builtins 類別裡的 print 函數,雖然實際上此函數的內容也是使用 Console.WriteLine(),但是除了你需要多附上 Boo.Lang.dll 之外,你還需要負擔 CLR 執行時動態把 Boo.Lang.dll 載入的成本。
IL_0005: call void [Boo.Lang/*23000001*/]Boo.Lang.Builtins/*01000001*/::print(object) /* 0A000001 */
使用 print macro 的話,就只是把 Console.WriteLine 替換進去,以編譯出來的結果而言,這會比較有效率,但如果作為 script 執行時,我想應該會有些損失。
IL_0005: call void [mscorlib/*23000001*/]System.Console/*01000001*/::WriteLine(string) /* 0A000001 */
這就是為甚麼BOO Primer建議使用 print macro 的原因。
booc 編譯出來的結果與使用 gmcs (我使用 Mono 的 c# 2.0 編譯器)編譯出來的結果非常接近,都同樣直接呼叫 System.Console.WriteLine,可以視為一樣。
p.s. 我也看過以 csc 編譯出來的結果了,實際上也非常相近,不過反組譯出來的IL代碼裡面的編排有些許不同。
引用URL
http://cgi.blog.roodo.com/trackback/5869723