Skip to content

期中作業:繳交一份《程式專案 報告》

nnnnnnn1266 edited this page Jun 17, 2022 · 5 revisions

期中作業 : Rubi編譯器 研究與心得

Rubi 是一種高級且高性能的腳本編程語言,且Rubi 是即時編譯,其語法類似Ruby語言,對於使用過Ruby的用戶來說會較好上手。


先由Ruby介紹

關於Ruby

Ruby 是一個注重均衡的語言。Ruby 語言的發明者,松本行弘 Yukihiro “Matz” Matsumoto,混合了他喜歡的語言(如 Perl、Smalltalk、Eiffel、Ada、以及 Lisp)產生了一種嶄新的語言,同時具有函數式與指令式程式設計語言特性

Ruby理念

減少編程時候的不必要的瑣碎時間,令編寫程式的人高興,是設計Ruby語言的Matz的一個首要的考慮;其次是良好的介面設計。他強調系統設計必須強調人性化,而不是一味從機器的角度設想。

何謂Ruby?

  • 開放源碼、物件導向的動態直譯式(interpreted)程式語⾔
  • 簡單哲學、⾼生產力
  • 精巧、⾃然的語法
  • 創造者 Yukihiro Matsumoto, a.k.a. Matz
  • 靈感來自 Lisp, Perl, 和 Smalltalk

Ruby是動態強分型語言

  • 動態 Dynamic v.s. 靜態 Static typing

(例) 動態:Ruby/Perl/Python/PHP 靜態:Java/C/C++

  • 強 Strong v.s. 弱 Weak typing

(例) 強:Ruby/Perl/Python/Java 弱:PHP/C/C++

Ruby的成長

自從在 1995 年公開發表以來,Ruby 在全球吸引了許多忠誠的支持者。2006 年,Ruby 被廣泛的接受。各大城市都有活躍的使用者社群,並舉辦了許許多多場場爆滿的研討會。

2006 年,Ruby 主要的郵件列表:Ruby-Talk 上,討論 Ruby 語言的文章爬升到每日 200 封。近幾年郵件列表討論下降了,因為各個社群有著自己的討論小組。

TIOBE 的最流行開發語言排名調查中,Ruby 排名為全球第 13。根據這樣的成長情況,他們預測 “在半年之中 Ruby 將會進入最受歡迎的第 10 名.” 有越來越多受歡迎的軟體,如 Ruby on Rails 網路框架 是使用 Ruby 撰寫而成,也是為什麼 Ruby 會成長的如此快。

同時,Ruby 是個自由軟體。不僅免費,同時可自由的使用、修改與散佈。

Ruby的靈活性

Ruby 是個相當靈活的語言,可以讓使用者自由的去改變語言的各個部分。 Ruby 的本質部份也可以隨意地被移除或重新定義。現有的部份也可以繼續添加內容。Ruby 試著不去限制程式設計人員。

舉例而言,我們使用(+)運算元來執行加法。但是如果你打算使用 plus 來取代,你可以加入以下的方法到 Ruby 的內建 Numeric 類別之中。

image

Ruby 的運算元其實就是個方法(method)。你也可以重新定義運算元。

Ruby的外觀

Ruby 常使用某些符號與英文關鍵字來輔助撰寫程式。Ruby 不需要事先宣告變數。使用簡單的命名規則來說明變數的生命範圍。

  • 一般小寫字母、底線開頭:變數(Variable)。

  • $開頭:全域變數(Global variable)。

  • @開頭:實例變數(Instance variable)。

  • @@開頭:類別變數(Class variable)類別變數被共享在整個繼承鏈中

  • 大寫字母開頭:常數(Constant)。

  • var 表示變數是個區域變數(local variable)。

  • @var 表示變數是個實體變數(instance variable)。

  • $var 表示變數是個全域變數(global variable)。

結尾的部分

  • =結尾:賦值方法,相當於其他程式語言的set開頭的方法,算是一種語法。

  • !結尾:破壞性方法,呼叫這個方法會修改本來的物件,這種方法通常有個非破壞性的版本,呼叫非破壞性的版本會回傳一個物件的副本。

  • ?結尾:表示這個函式的回傳值是個布林值。

這些符號讓程式設計師可以輕易的定義每個變數的角色,進而增加了程式的可讀性。另外 Ruby 也省略了累贅的 self. ,方便直接來存取每個實體成員。

Ruby的Hello World程式

image

Ruby各種版本

Matz's Ruby interpreter, 最初也是最常見的Ruby版本, 簡稱MRI, 用C語言撰寫。

JRuby,類似Python的Jython,一個可於Java上執行Ruby的語言,支援Java的介面和類別。最新發布版爲9.1.6.0(2016-11-09),與Ruby 2.3相容。它的官方網站為jruby.org。

mruby是一個輕量級的Ruby直譯器,可以嵌入到其它應用程式中,或者作為庫連結到應用中。

Ruby屬於直譯語言

直譯語言是一種程式語言類型。這種類型的程式語言,會將程式碼一句一句直接執行,不需要像編譯語言(Compiled language)一樣,經過編譯器先行編譯為機器碼,之後再執行。這種程式語言需要利用直譯器,在執行期,動態將程式碼逐句直譯(interpret)為機器碼,或是已經預先編譯為機器碼的的子程式,之後再執行。

image

Rubi&語法

##Rubi程式碼支援語法

  • Rubi依照下面所示的順序來進行編譯
image
  • 不支援
  1. 函式宣告
  2. main與function交錯
  3. 在空白處的程式碼隨意打'值'(123、"abc"),而提出warning

##執行流程

執行指令: ./rubi progs/fib.rb

image

##語言處理器

image image image image image image

心得

我一開始其實沒有接觸過Ruby語言,之前常常會在書上看到這個名稱,但是一直沒有機會使用,剛好藉由這次的報告可以對它做一些研究,雖然說Rubi和Ruby不是完全相同的語言,但在語法上還是有些相似的,所以我想說先從Ruby開始,再來到Rubi會比較好上手。不過我還是沒有很熟悉的能操作,再輸入指令時也碰到很多困難,希望在之後空閒時間能夠更深入的研究它。然後就是我還是覺得看懂程式碼很難,真的好難,超難。

參考資料

Ruby 程式語言入門 - 安裝運行環境

Ruby程式設計師的摯友

Ruby維基百科

rubi github

Concurrent Rubi