官术网_书友最值得收藏!

  • 自制編程語言
  • (日)前橋和彌
  • 1229字
  • 2021-11-24 18:03:47

1.1 為什么要制作編程語言

本書的主題是自制編程語言。單說現在被廣泛使用的編程語言,就有C、C++、Java、C#、Perl、Python、Ruby、PHP、Lisp、JavaScript等。可能有人會質疑,既然已經有這么多語言了,真的有必要再特意創造一門新的語言嗎?

實際上,自制編程語言還是大有益處的。

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.自制編程語言非常有趣

啰嗦了這么多,說到底其實是因為自制編程語言非常有趣。

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

讓盡可能多的人感受到這種樂趣,這正是本書的目標。

主站蜘蛛池模板: 青龙| 玉田县| 喜德县| 都昌县| 宿松县| 荆州市| 宁海县| 望都县| 东港市| 县级市| 聂拉木县| 江城| 外汇| 营山县| 沧州市| 清涧县| 高淳县| 含山县| 遂昌县| 张家界市| 南靖县| 启东市| 远安县| 遂昌县| 铁岭县| 澜沧| 威宁| 湖州市| 安丘市| 绍兴市| 眉山市| 巴彦淖尔市| 鄢陵县| 德江县| 黎平县| 灵寿县| 敖汉旗| 汪清县| 景洪市| 河源市| 古田县|