自制編程語言有什么好處?
編程語言是程序員每天都要使用的工具。深刻地理解這個工具,對程序員來說非常重要。
一般來說,重新編寫一個與已有程序相似的程序會被說成是“重復發(fā)明輪子”,這在行業(yè)內(nèi)是不被認同的。但本書中想要實現(xiàn)的,偏偏是在眾多語言存在的前提下再制作一門新的語言,正是“重復發(fā)明輪子”。這是深刻理解編程語言的***途徑(缺點是要花很多時間)。
2. 能制作領域?qū)S谜Z言
比如在Unix的世界中,有sed和awk兩種歷史悠久的專為文本處理定制的語言(后來在此方向上發(fā)展出了Perl語言)。PHP則是專門面向 Web程序開發(fā)的語言。如果掌握了制作編程語言的技術,就可以在必要的情況下制作出領域?qū)S谜Z言(DSL,Domain Specific Language)。
領域?qū)S谜Z言不一定會像Perl與PHP那么復雜,在很多情況下,如果能書寫條件分支或者簡單語句的話會方便許多,這也可以看作是一種專用領域。
比如在業(yè)務流程處理等軟件中,很多時候為了切換測試環(huán)境與生產(chǎn)環(huán)境的數(shù)據(jù)庫,需要重寫配置文件,而這一操作經(jīng)常會引發(fā)問題(比如由于版本升級需要增加配置文件項目,此時必須與舊版本配置合并)。這時候我們可能就會想,如果能直接在配置文件中寫if
語句將其按域名分開就好了。
除此以外,我們在填寫數(shù)據(jù)時可能希望能支持類似Excel的簡單計算公式,在玩游戲時希望能把游戲中的臺詞導出到一個外部文件中,等等。這些都可以看作專用領域并制作對應的DSL。
3. 可以用編程語言擴展應用程序
將以上兩方面的考量進一步延伸,我們就會得到以通用語言擴展某個應用程序的構想。Emacs這個編輯器就內(nèi)置了Emacs Lisp這種Lisp方言,從而為Emacs的自定義提供了無限的可能性。同理,Microsoft Office也可以使用VBA進行擴展。
對于這類應用程序擴展語言,當然完全可以使用某種已有的編程語言(Lua等就在向這個方向發(fā)展),也可以在編寫應用程序時從底層到擴展全部自己實現(xiàn)。這樣就無需擔心使用其他編程語言在版本升級時引起的兼容性問題了。
4. 說不定還會變成名人
如果自制的編程語言能在世界范圍內(nèi)得到廣泛使用,那就太棒了。比如Ruby之父松本行弘先生就是世界名人。
不過坦白講,通過自制編程語言來獲得成功實在是太難了。即便語言被創(chuàng)造出來,如果沒人用的話就不會產(chǎn)生相應的軟件,這樣就更不會有人用了。況且,即 便真的因為發(fā)明了新的語言而變成了名人,通過這個賺到錢的希望也十分渺茫啊。其實我自己最近寫的語法處理器都是免費發(fā)布的(不這樣的話,語言沒法普及 呀)。
5. 自制編程語言非常有趣
啰嗦了這么多,說到底其實是因為自制編程語言非常有趣。
自制一門編程語言確實是一件非常有意思的事。有人說過“想寫出***程序的程序員,最終都去寫操作系統(tǒng)或者編程語言了”,你可以通過自制編程語言感受到接觸最核心技術的樂趣。
希望更多的人投入到自制編程語言中來。
原文鏈接:http://www.ituring.com.cn/article/56295