MiX07上宣布的。DLR = Dynamic Language Runtime。DLR和IronPython全部開源,可以到codeplex下載。有了DLR,在.NET上開發動態語言的工作可以簡化許多。目前DLR支援Python, Ruby, JavaScript,和VB,只能在Silverlight下運行。不過把支援面擴充到普通CLR運行時應該只是時間問題。微軟的CLR已是牛B的運行時,有一流的GC,高效的JIT,完整的類型系統,和相對強健的安全機制。DLR在CLR的基礎上又加入對動態類型的支援。在DLR上開發的動態語言可以共用這些基礎功能。這非常重要。光開發高品質的GC和JIT就需要好幾代程式員和電腦科學家忘我工作,而現在牛人們不用再為這些基礎設施耗費額外的精力,可以專註於語言的設計。DLR上的動態語言編譯成IL的位元組碼後,可直接在CLR上運行。在俺看來,這才是真正的殺手賣點:動態語言們能夠共用.NET龐大的類庫。Ruby+LINQ,多爽啊!一門語言光有炫目的功能是不夠的。語言背後的平台本就是語言的一部分。功能完善、運行穩定的一整套類庫向來是做大型系統開發的老大們考慮的重點。而流行類庫背後是一大票程式員。有了數量,才有品質。有共同的類庫分享,才有很多人一起分享心得。人多了,社區才熱鬧,遇到問題才有人幫忙解決。才有公司向這門語言大筆投注。不然的話,天下功能強大的語言千千萬,替它們佈道的牛人萬萬千,說到開發大型商業程式的系統語言,還不就是C++, Java,和C#? 不要用Paul Graham的Viaweb,Orbiz的問價系統,或者Naughty Dog的遊戲來說事。這些本就是小撮牛人們的特例。比如Naughty Dog:不錯,他們的競爭優勢之一是使用用CommonLisp,能快速開發出複雜而流暢的遊戲。問題是,Naughty Dog為了用好Common Lisp,開發了自己的編譯器,自己的Profiler, 自己的架構。有幾個老大有這個本事?Ruby最受人批評的地方之一便是它的類庫有限,而當年Perl流行很大程度上歸功CPAN。現下流行的reddit.com本來用Common Lisp寫成,但因為Common Lisp沒有一套統一可移植的類庫,reddit.com的創始人最終選擇用Python重寫reddit。這還讓CL社區的老大們JJWW了好一陣子,好像不幸當了運輸大隊長的留學男。對了,我說了DLR同時支援Mac了嗎?嘿嘿。Mac的底層是BSD Unix。把DLR移植到其它平台也許相對容易(我不清楚Mac的底層,純猜測。老大們儘管拍磚)。Mono社區的積極分子應該開始忙活兒了吧?
現在DLR和微軟發布的Silverlight(以前叫做WPF/E)捆綁。其實俺對某個RIA平台興趣不大。從個人的角度看,什麼平台不重要。開發RIA的能力和平台無關。我就不信Dojo的Alex Russell轉向開發Apollo或者Silverlight,能比那些只懂JavaScript或C#的老大們上手慢、成就小。不過既然這三架馬車(DLR, Silverlight, 和IronRuby)是今天Mix07的重頭戲,還是提一下。Silverlight捆綁了一坨迷你CLR,4M大,支援多語言開發。不同的程式員可選用自己的中意的語言開發RIA應用。有的公司用VB.NET,有的用IronPython,有的用Perl。這種自由度對提高公司的生產效率很有協助。軟體使用者本來就不關心平台問題。程式員關心。一個平台的價值和用它開發的程式員數量成正比。支援多語言,自然能吸引更多的程式員。位元組碼層級的共用,又能讓玩兒不同語言的老大們共用代碼。其實多年前IE就支援多種指令碼語言,只不過那時瀏覽器還沒有成熟到運行普通指令碼語言的程度,而且當時沒有完善的沙箱環境,安全問題是需要考量。另外據說單用Flash那套環境還做不出Silverlight提供的示範效果。Expression+Silverlight提供了整合好了的全套開發工具,讓RIA應用的設計人和程式員能在同一套代碼上工作,並部署到多個平台上。對公司來說,應該是誘人的賣點。運行速度也許也是一個賣點:CLR是錘鍊多年的一流虛擬機器,在上面運行程式的速度比瀏覽器下的JavaScript解譯器高了去了。至於讓很多老大high得不行的流媒體支援,屬於不知那天就消失的技術細節(對俺個人來說)。有興趣地可以到微軟網站去查看。
至於IronRuby。據說它還不能完全支援Rails。估計很多人就對它暫時沒有興趣了。Rails瘋狂使用Ruby metaprogramming的技巧,正好可以用來檢測各類Ruby衍生物對Ruby的支援程度。
老牌寫手Jon Udell照例有篇高品質的總結--他採訪了RubyCLR背後黑手John Lam後寫的。裡面提到了Avi Bryant用Squeak和Seaside搭建的RIA應用,DabbleDB。DabbleDB絕對讓人驚歎。使用者可以直接對Dabble的資料做各種複雜的操作,包括更新和關聯schema。而這一切都不需要重啟資料庫。所有資料都是“活”的--直接體現了Smalltak推崇的Always Alive原則。Jon總結尤其安逸:動態語言能讓程式員更有效率。但當我們正確地運用動態語言,我們可以搭建出讓每個人都更有效率的軟體,像程式員一樣享受動態語言的好處。
P.S., 如果Sun感受到壓力,對我們Java程式員也是好事。僱用一票Ruby程式員,最後只為改進NetBeans對Ruby的支援,還是小氣了點。其實不在JVM裡加入大家火爆爭論的invokeDynamic指令也無所謂,至少在Java裡加入Closure吧。Closure就是海洛因,一旦用上了,就忘不了那強烈的生理心理雙重快感啊。