From Perl To Ruby - 從珍珠到紅寶石

這篇是因為同事果睿師兄發心要開辦內部的 Ruby 語言夏令營,要教導同仁利用 Ruby 處理日常工作遇到的問題,所以寫了一些自己所學一些程式的感想。

*** ***

先抄幾段 Ruby 在維基百科中和 Perl 有關內容

  • CPAN 上排名第一名,同時也是 Perl 6 的開發者的唐鳳(Autrijus / Audrey)說:「Ruby 就是『沒有到處打廣告的 Perl 6 』」。
     
  • 松本行弘在接受歐萊禮(O'Reilly)訪問時,提到「Ruby 借用了很多 Perl 的東西……,Python 遠比 Perl 要少……」、「我認為 Ruby 這個名字作為 Perl 之後的一門語言的名字真是再恰當不過了。」
     
  • Perl之父拉里·沃爾(Larry Wall)說:「很多方面上我還是很喜歡 Ruby 的,這是因為那些部分是從 Perl 借過去的。:-)」、「我還喜歡 Ruby 的 C<*> 一元星號運算子,所以我把它加到 Perl 6 裡面。」

我在寫程式的過程中,學習 Perl 是一個新的里程,過去寫程式到執行,是比較麻煩的,要開啟專用的程式,寫完之後要編譯成副檔名為 exe 的執行檔,然後再執行看看。有問題再重複一次,大一點的程式,編譯要好幾分鐘。

這種程式語言可以簡單稱為編譯式語言,後來學了 Perl,這種可稱為直譯式,就是隨便用個純文字編輯器,寫個幾行,就可以執行了,真的很方便。

 

關於程式,舉幾個例子,用 C++ 印出一行 Hello,它的寫法是:

 

 

#include <iostream>

using namespace std;

 

int main()

{

    cout << "Hello" << endl;

    return 0;

}

 

 

用 Java 寫的程式如下,我覺得很煩瑣,所以我不喜歡 Java。

 

public class HelloWorld

{

   public static void main(String[] args)

   {

      System.out.println("Hello");

   }

}

 

 

如果是用 Perl 寫,就是一行

 

print("Hello");

 

 

用 Ruby 則是

 

puts "Hello"

 

 

更簡單了吧。

在學習的過程中,的確有感覺 Ruby 參考不少 Perl 的東西,所以學起來就輕鬆多了。

 

Perl 真的很好用,是我用的最順手的語言,大部份的情況,可以直接寫程式,不用查資料,除非遇到比較不常用的功能。

其它程式我就要不斷偷看小抄,才能寫出來。一些大型的開發工具,則會適時提供提示,甚至有 AI 會幫你寫出後面的內容,有時真是厲害到嚇到我了。

Perl 雖然好用,但就是缺了一個重要的功能,那就是「物件導向」,雖然勉強說它有這功能,但真的很勉強,而且很難用。若要寫大一點的程式,有「物件導向」就方便很多。

 

在 2018 年,我聽到一個消息,一個叫做 Julia 的語言誕生,它已經花了十年了,終於有了 1.0 正式版。

這是它在維基百科的介紹詞:

他們想要的是一個開源的軟體,它要像 C 語言一般快速而又擁有如同 Ruby 的動態性;要具有 Lisp 般真正的同像性而又有 Matlab 般熟悉的數學記號;要像 Python 般通用、像 R 般在統計分析上得心應手、像 Perl 般自然地處理字串、像 Matlab 般具有強大的線性代數運算能力、像 shell 般膠水語言的能力,易於學習而又不讓真正的駭客感到無聊;還有,它應該是互動式的,同時又是編譯型的。

它幾乎包山包海了,有 C、Perl、Ruby、Python 的優點,那還有什麼好說的。

我一看到就好想學,也真的立刻下載回來,花了幾天學習。

電腦語言真的不難,大概一個星期就大致差不多了,不像學英語,我學 30 多年還說不出幾句,而且還不標準。

學了幾天,發現一件事,Julia 竟然也沒有「物件導向」,資料上是說有可以做出來,但就是比較麻煩,沒那麼好用,Perl 也是說有,但就是不好用。

所以,我最後就放棄 Julia 了。

 

對了,中間我還學過一點點 Python,就是要拿著 Python 的說明文件,就可以寫出基本功能的程式。

因為果睿師兄有用 Python 寫過幾支 CBETA 重要的程式,所以我也必須學習,才能做後續的維護修改。

Python 是有不錯的物件導向功能,不過 Python 的格式要求太嚴格,我實在不喜歡。

別的程式就像一般在寫 email,我要怎麼寫都行,格式蠻自由的,只要基本上看的懂就好。

Python 就有一些要求,有點像要求你寫的文章標題要空四格,每一段落開頭要空二格,段與段之間只能空一行,標點不可放在行首....等等。

就類似這種令人覺得麻煩的規則,所以我也不喜歡 Python。

 

我學的 Perl 是 Perl 5,這是早期的語言,所以沒有很好的物件導向支持。

在 2000 年後,有了 Perl 6 的計劃,我就是一直在等待它。

2005 年,唐鳳開始著手 Perl 6 的設計。對,就是我們的 IT 大臣,他以前叫唐宗漢,在 Perl 界應該算是台灣第一人。

在很久以前我就知道這個人,是個天才型的人物,我也在 BBS 跟他討論過一些問題,當時就滿心期盼等待 Perl 6 的出現,但每年等啊等,就是一直等不到。

 

到了 2016 年,突然在網路上看到唐鳳成為台灣最年輕的政務委員,當時我有在臉書上轉貼這個新聞,除了恭禧他,順便也忍不住在臉書抱怨:我的 Perl 6 呢?

結果唐鳳跑到我臉書回應說:2015-12-25 就已經有正式版了。

當時還真的把我嚇一大跳,還好我沒有說太多抱怨的話。 cheeky

 

這中間有一個「梗」,因為太多人在敲碗等 Perl 6,所以每次有人問何時會出來?就有人回答,聖誕節那天就會有正式版了。

就這樣一年又一年,終於在 2015 年的聖誕節出來了。

 

Perl 6 真的等了好幾年,不過看了一下正式版,似乎功能還不夠齊全,而且好像也無法完全支援舊的 Perl 5 的程式。

一些新的語法我看了也不太習慣,有人說 Perl 6 等太久了,沒有成功,也有人說 Perl 6 和 Perl 5 已經是不同的語言了。

我看了看,心中有不少疑惑,所以也沒有安裝及試用,感覺等了多年的東西有點失望啊。

 

一直到前陣子,需要用到産生 EPUB 的程式,這也是果睿師兄寫的,我覺得不能一直麻煩他幫忙,所以就跟他要了程式,想說自己來處理好了。

果睿師兄是用 Ruby 寫的,因此我也花了幾天,學了一下 Ruby,習慣之後,真心覺得好用,不少地方比 Perl 簡潔,用起來也順,又有物件導向功能,而且有不少現代語言的優點,感覺真的很好。

 

原本還在煩惱,從此要維護工作中三種語言的程式,Perl、Python、Ruby。

結果果睿師兄很好心,他自願把過去用 Python 寫的幾支大程式,全部幫忙改成 Ruby 版,我從此就幾乎不用處理 Python 了。

果睿師兄真是佛心來著。 _/\_

 

果睿師兄說 Ruby 可能慢一點,我是沒什麼感覺。反而是有一支 BM 轉 P5a 的程式,原本是 Python 寫的,在處理大檔時,我曾經等過數十分鐘,等到以為電腦當了,後來確定沒當機,努力等下去,終於有了結果。

改用果睿師兄寫的 Ruby 版去執行,不誇張,五秒內完成。

後來也查到 Python 版也有不少改善的空間,但要動點手腳,花點工夫,不像 Ruby 那樣直覺。

 

既然唐鳳都說「Ruby 就是『沒有到處打廣告的 Perl 6』」。

Perl 之父拉里·沃爾(Larry Wall)也說:「很多方面上我還是很喜歡 Ruby 的,這是因為那些部分是從 Perl 借過去的。:-)」

再加上自己的經驗,學 Ruby 真的不錯,相信只要學一些基礎的功能,在電腦操作上,許多瑣事都可以快速解決,就算只學過幾行,會幾個簡單的功能,都是值得的。

祝同仁們學新語言順利 !

 

重要度:
文章分類:

發表新回應