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