幾則關於動態型別語言的事件
2006 年 十月 24 日 (星期二) 8:09 pm分類:電腦
標籤:程式語言, 軟體開發論
在過去,動態型別語言 (dynamically-typed languages) 一向被主流陣營視為次等公民。在主流陣營裡,不管是理論派還是實務派,多半都傾向於靜態型別系統的編譯期檢驗措施,以及連帶而來的 up-front design 思維。儘管 OO 將部份動態觀點帶入主流語言陣營,reflection、AOP 等 metaprogramming 思維也激起部份漣漪,但整體而言,主流觀點仍然是:能夠靜態就不要動態,能集中於一處 model 出來就不要將 model 散布各處。
於是,我們常常嘲笑 LAMP 裡面的 “P”,不管這個 “P” 是 PHP 還是 Perl 還是 Python(或許隨著 Ruby 的崛起,將來 “LAMR” 縮寫會流行起來也說不定)。但有趣的是,近一兩年來,軟體大廠漸漸體認到這些動態型別語言(或者說:scripting languages)的草根生命力,轉而釋放出不少善意的合作計畫。以下姑且就我所知舉幾個例子:
- IBM 和 Oracle 在 2005 年相繼和 PHP 的主力公司 Zend 合作推出 “Zend Core” 產品。
- 微軟於 2006 年僱用 RubyCLR 專案作者 John Lam(相關報導請見〈MS 聘了 RubyCLR 創造者〉一文),並在 IronPython、Phalanger 等專案上動作頻頻。
- 昇陽在 JavaOne 2006 大會上宣布將在 JVM 及 bytecode 層次增進動態型別語言的支援能力,並於 2006 年僱用兩位 JRuby 專案核心成員(相關報導請見〈Sun 僱用了 JRuby 核心開發者〉及〈JRuby 0.9.1 發佈,可怕的進步〉)。
- BEA 在 JavaOne 2006 大會上宣示他們在 WebLogic 上支援 PHP 的意向。
- Caucho 已在 Resin 上支援 PHP(名為 Quercus)。
搬得上抬面的這幾家軟體大廠都開始正視動態型別語言了,那麼,象牙塔裡面的學究呢?
自從七月中旬躺在希臘 Mykonos 島的 Paradise Beach 看完 Beyond Java 之後,靈感泉湧。這些日子以來,我鉤勒一些關於動態型別語言的研究構想,便想搜尋看看有沒有類似觀點的文獻。兩則學界動態引起我的注意:
- OO 領域頂級年會 OOPSLA,今年特地為動態型別語言另闢一個獨立議程:Dynamic Languages Symposium。台灣知名的唐鳳也受邀介紹 Perl 6 的目標及目前進度。
- IEEE Software 將在明年九/十月推出一期專刊:Rapid Application Development with Dynamically Typed Languages。
聊舉數例,約略可窺見動態型別語言不再只是次等公民,已引起主流陣營的正視。不管你喜不喜歡動態型別,你都該正視這個現象或者趨勢。
相關閱讀
- 我在 JavaTwo 2006 的演講:當 PHP 遇見 Java
- 孟岩的文章:动态语言,别再说不


追蹤留言回應:以
引用通告 (trackback):![[add to funP]](http://william.cswiz.org/blog/wp-content/themes/william/images/add-funp.png)
![[add to HEMiDEMi]](http://www.hemidemi.com/sticker/user/roxytom.bluecircus.net.gif)
![[add to udn bookmark]](http://bookmark.udn.com/html/help/80_20_02.gif)

2006 年 十月 24日 於 11:02 pm
比起 Python,Ruby 除了 Web AP 這個領域外,其他方面的 library 還很欠缺,且它的執行效率也是個讓人詬病的地方。一些特定的應用,連 Python 都嫌不夠快了,何況是 Ruby ,雖然這項缺點可以靠砸錢下去來補足。
以下分享幾個相關的 links:
Strong Typing vs. Strong Testing
Are Dynamic Languages Going to Replace Static Languages?
Python & Java: a Side-by-Side Comparison
Type system
Duck typing
structural type system
2006 年 十月 24日 於 11:07 pm
動態型別語言, 還有一個工具在很早前就有了, 而且也支援物件導向; 那就是 Foxpro ! 它還活著哦..^^ 看這裏!
2006 年 十月 25日 於 10:17 am
@Yukuan:
「執行效率」這件事,只要該語言本質上沒有太大的瑕疵,是有可能隨著改版而不斷精進的。JVM 就是很典型的例子。
「程式庫」這件事,一直是新語言的痛處,這也沒什麼方法可解,只有祈禱族群熱絡、大廠青睞。不過,如果 .NET 的 RubyCLR 和 IronPython、JVM 的 JRuby 和 Jython 都成熟了,那麼,程式庫問題也變得不是那麼嚴重了。
所以對於 Ruby,我目前是抱著欣賞的角度,欣賞它有趣的 metaprogramming 功能,以及 Ruby on Rails 所導入的新思維。
2006 年 十月 25日 於 10:48 am
我同樣覺得「執行效率」不是那麼重要,尤其當你需要的是 scripting language/dynamic language 的其它優點時,就更不會去在乎執行效率才是。
就我的觀察,scripting language 有很重要的一點,「讓非專業的程式設計人員,在面對學習 programming 的路上,順利不少」。
話說回來,Yukuan 推廣 python 真是不遺餘力呀
2006 年 十月 25日 於 4:25 pm
Large-Scale Network Analysis with the Boost Graph Libraries 中提到:
不過這得靠 The original BGL, BGL-Python, The Parallel BGL, Parallel BGL-Python 等四者間幾乎無縫的設計方式,可以輕鬆 porting,才顯得實用。
其中第十七張投影片,可以看出純粹的 Python 版本,比起原生的 C++ 版本,其間的速度最少有百倍之差…
所以說,除非應用在執行效率無關痛癢的場合,否則還是要慎選解決方案的。
2007 年 九月 6日 於 1:08 pm
Programming Tutorials…
I couldn’t understand some parts of this article, but it sounds interesting…