本教程操作環(huán)境:windows7系統(tǒng)、GO 1.18版本、Dell G3電腦。
(資料圖片僅供參考)
Go語言現(xiàn)在已經(jīng)實現(xiàn)了自舉,也就是說現(xiàn)在Golang是用Golang自己編寫的自己。早期Go是用匯編語言和C語言實現(xiàn)的,后來Go成熟了之后,Go語言就開始自舉、用早期版本重寫了Go語言編譯器。
從 Go 1.5 版本后,完全使用Go語言自身進行編寫。Go語言的源碼對了解Go語言的底層調(diào)度有極大的參考意義,建議希望對Go語言有深入了解的讀者讀一讀。
項目鏈接:https://github.com/docker/docker
Google逐步實現(xiàn)Go語言“去C語言化”
很多編程語言的核心都是C語言,甚至可以說現(xiàn)代計算機核心基礎都構(gòu)建在C語言和Unix之上,肯湯普森和丹尼斯里奇老爺子創(chuàng)造了C語言和Unix,然后C和Unix再生萬物。JVM、PHP核心、GCC、Emacs、Vim、Unix、Linux等等,這些全都是用C語言來寫的。
Go語言自然也不例外,Go語言編譯器最初也是C語言寫的,Go語言的作者之一就是大名鼎鼎的祖師爺肯湯普森。Google早在2014年初的時候,就已經(jīng)開始在籌備從Go語言的源碼中徹底移除C語言,也就是說讓Go語言真正完成自舉。
Google自舉Go語言的具體方案
Go語言是效率很高的編程語言,比Java、C#、PHP、Python這些基于虛擬機以及解釋性語言性能要好、資源使用效率也更高?;旧铣薈/C++之外,Go語言就是性能最好的高級語言,相對于C和C++、Go語言在語法上又有極大的優(yōu)勢。
Java和PHP都只能部分自舉,Java的JVM還是得用C語言實現(xiàn),PHP核心也得用C語言來寫,能夠?qū)崿F(xiàn)自舉的編程語言必須是圖靈完備的,因此HTML 、CSS也沒辦法完成自舉,他們也不是真正意義上的編程語言。
Google具體的實施步驟:開發(fā)一個C到Go的編譯器,將現(xiàn)有的C編譯器翻譯成Go語言;轉(zhuǎn)化編譯器源碼樹、得到一個Go語言編譯器;將C風格明顯的Go編譯器轉(zhuǎn)化成徹底的Go語言風格Go編譯器;對Go編譯器進行優(yōu)化,主要是優(yōu)化處理器、內(nèi)存性能使用問題,加入并行機制、優(yōu)化消除冗余檢查和邊界檢查能力;用最新版go/parser和go/types替換編譯器前端。
Google為什么要讓Go語言實現(xiàn)自舉呢?
自舉意義主要有三點:測試被自舉的編程語言;實現(xiàn)用更高級和抽象的編程語言來編寫編譯器;編程語言也能從語言本身的發(fā)展獲益。
能夠自舉證明至少編程語言是圖靈完備的,證明了編程語言本身具備這樣強大的能力,這本身也是對編程語言的一種宣傳,至少證明編程語言具備很強的通用能力、以及非常強的底層能力。在自舉過程中,本質(zhì)上也是對編程語言的一次考驗,核心開發(fā)者在這個過程中,可以積累很多編程語言本身的經(jīng)驗教訓,能夠盡早發(fā)現(xiàn)編程語言本身存在的不足和設計缺陷,方便能夠及時做出調(diào)整和優(yōu)化。
因此編程語言想要自舉,這件事情做得越早越好,自舉的過程也是一次對編程語言的完善過程, 在編程語言定型之前越早完成自舉,編程語言就成熟得越早,C/C++之所以這么多年經(jīng)久不衰,就是因為他們本身足夠成熟,其他編程語言要發(fā)展,都要靠這兩們編程語言,Go語言現(xiàn)在也具備這樣的可能。
Go語言是一個非常出色的編程語言,設計理念現(xiàn)代、能力又強、性能又好,盡管Go語言缺少宏、泛型會讓你的代碼重復度高,可是Go語言更多的是拋棄了C/C++的缺點,吸收了很多編程語言的優(yōu)點發(fā)展起來的一個比較年輕的編程語言。Go語言的大量工程實踐證明,這是一門極其強大的編程語言。
以上就是go語言源碼是啥寫的的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!