Posted on 2008-03-04 19:09
dennis 閱讀(682)
評(píng)論(1) 編輯 收藏 所屬分類:
涂鴉
最近一直在寫Ruby腳本,說出來你可能不相信,我用Ruby寫游戲腳本

。用的是JRuby,采用JRuby是因?yàn)槎〞r(shí)器的問題,Ruby1.8.6因?yàn)榫€程是用戶空間內(nèi)的本地線程,標(biāo)準(zhǔn)庫沒有提供強(qiáng)大的定時(shí)器功能,而對(duì)于游戲邏輯有相當(dāng)多的任務(wù)需要定時(shí)處理,權(quán)衡之下,最后決定使用JRuby,封裝了java的
ScheduledExecutorService,等以后Ruby有更完善的定時(shí)器的時(shí)候就切換回來(我猜測(cè)引入了native thread的Ruby1.9應(yīng)該有更強(qiáng)大的定時(shí)器),基本滿足了要求。這一過程也更讓我覺的JRuby是個(gè)非常有前途的項(xiàng)目,利用Ruby的語法以及動(dòng)態(tài)語言的高效加上java極其豐富的類庫
,這樣的組合有莫大的威力,況且 JRuby的性能比之c ruby在某些方面更有優(yōu)勢(shì),在1.1出來后應(yīng)該可以有一個(gè)更大的提升。
寫Ruby腳本唯一比較郁悶的是重構(gòu),盡管Netbeans比RDT提供了更好的重構(gòu)功能,但是對(duì)于一些復(fù)雜重構(gòu)仍然沒有比較好的支持,況且我也不敢完全信任IDE的自動(dòng)化,這種時(shí)候更顯示出完備的單元測(cè)試的重要性,如果沒有單元測(cè)試,對(duì)Ruby腳本的重構(gòu)簡(jiǎn)直難以想象。另外一個(gè)比較麻煩的是,Ruby對(duì)二進(jìn)制的處理并不是很方便,盡管使用了bit-struct,但是它只能支持定長(zhǎng)的數(shù)據(jù)結(jié)構(gòu),而不是可變長(zhǎng)度的array list,變長(zhǎng)的string,或者switch結(jié)構(gòu);盡管我自己做了簡(jiǎn)單的擴(kuò)展,仍然很局限。幸好我遇到這樣的情況不多,通過其他手段變通處理也還能接受。后來javaeye上的莊表偉老大發(fā)布了
DynamicStruct,這個(gè)才是根本解決之道,兩者結(jié)合使用應(yīng)該可以處理所有情況了。不過那時(shí)我的協(xié)議處理部分都已經(jīng)完成,下次有機(jī)會(huì)再試試。
讀書嘛,最近終于開始讀買了許久的《代碼大全2》,以前是真怕這種大部頭,看著就沒信心讀完,哇哈哈,沒想到一讀下去就一發(fā)不可收拾,真是好書一本,就軟件構(gòu)建中的設(shè)計(jì)一章就值回書錢了。又利用晚上在重讀sicp前三章,在注釋這樣的邊邊角角原來也非常有價(jià)值,例如對(duì)閉包和組合的解釋,靜態(tài)語言由于有太多的聲明式結(jié)構(gòu)(struct、class etc.)反而對(duì)組合造成了阻礙和懲罰,而在Lisp中由于通用的組合粘合劑cons的存在,可以以一種統(tǒng)一的方式去處理組合結(jié)構(gòu),模擬各種復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。今天托同事在當(dāng)當(dāng)上買的書到了,《unix編程藝術(shù)》到手,這書按牛人的說法是sicp的實(shí)踐版,不讀就相當(dāng)遺憾了。