首頁 > 運動

什麼程式語言是完全自主智慧財產權的

由 閒聊程式碼 發表于 運動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年圖靈獎得主作品

檢視

Tags:編譯器程式語言語言C語言自舉