首頁 > 運動
什麼程式語言是完全自主智慧財產權的
由 閒聊程式碼 發表于 運動2022-12-28
簡介程式語言之所以可以自舉,是因為編譯器的實現只涉及到字串處理和樹、圖等有限的資料結構,而一門高階語言可以實現幾乎所有的程式設計需求
雲計算pass是什麼意思
除了C/C++之外的程式語言,其編譯器都是用C/C++實現的。
這些程式語言(例如python/java)沒法擺脫C/C++而自主執行。
一旦哪天C/C++不讓他們用了,他們也就沒法
升級版本
了。
這類語言,都是不能
自舉
的程式語言。
所謂
自舉
,就是用這門語言去
編寫
自己的編譯器,用自己的編譯器去
編譯
這門語言的程式碼,實現一個
完整
而不斷
更新
的閉環。
隨著版本的升級,語言和自己的編譯器就像DNA一樣螺旋上升,不斷地新增新功能。
實現了自舉的程式語言,就是一門完全自主智慧財產權的語言。
它的執行只依賴於它自己,而不依賴於其他更低階的、更貼近作業系統的語言。
python這種高階語言是不能自舉的,它的執行環境cpython是用C語言實現的。
在python直譯器崩潰的時候會生成core檔案,並且可以用gdb除錯,就像C語言編譯的可執行程式崩潰之後一樣。
在
特別早
的老式計算機上,在組合語言出現之前,使用的是
機器語言
。
機器語言是一個01組成的序列,一般是在紙帶上打孔來程式設計的,效率低下而枯燥。
第一種
組合語言要在這種情況下誕生,就要先用機器語言做一種
彙編器
,讓它可以處理輸入的簡易彙編程式碼。
可以想象,這是一個非常乏味而又容易出錯的過程。
當彙編器出現之後,第一種組合語言就誕生了。
可以用它來編寫功能更強大的彙編器,也可以用它編寫第一種高階語言的編譯器。
拿特別容易出錯的組合語言,去編寫本身就很複雜的高階語言的編譯器,相信這個過程一定
特別的不愉快
。
C語言並不是第一種高階語言,丹尼斯·裡奇當年應該不需要用這麼難的辦法去發明C語言。
他可以使用其他
更古老
的高階語言,去編寫一個最簡單版本的C編譯器,然後用C語言去實現自己的編譯器,從而實現C語言的自舉。
程式語言之所以可以自舉,是因為編譯器的實現只涉及到
字串處理
和
樹、圖
等有限的資料結構,而一門高階語言可以實現幾乎所有的程式設計需求。
編譯器的編寫,實際只用了很少一部分的語法。
這就導致可以先實現程式語言的一個語法子集,一個足以實現其本身的編譯器的
子集
,然後再用它自己更新擴充套件自己的編譯器,從而實現對自己語法的完整支援。
編譯原理
雖然很複雜,但基本脈絡還是把原始碼字串處語法
樹
,然後把語法樹轉化成三地址碼的流程
圖
,最後轉化成機器指令的
二進位制字串
,寫入可執行檔案。
雖然這個過程很複雜,但涉及的資料結構就是
字串
、
樹
、
圖
,涉及的語句型別也只是
if else
、
for
、
while
。
當一個新的程式語言實現了自舉之後,它之後的一切更新都不再依賴其他語言。
就算哪天某種程式語言不讓用了,它依然可以正常使用。
現在如果要做一門新語言的話,它的最初版本的編譯器可以用C語言去寫。
做程式語言時用到的各種演算法知識,還是要參考
編譯原理
(龍書),這幾乎是唯一一本參考書,也是編譯原理領域最著名的教材。
編譯原理 第2版 龍書 2020年圖靈獎得主作品
檢視