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

1.1.1 編程語言實現的類型

不論原因是什么,在構建一種編程語言之前,我們都應該選擇能找到的最佳工具和技術來完成這項工作。在本書的案例中,我們將對這些工具和技術進行挑選。首先,在構建編程語言的過程中,有一個關于其語言實現的問題。編程語言學者喜歡吹噓自己用了某種語言編寫自己的語言,但這通常只是半真半假(或者有人非常不切實際,同時又在炫耀自己)。還有一個問題是要構建什么樣的編程語言實現:

?執行源代碼本身的純解釋器

?本機編譯器和運行時系統,例如在C語言中。

?將編程語言翻譯成其他高級語言的轉譯器

?帶有字節碼機器的字節碼編譯器,例如Java。

第一個選項很有趣,但通常太慢;第二個選項是最好的,但通常太費力了,一個好的本機編譯器可能需要很多人多年的努力。

雖然第三個選項是迄今為止最簡單、可能也是最有趣的,并且我以前也成功地使用過它,然而如果這不是一個原型,那么這就是騙人的。當然,C++的第一個版本是一個轉譯器,但這讓路給了編譯器,而不僅僅是因為它有缺陷。奇怪的是,生成高級代碼似乎使你的語言比其他選項更依賴于底層語言,而且語言是移動的目標。好的語言之所以消亡,是因為對其潛在的依賴性消失了,或者已對其造成了無法修復的損壞,這也許是大量小修改不斷累積造成的。

本書選擇了第四個選項:我們將構建一個附帶一個字節碼機器的字節碼編譯器,因為這是一種最佳選擇,它在提供最大靈活性的同時仍提供了相當不錯的性能。本章將介紹本機代碼編譯,適用于那些需要最快執行速度的用戶。

字節碼機器的概念非常古老,它因UCSD的Pascal實現和經典的SmallTalk-80實現等而聞名。隨著Java的JVM的發布,它變得無處不在,甚至可以成為普通的英語詞匯。字節碼機器是由軟件解釋的抽象處理器,通常稱為虛擬機(如Java虛擬機),而我不會使用這個術語,因為它有時也指使用真實硬件指令集的軟件工具,例如,IBM的經典平臺或更現代的工具,如Virtual Box

字節碼機器通常比一塊硬件高出一點,因此字節碼的實現提供了很大的靈活性,我們下面快速了解一下字節碼。

主站蜘蛛池模板: 高邑县| 江门市| 丰顺县| 大城县| 祁阳县| 肇庆市| 大渡口区| 安国市| 托克托县| 略阳县| 湄潭县| 武功县| 琼结县| 岑巩县| 海丰县| 勃利县| 嘉禾县| 濮阳县| 宣汉县| 赤水市| 濮阳市| 共和县| 日照市| 墨江| 乌拉特中旗| 怀安县| 宣威市| 建湖县| 清原| 汕头市| 军事| 聂荣县| 随州市| 桐城市| 广西| 高要市| 贺兰县| 万安县| 临朐县| 桑日县| 南投县|