面向對象編程語言 Ruby 1.9.3 RC1 發布
Ruby 1.9.3 RC1 發布了,這是 1.9.3 的第一個 RC 版本,該版本兼容 1.9.2 包含了一些新特性,例如 io/console 等。詳細改進記錄請看 ChangeLog。
Ruby 是一個注重均衡的語言,它的發明者松本行弘 Yukihiro “matz” Matsumoto,混合了他喜歡的語言(Perl、 Smalltalk、 Eiffel、 Ada 和 Lisp ) 產生了一種具有函數式及指令程序設計特性的新語言。
他常說,他是“試著讓 Ruby 更自然,而不是簡單,就像生活一樣”。
除此之外,他還提到:
Ruby 就像人的身體一樣,表面上看來簡單,但是內部卻相當的復雜[1]。
Ruby 的成長
在 1993 年,沒有人會相信一個由日本業余語言設計者創建的面向對象的語言,能最終在世界范圍內被廣泛使用并且變得幾乎像 Perl 那樣流行。自從 1995 年 Ruby 公開發表以來,Ruby 在全球吸引了許多忠實的程序設計員。在 2006 年,Ruby 被廣泛接受。在各大城市都有活躍的使用者并通過社區舉辦許許多多場場爆滿的研討會。
在 Ruby-Talk,主要的 郵件列表 上,討論 Ruby 語言的文章爬升到每日 200 封。
在 TIOBE, 最流行的開發語言排名調查中, Ruby 排名為全球第 11 位。 根據這樣的成長情況,他們預測“在半年之中 Ruby 將會進入最受歡迎開發語言的前 10 名。”有越來越多受歡迎的軟件如 Ruby on Rails web framework2 是使用 Ruby 撰寫而成,也是造成 Ruby 如此快速成長的原因。
Ruby 是開源軟件。 不只是免費,而且可以自由的使用、復制、修改與發布。
所見到的都是對象
最初,Matz 從其它語言中找尋理想的語法,在網絡上他做了一段時間的調查,找到候選如“Perl“和“Python“。但都不是他想要的,他需要一個比 Perl 更強大、比 Python 更面向對象的語言[3]。
在 Ruby 中,所有的東西都是對象,所有的信息和代碼都可以給它們所擁有的屬性和行為。面向對象程序設計中稱屬性為實例變量(instance variables),稱命令為方法 (methods)。 從下列程序代碼中看到 Ruby 能夠給數字賦于行為,從這點可以證明 Ruby 是純面向對象的語言。
5.times { print "We *love* Ruby -- it's outrageous!" }
在許多語言中,數字和其它原生的類型都不是對象。而 Ruby 受 Smalltalk 語言影響,讓所有的類型都可以賦予方法及產生實例變量,并讓這些規則適用于 Ruby 所有對象。
Ruby 的靈活性
Ruby 是一個相當靈活的語言,她允許用戶去改變她本身。 Ruby 的核心部分可以被更改或重新定義,模塊可以被添加。Ruby 試著不去妨礙程序員。
比如(+
) 是用做加法的運算符。如果你更喜歡使用易讀的 plus
的話,你可以給 Ruby 的內建 Numeric
類添加一個函數。
class Numeric def plus(x) self.+(x) end end y = 5.plus 6 # y is now equal to 11
Ruby 的符號只是語法的甜頭 (syntactic sugar)。你可以隨時重定義他們。
Blocks,一個獨特且強大的特性
Ruby 的代碼塊是非常強大的。程序員可以給任何函數添加一個密封 (closure) 來表述這個函數該如何工作。密封也被叫做代碼塊,是用過其他比如 PHP, Visual Basic 等規則語言的 Ruby 的初學者最喜歡使用的一個功能。
代碼塊取自函數語言。Matz 說:“我希望在 Ruby 的密封中融入 Lisp 的文化 [4]。”
search_engines =
%w[Google Yahoo MSN].map do |engine| "http://www." + engine.downcase + ".com" end
在上面的代碼中,代碼塊是在 do ... end
中的結構。 map
函數將代碼塊應用到一個詞的列表中。Ruby 的其他函數經常會為程序員留出一個空當給代碼塊來控制函數的功能。
Ruby 與 Mixin
于其他面向對象語言不同,Ruby “有意”只提供單繼承。不過 Ruby 擁有模塊(在 Objective-C 里面叫做類別)。模塊是把許多方法放在了一個類別里。
類可以混合一個模塊,得到這個模塊提供的所有方法。比如所有提供 each
方法的類可以混合 Enumerable
模塊,來得到這個模塊提供的所有方法,當然這些方法都會調用 each
做循環。
class MyArray include Enumerable end
一般來說,Ruby 愛好者相對于復雜和限制頗多的多態繼承方法來講更偏向于這種混合方法。
Ruby 的面貌
盡管 Ruby 只用很少的符號并且偏向與英文單詞做關鍵字,但是少量的符號也被用來裝飾 Ruby。Ruby 不需要提前定義變量。它用簡單的命名法來提示變量存在的范圍。
var
可以是局部變量。@var
是一個實例變量。$var
是一個全局變量。
這些信號讓程序員更清楚的看到每一個變量的角色,增強了程序的可讀性,也不需要在實例變量前面加上 self.
了。
更上一層樓
Ruby 還有其他豐富的特性:
- Ruby 有類似于 Java 和 Python 的異常處理,使處理錯誤更方便。
- Ruby 有一個真正的表示-清掃(mark-and-sweep)垃圾手機器來出來所有的 Ruby 對象。不需要在庫里維護引用數了。就像 Matz 說的:“這對您健康有意。”
- 為 Ruby 寫 C 的擴展比 Perl 和 Python 更容易。Ruby 有一個非常雅致的 API 從 C 語言調用 Ruby。這包括把 Ruby 作為嵌入式腳本語言時,從其他軟件里調用 Ruby。SWIG 界面也是可選的。
- Ruby 可以在操作系統允許的情況下動態調用庫。
- Ruby 提供不依賴操作系統的線程。所以在所有 Ruby 支持的操作系統里都可以使用多線程處理,不管操作系統支不支持,比如 MS-DOS!
- Ruby 極為輕便:它只要是在 GNU/Linux 上開發的,但也在很多類型的 UNIX 上運行,也支持 Mac OS X, Windows 95/98/Me/NT/2000/XP,DOS,BeOS,OS/2 等。