技術雜談:Perl 6 小感 - 開源教學

文章推薦指數: 80 %
投票人數:10人

Perl 6 是Perl 家族的新成員,在2015 年十二月發布了第一個正式版(v6.c),代表其語言特性大抵上穩定了下來。

在今年年初開始,陸續有數本. 由MichelleChen撰寫。

最後修改於西元2017年09月24日 開源教學技術雜談Perl6小感 Perl6是Perl家族的新成員,在2015年十二月發布了第一個正式版(v6.c),代表其語言特性大抵上穩定了下來。

在今年年初開始,陸續有數本Perl6相關的書籍問世,代表Perl6社群開始試著向外拓展。

筆者最近利用一些時間學習Perl6的核心特性,在此向各位讀者分享一些心得,做為使用Perl6的參考。

TheGood Perl6最值得稱許的特性,就是內建一套完整的物件系統。

原先Perl5的物件系統相對簡單,有許多開發者試圖改善Perl5的物件系統,反而造成Perl5物件系統的混亂局面,直到引入Moose後,Perl5才有一個社群公認的物件系統。

Perl6的物件系統支援不少特性,像是封裝、繼承、Role(類似Java8的介面)、函式重載、運算子重載、多型等。

Perl家族的特長在於文字處理,而Perl6也延續這個優良的傳統。

像是Perl6內建一套完整的常規表示式引擎。

此外,Perl6的Grammer,將語法分析器(parser)內建在語言特性中,在程式語言中是相對少見的。

透過Grammer,可以用來處理常規表示式無法處理的問題,像是解析HTML、XML或其他複雜的文字檔案。

另外,Perl6的數字系統有特別處理過。

像是0.1+0.2-0.3==0.0這種有理數的運算,在大部分的程式語言,都會有一些微小的誤差而無法正確運算,而Perl6可以得到正確的結果。

目前Perl6速度相對較慢,其數字系統是否足以用於實際情境,仍有待觀察。

Perl6仍然保留sigil這套變數字首,比起Perl6則相對簡化。

針對不同類型的變數,像是純量(scalar)、陣列(array)、雜湊(hash)、副程式(subroutine)等,不需要再頻繁轉換,同一種變數一律使用同一種sigil即可。

對於Perl5程式設計者來說,一開始會不太習慣,但一小段時間後,會發現新的規則更簡單好用。

Perl6對於複合資料結構的支援較先前改善,像是多維陣列(multi-dimensionalarray),不需要透過參考(reference)這種中介結構,可以直接呼叫,大幅簡化了先前使用參考所需的特殊語法和觀念。

TheBad 雖然Perl6支援多重繼承,但對於方法名稱衝突卻是使用特定演算法自動處理,而無法人為介入。

由於Role對於方法名稱衝突會引發錯誤,但多重繼承不會,筆者認為這項特性算是設計上的失誤。

在Perl6正式版推出後,這個特性應該不太可能再大改,目前比較好的方法就是避免使用多重繼承。

Perl6大量使用特殊符號代替函式或方法呼叫,雖然語法比較簡短,但是某種程度上會增加閱讀的困難;即使筆者先前有使用Perl5的經驗,在讀官方文件時,仍會對過多的符號產生排斥感。

此外,特殊符號比較難透過搜尋引擎尋找相關文章,對於初學者來說也是相對不利。

Perl6仍然相當靈活,甚至可以自訂新的運算子,在某些情境下,這個特性有些幫助,像是數算運算等。

但是,筆者認為這個特性要審慎使用,過多的特殊符號,會使得程式碼難以閱讀和維護。

TheUgly 雖然Perl6有豐富的語言特性,缺乏足夠的套件,使得Perl6難以推廣。

尤其,缺乏RubyonRails這種重量級軟體(killerapplication),更使得使用者不願轉換到新語言。

雖然Perl6這個計畫拖了得久,但Perl6在2015年十二月才發布第一個正式版,實際的年齡仍相當年輕。

這方面只能依賴有心的社群成員持續努力。

目前的時空背景和Perl當初問世時大不相同,使得Perl6難以出頭。

Perl剛問世時,好的高階直譯語言很少,由於Perl在文字處理的長處,使得Perl大量用於CGI網頁程式。

然而,現在至少有Perl5、Python、Ruby、Groovy等數個成熟的語言生態圈,轉換到Perl6的動機相對薄弱。

此外,近年來有數個易於撰寫的編譯語言,像是Go和Crystal等,更加壓縮Perl6的發展機會。

TheFuture 目前大部分Perl6相關的學習資源多圍繞在語言特性上,較缺乏實務面的運用,某種程度反映了Perl6的現狀。

雖然Perl6有豐富的特性,Perl6虛擬機器的速度仍需加強,這也使得程式設計者暫時不願轉換。

Perl6語言本身和相關工具大抵上已經穩定,若能在套件和框架上加強,仍然大有可為。

Postscript 筆者在這裡放上了Raku(原Perl6)的學習筆記,會於後續更新內容,若有需要的讀者可前往參考。

本文目錄 TheGoodTheBadTheUglyTheFuturePostscript 回頁頂 回首頁



請為這篇文章評分?