- 自己動手構建編程語言:如何設計編譯器、解釋器和DSL
- (美)克林頓·L.杰弗瑞
- 816字
- 2024-05-11 19:44:55
1.1.1 編程語言實現的類型
不論原因是什么,在構建一種編程語言之前,我們都應該選擇能找到的最佳工具和技術來完成這項工作。在本書的案例中,我們將對這些工具和技術進行挑選。首先,在構建編程語言的過程中,有一個關于其語言實現的問題。編程語言學者喜歡吹噓自己用了某種語言編寫自己的語言,但這通常只是半真半假(或者有人非常不切實際,同時又在炫耀自己)。還有一個問題是要構建什么樣的編程語言實現:
?執行源代碼本身的純解釋器。
?本機編譯器和運行時系統,例如在C語言中。
?將編程語言翻譯成其他高級語言的轉譯器。
?帶有字節碼機器的字節碼編譯器,例如Java。
第一個選項很有趣,但通常太慢;第二個選項是最好的,但通常太費力了,一個好的本機編譯器可能需要很多人多年的努力。
雖然第三個選項是迄今為止最簡單、可能也是最有趣的,并且我以前也成功地使用過它,然而如果這不是一個原型,那么這就是騙人的。當然,C++的第一個版本是一個轉譯器,但這讓路給了編譯器,而不僅僅是因為它有缺陷。奇怪的是,生成高級代碼似乎使你的語言比其他選項更依賴于底層語言,而且語言是移動的目標。好的語言之所以消亡,是因為對其潛在的依賴性消失了,或者已對其造成了無法修復的損壞,這也許是大量小修改不斷累積造成的。
本書選擇了第四個選項:我們將構建一個附帶一個字節碼機器的字節碼編譯器,因為這是一種最佳選擇,它在提供最大靈活性的同時仍提供了相當不錯的性能。本章將介紹本機代碼編譯,適用于那些需要最快執行速度的用戶。
字節碼機器的概念非常古老,它因UCSD的Pascal實現和經典的SmallTalk-80實現等而聞名。隨著Java的JVM的發布,它變得無處不在,甚至可以成為普通的英語詞匯。字節碼機器是由軟件解釋的抽象處理器,通常稱為虛擬機(如Java虛擬機),而我不會使用這個術語,因為它有時也指使用真實硬件指令集的軟件工具,例如,IBM的經典平臺或更現代的工具,如Virtual Box。
字節碼機器通常比一塊硬件高出一點,因此字節碼的實現提供了很大的靈活性,我們下面快速了解一下字節碼。
- Spring Boot開發與測試實戰
- 工程軟件開發技術基礎
- 零起步玩轉掌控板與Mind+
- Python程序設計(第3版)
- AngularJS Web Application Development Blueprints
- Java Web程序設計
- Visual Basic程序設計實驗指導(第二版)
- Android應用開發實戰
- Python數據可視化之美:專業圖表繪制指南(全彩)
- JavaScript從入門到精通(視頻實戰版)
- Tableau Desktop可視化高級應用
- Android系統下Java編程詳解
- 多媒體技術及應用
- 從零開始:C語言快速入門教程
- Clojure High Performance Programming(Second Edition)