我不是在做夢吧? 令人感動的Mono!
最近的工作開始跟Linux扯上關係,有預感總有一天會被逼著在Linux寫些整合用的小程式... orz
十年前唸碩士的時候,一個實驗室畢業學長做起了壓Linux CD販售的生意,送了老板一片他在經銷的Slackware Linux光碟,當年Linux才剛冒出頭,紅帽子可能連毛線都沒開始織,Linux還沒開始受到世人的關注,那塊光碟就一直被留在實驗室桌上。好奇心重又手賤的我,不甘心系上的幾台DEC/Sun UNIX系統只有某幾間實驗室的同學才能把玩,就找來機器裝上Slackware Linux,過過當UNIX root的乾癮,從Apache, Sendmail, Samba一路玩下去,當年翻譯了一篇Firewall & Proxy HOW-TO目前還在Internet上流傳呢! 這是我與UNIX世界的第一次接觸。
進入職場沒多久,只會Delphi, VB, SQL的小菜鳥,接到的第一案子居然是要在SGI UNIX主機上寫查ORACLE資料庫的Web UI… 最後拼了老命,臨時抱佛腳學會了Perl,不會直接連ORACLE,就Call sqlplus讀入即時產生的SQL指令檔,再把結果Dump成Text File收回來(天殺的,能想出這種鋸箭法,我一定是天才)。總之,驚險過關後,逐漸聚焦到MS Solution上,與UNIX世界的緣份愈來愈淡...
最近的案子開始接觸一些Linux主機,有些時候從架構師的角度,在Linux端放個小程式會比在Windows端費盡心機省力而有效十倍以上。但不會C語言一直是我的痛腳(Achilles’ Heel),Perl雖然堪用,但荒廢已久,要用也少不了一番查查找找,如何在Linux上寫程式呢? 最後我想起了可愛的小猴子—Mono。
重入Fedora Core 6,感覺Linux已與當年大不相同,不管是Gnome或KDE,都直追Windows的友善度(居然還可以直接連上Windows的分享資料夾讓我大為驚嘆)。不過,安裝Mono RPM時卻一直卡在Dependence Library不齊,讓人很挫折,開始懷念Windows式Setup.EXE下一步、下一步的爽快感。還好,在http://www.mono-project.com/Downloads裡有個Linux Installer for x86,讓Windows世界來的麻瓜可以用下一步、下一步的方式做完這段苦工。
裝好Mono之後,依著網路上找到的Tutorial,寫了一小段hello.cs,用XmlDocuemnt, StringBuilder, Thread.Sleep, System.Text.Encoding, StreamWriter... 幾個基本的.NET功能。用mcs就編譯出hello.exe,再用mono hello.exe執行。
天哪,結果就如預期地顯示在Ptty上,當場感動到不行~~~
我會寫Linux程式了! 我會寫Linux程式了! 我會寫Linux程式了! 我會寫Linux程式了!
很有意思的一個問題是,用MONO Build出來的hello.exe,可以拿到Windows上執行嗎? 以我這個簡單的小程式來說,答案是Yes!! 這同時也代表直接把Windows上的.NET EXE檔搬到Linux上跑將不是神話! 不過,也別高興得太早,Mono並沒有實作出全部.NET的基本物件,關於Windows Form的部分,也會因為Windows與XWin的根本差異而必須用特殊的Namespace下的不同物件達成,因此要做到100%通透,目前還有段距離。
只是,可以用熟悉的C#語言寫程式在Linux上跑,.NET Developer自此擺脫"出了國就得當啞巴"的宿命,這種興奮的感受無可取代!! Thank you! Mono!