2008年03月28日

Sun雇用Jython開發者

算是舊消息了,根據JRuby開發者Charles Nutter這篇文章Welcome Pythonistas to Sun! ,Sun雇用了Frank WierzbickiTed Leung來開發Jython及Python,就和2006年9月Sun雇用JRuby開發者一樣。目前JVM上面的主要語言,除了Java之外,還有Ruby (JRbuy)、Python (Jython)、JavaScript (Rhino),以及JVM原生的scripting語言Groovy。

看來Java平台未來發展的重點之一是scripting語言。有了Python及Ruby這兩強加入,似乎也意味著Groovy是註定來不及長大了。

Posted by fauzty at 21:53回應(0)引用(0)資訊業界

2008年03月27日

IE的global namespace pollution

昨天寫了一段javascript code,在Firefox跑,一切正常;到IE不能跑。用Microsoft Script Editor來debug,雖然可以知道錯誤發生在哪一段程式,但是看了半天卻看不出錯誤在哪。後來只好死馬當活馬醫,用trial and error方法,把code隨意改一改。結果發現:咦,把相關的HTML element id改掉,似乎程式就不會卡住了。難道是IE對我的id命名有意見?

再定睛一看,會卡住的code剛好都是javascript variable和HTML id取名一樣的。原來,在IE裡javascript variable的名字不能和HTML id一樣!?再做了一些實驗,原來IE會把每個有id的element當作javascript的global variable,讓你直接用id/name存取DOM,而不必透過getElementById()。

這真的很討厭。我看到有國外的網站稱之為global namespace pollution。

Posted by fauzty at 14:21回應(0)引用(0)資訊攻略

2008年03月4日

Ruby/Prototype.js 風格的 Array

自從用過Ruby之後,對它的Array唸唸不忘,Array#each是好物啊,有了它,幾乎可以把迴圈for/foreach給丟掉了。看了《Bring some Ruby/Prototype flavour in your PHP array》之後,心想PHP5也能這樣玩,真是讚,不用在PHP/Ruby之間的抉擇天人交戰了,把Ruby的語法移植到PHP來,這樣不就可以同時擁有PHP的廣大群眾,又擁有寫Ruby語法的簡潔/美麗/爽度了嗎?Prototype.js也是這樣做的,雖然《Learning Javascript》書中嚴厲反對Prototype.js破壞了javascript當中Array和for..in的組合技,但是Prototype.js的作者們顯然不在乎這點,照樣蠻幹。另還有《JavaScript “Associative Arrays” Considered Harmful》一文認為JavaScript當中的Array本來就不該當作associative array(hash)來用,所以組合技被破壞不算Prototype.js的錯。我個人的看法:說真的,有了Array.each,誰還需要for..in/foreach呢?

但是現實是殘酷的,由於PHP沒有anonymous function(幹,PHP根本什麼都沒有嘛!),所以callback無法像JavaScript或Ruby寫得那麼漂亮。或許應該說,雖然PHP語言特性貧乏,原本的目的是內嵌在HTML裡,卻能長到這麼大,也代表著PHP切合了初級web開發的需求,打入了一個很大的市場。《Bring》文中class的名稱是ExtendedArrayObject,只實作了部分method,但是我想乾脆把整個Ruby Array class實作好了。為了符合PHP的習慣,可以再定義一個xarray() function,x代表extended,用法類似array()(PHP的array()是language construct,不是function),只是回傳ExtendedArrayObject(factory pattern!?)。

神奇的是,我用Google搜尋xarray,居然找到我想做的東西,已經有人做過了!它是模仿Prototype.js的,也叫做xarray,而且是BSD license。但是不幸的是,事情總是沒有那麼順利,這個phpclasses.org要註冊才能下載東西,我又不想註冊。所以……我想我還是有空的時候來自己實作看看好了,當作練功!

Posted by fauzty at 19:31回應(0)引用(0)資訊思考
 [1]