Go 1.7會提升編譯速度并且會產生更快的代碼
Go 1.7的開發周期即將接近下一個里程牌版本,不過Go的提交者Dave Cheney報告了在即將發布的釋放版本中,團隊在提升語言工具鏈方面所做的努力。
Cheney指出,基于當前的開發狀態,Go 1.7將會很輕易地成為史上最棒的Go釋放版本。在工具鏈提升方面的努力主要聚焦在兩個領域:
- 編譯和連接時間;
- 代碼生成。
在編譯時間方面,自從由C轉向Go以來,Go編譯器就飽受較差的性能所困擾。這個問題已經有了很多的討論,在面向Go 1.7的版本中,最近的工作已經完成,它致力于減少編譯器所使用的內存量并且在連接時間方面也有所提升。相對于Go 1.5.3,這能夠將總的編譯時間降低大約20-30%,如下圖所示:
我們可以看到,Go 1.4.3編譯器的性能依然要明顯優于當前的1.7版本。不過,當前的性能提升也不應該被低估,尤其是新的Go編譯器包含了一個全新的代碼生成后端,在性能方面,它還沒有完全成熟。
還需要提及的是自舉(bootstrap)Go編譯器的決策其實與性能無關,而是使用Go來取代C會在開發方面所帶來的優勢,這包括易于編寫正確的代碼、調試、更好的工具以及對并行的支持等等。實際上,Go編譯器的代碼是從C代碼庫自動轉換得到的,而不是完全重寫的。
如前文所述,代碼生成是Go 1.7另一個主要關注的領域。新的后端改成了使用靜態單一分配形式(static single assignment,SSA),這與LLVM和其他編譯器相同,這樣能夠對生成的代碼啟用多項優化。其中包含無用代碼消除(dead code elimination)、寄存器分配(register allocation)、棧幀分配(stack frame allocation)等。如Cheney所述,在當前的初步開發版本中,Go 1.7新的SSA后端所產生的代碼在速度上能夠最高提升20%。另外,相對于Go 1.6,它所產生的二進制會更小,在很多方面,這個版本能夠與Go 1.4版本相媲美。
來自:InfoQ