Perl是我接觸的第一個動態指令碼語言,但其實上它的資曆已經可以作為其它語言的祖母了,1987年,Larry Wall發布了Perl。那已經是20年前的事情了。在電腦世界,20年的時間已經好像是2個世紀以前那麼久遠了。下面列了一些常見的動態指令碼語言的發布日期:
語言 |
發明人 |
發布時間 |
Perl |
Larry Wall |
1987 |
python |
Guido van Rossum |
1989 |
ruby |
松本行弘 |
1993 |
php |
Rasmus Lerdorf |
1994 |
lua |
3位巴西人 |
1993 |
還有很多的動態指令碼語言沒有在上面列出,動態指令碼語言確實是一個龐大的家族。那麼問題是:為什麼會有這麼多的動態指令碼語言?其實答案非常的簡單:因為有更多的特殊需求。每種動態語言實際上都是因為某種特定的需求而誕生和進化的,沒有那種語言可以完全替代另一種。追求一種無所不能的語言實際上是相當錯誤的,這就如同說“一個人能夠適合世界上所有的工作”,這有些自大的可笑了。實際上,只要這個世界存在著文化的差異,存在著審美的差異,各種電腦語言就一定是共存的。
對於不同的電腦語言,我想至少有兩種觀點是值得欣賞的:
- 解決問題需要最合適的工具,如果你的工具箱裡只有一,兩把工具,那麼你能夠解決的問題就是很有限的
- 語言沒有高低貴賤之分,學習一門語言如果交一個朋友,首先你要學會尊重他們,其次你要瞭解他最大的優勢是什麼
好了,我無意陷入各種語言之間的誰是誰非的閑言碎語中去,還是回到Perl語言本身上來吧。關於Perl語言,它最大的特點是什麼呢?我認為應該是它的背景。Perl語言的發明者是一名語言學家,因此Perl語言也在很大程度上打上了人類語言的烙印:
- Perl語言的冗餘性高,冗餘性高是人類語言的特點,這樣即使偶爾的失真也可以完整的表達語言的含義。一般電腦語言更傾向於簡單直接的方式,從這個意義上說Perl語言是一個異類,它追求的是所謂“條條大路通羅馬”,完成同一件事情可以有各種各樣的方法,而且根本就沒有所謂的最佳方法。這也同時造成了Perl代碼因為彼此風格差異太大而很難互相看懂的弊端。但是沒有人會否認,Perl也能寫出很清晰的代碼來,說到底,問題的關鍵其實不在於語言本身,而在於程式員的不同審美趣味。
- Perl語言的上下文環境,人類語言是依賴於上下文環境的,有時候省略了主語或賓語也不會造成理解的困難。一般電腦語言往往極力排斥這種做法,因為這往往造成代碼的難以維護,從這個意義上說,Perl語言其實不適合大規模的軟體開發。
- Perl語言的單數複數,正如英語中有單數和複數的單詞區別一樣,Perl語言用$標識單數變數,用@標識複數變數,用%標識散列,這些奇形怪狀的符號更加增加了Perl代碼的理解難度,如果天書一樣。
- Perl語言的用途,Perl這個名詞的真正含義其實是有些學術化的“實用報表提取語言”(PracticalExtraction andReportLanguage),但是很快就有人稱它為“病態折中垃圾列表器”(Pathologically Eclectic Rubbish Lister)。可是無論如何,如果說還有一種象詩歌一樣的電腦語言,那麼一定是Perl。實際上,它的設計初衷也正是為了處理形形色色的文本。
總結一下,Perl語言是有些過於靈活和浪漫了,就象一個詩人,喜歡在自己的小圈子裡淺吟低唱。他根本不適合大規模的編碼模式,那根本不符合他的個性(如果你非要這樣做,你就要自己承擔一切後果)。但是如果你僅僅把他當作一個可愛的朋友,那麼你一定會從他那裡得到別樣的體會。