Go語言1.5版本擁有一個用Go語言自身編寫的完整工具鏈,一個更快的垃圾回收器和在每一個可用的CPU上運行的goroutine,。
Go語言以前的版本通過改善編譯器,、垃圾回收器、開發(fā)工具和對更多平臺(比如:Android/ARM, BSD, Solaris, NaCl)的支持來獲得更優(yōu)秀的性能,。Google曾經(jīng)提到,,它對每個Go語言版本都許下了 兼容性的承諾 ,基本上說“除了安全問題,,不會做出不兼容的更改”
Go語言1.5版本和原來的版本相比沒有什么不同,,盡管一些用戶抱怨在編譯和運行他們的程序時會遇到一些問題, 并在Go 問題列表 中羅列了出來,。然而Google認為1.5版本是一個“有意義的版本”,,大部分變化是底層的變化,以及性能的提升,。下面是一些改進:
編譯器,、鏈接器、匯編器和運行時環(huán)境已經(jīng)從C語言編寫轉(zhuǎn)換成了Go語言編寫,,還有一小部分是匯編語言編寫的,,已經(jīng)徹底摒棄了最初的C語言代碼,。 根據(jù)Go語言的設計者Robert Pike的說法 ,Go語言編譯器通過工具自動轉(zhuǎn)換和一些最終的手動清理操作來避免引入新的bug,。在一些工具的幫助下,,開發(fā)者手動重寫了Go語言運行時環(huán)境。剛開始時,,新的編譯器由于一些C語言結(jié)構(gòu)體沒有轉(zhuǎn)換成有效的Go語言代碼,,導致編譯速度慢了10倍,但是在后來的開發(fā)完善過程中,,性能得到了徹底的提高,。摒棄C語言的一些好處如下:一個代碼庫適用于所有平臺,可以更容易的加入新平臺,,擁有一個統(tǒng)一的采用較少代碼量和簡易維護量的工具鏈,。缺點是:構(gòu)建需要花費兩倍時間,這是因為Go語言代碼也是由工具編譯生成的,。Google計劃在1.6版本中降低構(gòu)建所花費的時間,。
一個編譯器、一個鏈接器,、一個匯編器的目標是要實現(xiàn)通過$GOARCH 和 $GOOS這兩個環(huán)境變量來配置CPU架構(gòu)和操作系統(tǒng),。
Go 1.5很有必要從源代碼來創(chuàng)建分布式。
在標準的stop-the-world垃圾回收器中加入了新的并發(fā)垃圾回收器,,將垃圾回收活動從原來的50毫秒降低到10毫秒以下,。大家可以在 設計文檔 和這些 幻燈片 中找到新的并發(fā)垃圾回收器的更多細節(jié)。由于有了并發(fā)垃圾回收器,,程序運行速度與Go1.4相比,,提高了幾個百分點。
在64位架構(gòu)的大趨勢下,,一些32位的分支將無法再使用,。
新的Go指令追蹤工具可以對程序執(zhí)行細粒度的追蹤。
在Go 1.5中引入的一個重大改變是并發(fā)的最大線程數(shù)量從1上升到了可用的CPU的數(shù)量,。如果一個程序依賴于協(xié)同程序的執(zhí)行順序,,它很有可能遇到意想不到的結(jié)果,并且需要修復,。更多的細節(jié)參考 設計文檔 ,。
其他改進如下:所有資源庫支持內(nèi)部包, 外部依賴 ,,go文檔命令以及其他一些改進,。我們在 發(fā)行通知 中介紹了關于Go 1.5新特性的更多細節(jié)。