首頁>Club>
31
回覆列表
  • 1 # 碼洞

    最初使用 C 語言實現的,還有少了的組合語言。漸漸的就變成了使用 Go 語言本身來開發,也就是低版本的 Go 語言開發高版本的 Go 語言。這個概念通常叫著「自舉」,自己把自己舉起來,英文概念叫 Bootstrap。Python 語言有很多直譯器,其中之一叫 pypy,它是使用 Python 語言來編寫的 Python 直譯器,它同樣也是自舉出來的。

  • 2 # Go語言中文網

    golang 本身是用什麼語言編寫的?類似 「xx 語言是用什麼語言實現的」這種疑問挺常見的,特別對於剛接觸程式語言的人!記得我剛接觸時,很困惑:這個語言是 C 實現的,那 C 是什麼實現的?藉此,咱們梳理下這個問題!

    程式語言的發展

    在計算機發展初期,程式設計直接透過機器指令和計算機互動,也就是機器語言,一堆0101,簡直無法讀無法改,所以發展出組合語言。組合語言指令總體上和機器語言指令是一一對應的,但可讀性有了很大加強!這兩種語言稱為低階語言。

    20世紀50、60年代,湧現了各種高階語言,在70年代初,隨著Unix的開發,C語言被開發出來,一直流行到現在。

    之後程式語言不斷髮展,出現了面向物件程式語言、函數語言程式設計語言,還分為動態語言和靜態語言等等。真是百花齊放百家爭鳴。

    然而,程式語言的發展並沒有就此止步。在過去的十年內,又湧現出很多新的語言,如:Go、Swift、Rust、Kotlin、Dart 等等。新語言有一些先天優勢:沒有歷史包袱,可以吸納這麼多年,其他語言的優勢,避免一些問題,同時有些是為了解決某一些問題而出現,也是為了解決之前語言的一些問題。因此,這些新語言,關注度都不錯。

    Go語言的發展歷程

    2009 年 11 月,Google 對外宣佈,開源其通用程式語言 Go 語言,因為 Google 出品,同時創作者又是特別有名的幾個人,立馬引起大家極大的興趣,當年 Go 奪下了 TIOBE 2019年年度程式語言稱號。2012 年 3 月份,Go 釋出了 Go1.0 穩定版本。之後每年釋出兩個版本。下圖是目前為止,釋出版本的情況,下表主要列舉 GC 相關的改進。

    Go 本身用什麼語言實現

    Go1.4 之前(包括1.4),主要是 C 語言實現的(當然還有部分彙編);Go1.5 開始,實現了自舉:也就是用低版本的 Go 語言編譯自己,這個過程,Go 團隊做了大量的自動化轉換工作。

    所以,現在 Go 語言是用 Go 語言實現的,當然,包含部分彙編程式碼。

    https://github.com/golang/go

    這是 Go 語言原始碼地址。

  • 3 # 傑作良品

    Go 語言在1.5版本前主要由彙編和C語言寫的,C語言佔比85%以上,另外有少量的周邊模組如文件等,帶了些 html shell perl 程式碼,可以忽略不計。1.5版本及之後,Go 完成了語言自舉,用上一個大版本寫當前的版本,比如用 Go 1.4寫Go 1.5,之後以此類推!截止2019年,Go 由 89.9% 的Go,4.6%的組合語言,0.2%的C語言,5.3%其他膠水語言(html shell perl)編寫而成!

  • 4 # 萬能擼Sir

    1.5之前是c和少量彙編,1.5之後實現自舉,也就是golang實現golang的編譯器,當然,這裡說的是主要由golang實現,並不是全部。

  • 5 # EmacserVimer

    Go語言現在已經實現了自舉,也就是說現在Golang是用Golang自己編寫的自己。早期Go是用匯編語言和C語言實現的,後來Go成熟了之後,Go語言就開始自舉、用早期版本重寫了Go語言編譯器。

    國內位元組跳動和嗶哩嗶哩,都是以Go語言為核心技術棧的企業,Docker、七牛雲端儲存、百度、騰訊也都在開始使用Go語言在自己實際專案當中,手機百度訊息業務就是Go語言寫的,要知道手機百度可是扛住了春晚流量洪峰的,這說明你應該把Go語言學起來了。

    Google逐步實現Go語言“去C語言化”

    很多程式語言的核心都是C語言,甚至可以說現代計算機核心基礎都構建在C語言和Unix之上,肯湯普森和丹尼斯里奇老爺子創造了C語言和Unix,然後C和Unix再生萬物。JVM、PHP核心、GCC、Emacs、Vim、Unix、Linux等等,這些全都是用C語言來寫的。

    Go語言自然也不例外,Go語言編譯器最初也是C語言寫的,Go語言的作者之一就是大名鼎鼎的祖師爺肯湯普森。Google早在2014年初的時候,就已經開始在籌備從Go語言的原始碼中徹底移除C語言,也就是說讓Go語言真正完成自舉。

    Google自舉Go語言的具體方案

    Go語言是效率很高的程式語言,比Java、C#、PHP、Python這些基於虛擬機器以及解釋性語言效能要好、資源使用效率也更高。基本上除了C/C++之外,Go語言就是效能最好的高階語言,相對於C和C++、Go語言在語法上又有極大的優勢。

    Java和PHP都只能部分自舉,Java的JVM還是得用C語言實現,PHP核心也得用C語言來寫,能夠實現自舉的程式語言必須是圖靈完備的,因此HTML 、CSS也沒辦法完成自舉,他們也不是真正意義上的程式語言。

    Google具體的實施步驟:開發一個C到Go的編譯器,將現有的C編譯器翻譯成Go語言;轉化編譯器原始碼樹、得到一個Go語言編譯器;將C風格明顯的Go編譯器轉化成徹底的Go語言風格Go編譯器;對Go編譯器進行最佳化,主要是最佳化處理器、記憶體效能使用問題,加入並行機制、最佳化消除冗餘檢查和邊界檢查能力;用最新版go/parser和go/types替換編譯器前端。

    Google為什麼要讓Go語言實現自舉呢?

    自舉意義主要有三點:測試被自舉的程式語言;實現用更高階和抽象的程式語言來編寫編譯器;程式語言也能從語言本身的發展獲益。

    能夠自舉證明至少程式語言是圖靈完備的,證明了程式語言本身具備這樣強大的能力,這本身也是對程式語言的一種宣傳,至少證明程式語言具備很強的通用能力、以及非常強的底層能力。在自舉過程中,本質上也是對程式語言的一次考驗,核心開發者在這個過程中,可以積累很多程式語言本身的經驗教訓,能夠儘早發現程式語言本身存在的不足和設計缺陷,方便能夠及時做出調整和最佳化。

    因此程式語言想要自舉,這件事情做得越早越好,自舉的過程也是一次對程式語言的完善過程, 在程式語言定型之前越早完成自舉,程式語言就成熟得越早,C/C++之所以這麼多年經久不衰,就是因為他們本身足夠成熟,其他程式語言要發展,都要靠這兩們程式語言,Go語言現在也具備這樣的可能。

    Go語言是一個非常出色的程式語言,設計理念現代、能力又強、效能又好,儘管Go語言缺少宏、泛型會讓你的程式碼重複度高,可是Go語言更多的是拋棄了C/C++的缺點,吸收了很多程式語言的優點發展起來的一個比較年輕的程式語言。Go語言的大量工程實踐證明,這是一門極其強大的程式語言,各位同行可以學起來了。

  • 中秋節和大豐收的關聯?
  • 5月12日KPL,對戰QG時,GK因網路波動暫停後丟掉優勢局,這對GK來說公平嗎?