bhnddowinf

博客园 首页 新随笔 联系 订阅 管理

為何使用Ruby這個動態語言

為什麼開發伺服器端應用程式,使用動態語言(RubyPythonPHPPerl等)比起靜態語言(JavaC++等)有更好的優勢呢?

靜態語言和動態語言的差別在於,前者的變數型別需要事前宣告,後者則是執行期才動態決定。實務上,就看程式需不需要事前編譯這個動作了。

著名的”人月神話”一書作者Fred Brooks曾說:「一個程式設計師一天能產生的程式碼行數是差不多的,無論什麼程式語言」。因此一個具有表達能力的高階程式語言,就會比低階的程式語言能完成更多功能。相較於靜態程式語言,使用更高階的動態腳本語言可以幫助我們:

1. 用更少程式碼做更多事情,大大增加生產力 2. 更快因應客戶開發需求,敏捷開發

不過,動態語言也不是沒有缺點:

1. 執行效能是絕對比不上靜態語言的 2. 沒有編譯期可以檢查型別錯誤

但是,我們知道現在的電腦越來越快、越來越便宜、上網越來越容易、記憶體越來越多、硬碟越來越大。另外,行動裝置也越來越多,需要搭配的網路服務需求也增加了。這些趨勢告訴我們有更多的軟體的需求,另一方面由於硬體效能的增強,人力開發成本比起軟體的執行期的效能,也越來越重要。同樣一個程式,用動態語言執行的效能已經可以達到實用(例如每秒可以處理50~500個的HTTP請求,也可以透過增加伺服器來擴展架構),也許用靜態語言後的執行速度可以再快一倍,但是卻需要十倍以上的時間來開發,這件事情是不是值得呢?

在硬體資源有限的行動裝置及嵌入式系統上,仍是靜態語言的天下,這一點需要更多時間才有動態語言的生存空間。

沒有編譯期可以檢查型別錯誤的問題,也隨著單元測試和TDD(Test-driven development)測試驅動開發等敏捷最佳實務而逐漸降低重要性。而大部分的Bug會出自於商業邏輯錯誤,而不是型別錯誤上。

為何選擇Ruby

Ruby 是一套非常重視使用性(Usability)的物件導向程式語言,非常看重程式碼的可讀性及維護性。Matz在設計Ruby時,就特別考量一般人容不容易了解(他說我們都是凡人,像Lisp是給神人用的)。這也是為什麼你常常會聽到Ruby的程式碼自然簡潔又漂亮。您可以看看這份 Ruby創造者MatzWhy Ruby?投影片或是Matz的演講:RubyConf 2008RubyConf 2009Mountain West Ruby Conference 2010,相信您會更了解及喜愛Ruby的哲學。

Ruby也是目前做Domain-specific language(DSL),特別是Internal DSL最為成功的程式語言。透過DSL,程式不但可以擁有非常好的可讀性,也可以大幅增加生產力。成功的DSL函式庫例如有:Rake建構工具、RSpec測試工具、Chef伺服器設定工具、Cucumber驗收測試等。這些函式庫正積極地影響我們對軟體開發的想法。我們相信,還會有更多更有趣的DSL函式庫出現。

posted on 2014-08-29 11:35  bhnddowinf  阅读(78)  评论(0编辑  收藏  举报