Boo(3) – ildasm

使用 ildasm 有兩個目的:

  1. 比較print macro 與 print 函數的差別
  2. 比較 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代碼裡面的編排有些許不同。

電影流水帳(2008/04/14~2008/04/16)

現在硬碟不值錢啊~250G 的 IDE 硬碟才 2000 元大洋,這是在暗示我敗下去嗎?

  • Eragon(IMDB, Wikipedia),中譯:龍騎士。Eragon 是主角名字,龍騎士應該是 Dragon Rider 才對,這一集只描述了 Eragon 如何成為龍騎士,並打倒小魔王的經過,還不錯看,不過沒有什麼特別驚奇的感覺。我想如果沒意外的話,這肯定會有第二集吧~
  • 長江7號 (CJ7)(IMDB, Wikipedia)。嗯嗯,主角並不是星爺喔,所以並不是搞笑片,而是拍給小朋友看的,我猜是星爺要完成年輕時當兒童節目主持的心願吧~雖然劇情有點老套,不過在後面我還是不爭氣的掉下幾滴眼淚,想起國中看魯冰花時,也是流的滿臉淚~對於這種催淚片,我不是不愛看,而是不想看,避免暴露太多情緒~

BOO(2) – Hello world!

接下來的系列文章,大致會照著BOO Primer的章節來作介紹。

是的,永遠的 Hello world!

BOO 的 Hello world! 非常簡單:

// 把 print 當 macro 使用,什麼是 macro ??日後再說明
print "Hello world!"
// 或者是拿 print 當函數使用
print("Hello world!")

官方建議使用 print macro 的版本,我想是效率上的考量,macro 在執行時會展開為真正的代碼,而不是以函數呼叫的方式來處理。不過我覺得這見仁見智,差別不是很大。另一個好處應該是很像 Python 吧~

電影流水帳(2008/04/12~2008/04/13)

看了兩片,都不是有在台灣上演過的院線片,在IMDB上都標注了 TV,所以應該是電視台製作的片子吧~

  • The Wilde Girls (2001) (TV),中譯:狂野女孩,片名應該是從原片名亂掰的。Wilde 是主角的 Last name,所以故事主軸是在描述女人的故事。主角是個歸隱的歌手,獨自撫養女兒,與媽媽住在一起,女兒很想成名、出去闖闖,可是主角因為過去的不愉快經驗,非常排斥,不過主角的媽媽倒是很支持。主角的媽媽為了幫他孫女,就找了在飛機上認識的製作人來,於是故事就推展出來。我覺得還不錯的片子,可以看看。
  • Earthstorm (2006) (TV),中譯:地球風暴。在CineMax看到了,因為隕石的撞擊,月球核心受到損害,開始崩裂,為了拯救月球,於是展開行動。不怎麼樣的片子,不用特別去找來看了。

電影流水帳(2008/04/06~2008/04/11)

有些事情不適合在檯面上說,總之,看片腳步要加快…

  • Enchanged(IMDB, Wikipedia),中譯:曼哈頓奇緣。王子與公主的故事加上時空背景的錯置,最後的結果你應該可以預期的到。只是,最後王后何必要變成龍呢?反正王子也不會娶那個公主啦,王冠這種事情可以談的~何必搞成這樣?娛樂性還不錯,可以看看。
  • Saw 4(IMDB, Wikipedia),中譯:奪魂鋸4 (中文官方網站)。之前有看電視廣告,說什麼片段不適合在電視上播出,要看的人請進電影院,結果沒有預期中那麼地驚悚、恐怖、血腥、暴力,我自己看完以後有種摸不著頭緒的感覺,覺得不怎麼樣好看。看來續集電影最好還是不要超過 3 部,這是魔咒~

BOO (1)

BOO是一個兼具動態語言特性與靜態語言特性的語言,比IronPythonIronRuby還要早誕生,但是使用的人卻不多,我對他會有興趣的原因是因為他很接近 Python,而且可以編譯為 exe/dll、定義出屬於自己的 Domain-specific language(使用 macro)。
Q:哪裡可以取得?
A:你可以到 BOO 官方下載網頁 下載。
Q:如何安裝?
A:解開下載來的壓縮檔即可,除此之外,你還需要安裝 .Net framework 2,這可以用 Windows Update 裝起來。此外,你也可以透過安裝Mono或是SharpDevelop 2.x的方式來取得。
Q:跟其他 .Net 語言,如 c#, vb.net 等,有什麼不一樣?
A:最大的不同點在於BOO可以當作 script 來使用,你可以使用 booi 直接執行程式,或是像Python一樣,當作 SHELL 來使用 (booish)。
Q:如何使用?
A:

  • 當作 shell 來使用:解開之後,你可以在 bin 目錄下找到 booish.exe,點選以後執行。
  • 執行 script:在命令提示字元下切換目錄到 boo_path/bin 以後,輸入 booi your_script.boo
  • 編譯為 dll/exe:在命令提示字元下切換目錄到 boo_path/bin 以後,輸入 booc -target:[exe|library|winexe] -o:輸入檔名 your_script.boo

Q:有哪些文件可以參考?
A:官方網站的 Tutorials 列出了相當多的文件,我自己主要是參考Boo Primer

包在 Mono Windows 版裡的東西

再隨手記下一些:

  • VisualPng.exe,可以看 png 的軟體
  • webshot.bat,可以抓取網頁當作圖片的 console 程式,不過在 Windows 跑不起來,會丟出需要 gtkembedmoz 的錯誤訊息
  • ipy、ipy2,是的,有把 IronPython 包進來,不過互動模式怪怪的。
  • ikvm,這是之前就有的,詳情請參考ikvm官方網頁說明,是可以讓 Java 程式在 mono 上執行的程式(甚至是互轉)
  • jay,類似 yacc 的 parser,是的,c# compiler 就是以此為基礎
  • xulrunner,好像是這一版才加入的,印象中之前並沒有,用途不明…
  • cilc,用途不明,help 是寫:Mono CIL-to-C binding generator
  • monop、monop2,把類別的公開介面列出來的 console 程式
  • monolinker,可以只把需要的類別抽取出來或是把一些程式安插進去的程式。

pythonw 與 monow

Windows 版的 Python 在安裝以後,你會發現目錄下除了 python.exe 以外,還有一個 pythonw.exe,這是做什麼的呢?
簡單的說,python.exe 是一個 console 程式,執行 Python 程式的時候,在建立捷徑的時候,你會這樣寫:python your_app.py,但是執行時會出現一個黑色的 console 視窗。
pythonw.exe 作用則在於,不出現那個黑色的 console 視窗。
好,那 monow 的作用為何,你應該也能了解了吧~
特別指出這個的原因,是因為我這幾天在看 Mono 裝了什麼東西時發現的,其實我陸續還有看到一些東西,慢慢再介紹。

電影流水帳(2008/03/29~2008/04/05)

一部片子不錯,另一部片子則不怎麼樣,這就是所謂的“一則以喜,一則以憂”嗎?

  • Aliens vs. Predator: Requiem(IMDB, Wikipedia),中譯:異形戰場2-適者生存。嗯嗯,老實說,我覺得這部片子特效是還可以,但是實在是不太值得進電影院去看,第一集還比較好看呢~
  • Ratatouille(IMDB, Wikipedia),中譯:料理鼠王。我覺得跟超人特攻隊一樣,都是給大人看的卡通,劇情不用多說了,網路上應該都可以找到。最後美食家所寫的那篇評論,相當感人,值得一看的卡通。