自制程式語言有什麼好處?

出版圈郭志敏發表於2013-09-22

1. 可以幫助理解程式語言的內部執行機制

程式語言是程式設計師每天都要使用的工具。深刻地理解這個工具,對程式設計師來說非常重要。

一般來說,重新編寫一個與已有程式相似的程式會被說成是“重複發明輪子”,這在行業內是不被認同的。但本書中想要實現的,偏偏是在眾多語言存在的前提下再製作一門新的語言,正是“重複發明輪子”。這是深刻理解程式語言的最佳途徑(缺點是要花很多時間)。

2. 能製作領域專用語言

比如在Unix的世界中,有sed和awk兩種歷史悠久的專為文字處理定製的語言(後來在此方向上發展出了Perl語言)。PHP則是專門面向Web程式開發的語言。如果掌握了製作程式語言的技術,就可以在必要的情況下製作出領域專用語言(DSL,Domain Specific Language)。

領域專用語言不一定會像Perl與PHP那麼複雜,在很多情況下,如果能書寫條件分支或者簡單語句的話會方便許多,這也可以看作是一種專用領域。

比如在業務流程處理等軟體中,很多時候為了切換測試環境與生產環境的資料庫,需要重寫配置檔案,而這一操作經常會引發問題(比如由於版本升級需要增加配置檔案專案,此時必須與舊版本配置合併)。這時候我們可能就會想,如果能直接在配置檔案中寫if語句將其按域名分開就好了。

除此以外,我們在填寫資料時可能希望能支援類似Excel的簡單計算公式,在玩遊戲時希望能把遊戲中的臺詞匯出到一個外部檔案中,等等。這些都可以看作專用領域並製作對應的DSL。

3. 可以用程式語言擴充套件應用程式

將以上兩方面的考量進一步延伸,我們就會得到以通用語言擴充套件某個應用程式的構想。Emacs這個編輯器就內建了Emacs Lisp這種Lisp方言,從而為Emacs的自定義提供了無限的可能性。同理,Microsoft Office也可以使用VBA進行擴充套件。

對於這類應用程式擴充套件語言,當然完全可以使用某種已有的程式語言(Lua等就在向這個方向發展),也可以在編寫應用程式時從底層到擴充套件全部自己實現。這樣就無需擔心使用其他程式語言在版本升級時引起的相容性問題了。

4. 說不定還會變成名人

如果自制的程式語言能在世界範圍內得到廣泛使用,那就太棒了。比如Ruby之父松本行弘先生就是世界名人。

不過坦白講,通過自制程式語言來獲得成功實在是太難了。即便語言被創造出來,如果沒人用的話就不會產生相應的軟體,這樣就更不會有人用了。況且,即便真的因為發明了新的語言而變成了名人,通過這個賺到錢的希望也十分渺茫啊。其實我自己最近寫的語法處理器都是免費釋出的(不這樣的話,語言沒法普及呀)。

5. 自制程式語言非常有趣

囉嗦了這麼多,說到底其實是因為自制程式語言非常有趣。

自制一門程式語言確實是一件非常有意思的事。有人說過“想寫出終極程式的程式設計師,最終都去寫作業系統或者程式語言了”,你可以通過自制程式語言感受到接觸最核心技術的樂趣。

希望更多的人投入到自制程式語言中來。

本文摘自《自制程式語言》

相關文章