Ruby

Ruby 是一種面向物件、指令式、函式式、動態的通用程式語言。在20世紀90年代中期由日本電腦科學家松本行弘設計並開發。遵守BSD許可證和Ruby License。它的靈感與特性來自於Perl、Smalltalk、Eiffel、Ada以及Lisp語言。由Ruby語言本身還發展出了JRuby等其他平臺的Ruby語言替代品。歷史.Ruby的作者——松本行弘於1993年2月24日開始編寫Ruby，直至1995年12月才正式公開釋出於fj年輕，又因為Ruby是日本人發明的，所以早期的非日文資料和程式都比較貧乏，在網上仍然可以找到早期對Ruby的資料太少之類的批評。約於2000年，Ruby開始進入美國，英文的資料開始發展。2004年，Rails框架誕生，Ruby更加廣為人知，Ruby並於2006年為TIOBE獲選為年度程式語言。此時為Ruby的全盛時期。這一時期許多 GitHub 上有創意的專案以 Ruby 撰寫，並且有 GitHub 與 Twitter 等重要網頁選用 Ruby 編寫。2010年以後，Javascript 和 Python 這兩個和 Ruby 定位類似的語言在 Google 等公司與一些社群的支援下越來越受到歡迎。其中，V8引擎使得 Javascript 在同型別語言中有著突出的效能；NumPy 讓 Python 可以更加優雅的進行科學運算。2009年，以V8引擎製作的伺服端平臺 Node.js 發表。2015年 機器學習知名專案 TensorFlow 發表，並選用 Python 作為官方 API 使用的語言。Ruby 在多年被蠶食後走向衰微。Ruby 現在仍為TIOBE程式語言流行排行前20名，但已經遠遠沒有全盛時期受歡迎。在 Ruby 逐漸失寵以後，開發團隊開始有意的提升 Ruby 的效能。在 Ruby 2.X 版本後期提出「Ruby 3x3」計畫，目標是希望 Ruby 3.0 版本能比 2.0 版本有 3 倍效能提升。從 Ruby 3.0 開始，團隊開始嘗試在 Ruby 中加入 JIT 的功能。在 3.1 版本之後，Ruby 的團隊與 Shopify 團隊合作，嘗試性地加入新的 JIT 編譯器 —— YJIT。並且 YJIT 在 Ruby 3.2 正式被引入。Ruby的理念.減少程式設計時候的不必要的瑣碎時間，令編寫程式的人高興，是設計Ruby語言的Matz的一個首要的考慮；其次是良好的介面設計。他強調系統設計必須強調人性化，而不是一味從機器的角度設想。遵循著，Ruby語言通常非常直觀，按照程式設計人認為它應該的方式執行。Ruby的作者認為Ruby &gt; (Smalltalk + Perl) / 2#重定向Ruby的版本體系.Ruby版本號的構成形式是，均為只有1位的整數；如“1.8.6”、“1.9.3”。1.9版系統的TEENY不小於1時為穩定版，TEENY為0的版本是開發版。在1.9之前的版本中偶數MINOR代表穩定版，奇數MINOR代表開發版。Ruby的Hello World程式.下面是一個在標準輸出裝置上輸出Hello World的簡單程式：puts "Hello, world!"或者是在irb互動式命令列的模式下：»puts "Hello, world!"Hello, world!=&gt; nilRuby的特點.變數與函式的命名規則.乍看之下與Perl的命名規則有些類似，不過Perl的命名用來區分純量、陣列與對映；而Ruby的命名規則用來表示變數與類別的關係。Ruby的變數有以下幾種：有些函式則會加一個字尾，用來表示函式的用法，跟變數命名規則不同，函式的命名規則只是習慣，不具強制性，即使你不照規則命名也不影響程式運作多種字串表示法.Ruby提供了多種字串的表示方法，方便撰寫有大量文字資料的程式。除了來自C語言的引號表示法之外，還有來自於Perl的百分號字面量記法，以及方便書寫大量內容的Heredoc記法。Ruby可以方便地以codice_8的方式向字串中插入變數。a = '\n這是一個單引號的字串，反斜線和變數插值不會被轉義'c = "\n這是一個雙引號的字串，反斜線和變數插值會被轉義\n#{a}"e = «BLOCK這是一個以Heredoc方式書寫的常量字串，可轉義，結尾標誌不可縮排BLOCKf = «-BLOCK這是一個可以縮排的Heredoc字串BLOCKg = «~BLOCK這是一個可以縮排的Heredoc字串縮排會被自動去掉，在2.3版本中引入BLOCKh = %/\t這是一個可轉義的的字串\n/動態修改物件、類別.Ruby是動態語言，你可以在程式中修改先前定義過的類別。也可以在某個類別的例項中定義該例項特有的方法，這叫做原型方法。class MyClassdef the_method"general method"endendmc = MyClass.newdef mc.the_method"special for this instance."endmc.the_method強大的反射機制與超程式設計.Ruby的反射功能相當驚人，甚至可以自行追蹤程式運作，或是取出private變數、攔截方法的呼叫。常常與『可以動態的修改物件』這項特色結合，做為『超程式設計』的功能：程式在執行時，可以由程式設計師提供的資訊，自行生成、修改類別或物件，這項功能大大的提高了撰寫程式碼的效率。在Rails之中，就大量使用了這種特性。以下為用Rails使用超程式設計的範例：class Project  [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]-{zh-hans:類; zh-hant:類別}-.下面的程式碼定義一個命名為Person的-{zh-hans:類; zh-hant:類別}-。含有一個「initialize」方法，用於構選建立一個新物件，它還有兩個方法，一個過載了比較運算子，codice_30是Ruby中元資料程式設計的例子：codice_31為例項變數定義了getter和setter方法，codice_30只是一個getter方法。另外，方法中最後的宣告是它的返回值，也允許顯式的使用「return」語句。class Personattr_reader :name, :agedef initialize(name, age)@name, @age = name, ageenddef (person) # Comparison operator for sorting@age  person.ageenddef to_s"#@name (#@age)"endendgroup = [Person.new("Bob", 33),Person.new("Chris", 16),Person.new("Ash", 23)puts group.sort.reverseBob(33)Ash(23)Chris(16)各種版本.[[Matz's Ruby interpreter]], 最初也是最常見的Ruby版本, 簡稱MRI, 用C語言撰寫.[[JRuby]]，類似[[Python]]的[[Jython]]，一個可於[[Java]]上執行Ruby的語言，支援Java的介面和類別。最新發布版為9.1.6.0，與Ruby 2.3相容。它的官方網站為jruby.org。[[mruby]]是一個輕量級的Ruby直譯器，可以嵌入到其它應用程式中，或者作為庫連結到應用中。[[Category:Ruby| ]][[Category:程式設計語言]][[Category:指令碼語言]][[Category:面向文字程式語言]][[Category:面向物件的程式語言]][[Category:基於類的程式語言]][[Category:ISO標準化程式語言]][[Category:1995年建立的程式語言]]