如何評價golang 1.7?
01-12
我只從其它地方評價,因為我不是Go專家。我只是針對Go Release的Blog https://blog.golang.org/go1.7 來談。
看見大家都在談論SSA的改變,而其實Go 1.7的第一個重大提及的其實是Linux on Z的Porting工作,而這裡面有很大一部分工作都是我們上海編譯團隊的Go小組的兩位同事做的,這對Go是好事,因為若想擴大Go的生態圈,是需要更多的平台參與以及努力的,一門語言要走向通用性(如C,C++),無一不是會在各種平台上都有支持,這個世界並不是只有x86。
而SSA的演算法改進,目前我們團隊的Go小組成員也在參與,回饋到社區,而我所知道的是應用SSA以後,在benchmark後是比以前好的,而且好不少。
所以,從這個態勢來看,我是看好Go的,因為大家都在開始為它改善,擴充,不再是Google一家的遊戲,而與Go類似的目前還有SWIFT。我對go的期待只有一個了:那就是讓cgo變得好用點語法和使用上,其他已經都很好了啊,
剩下的就是更快更高更強的問題了。
謝邀,對於Golang的認識還停留在Go1.5那次重大的GC改變,看了Golang1.7的介紹,編譯器後端改用了SSA,而且對build方面做了很多優化,這個從github上面的issue上來看,Go1.6存在大量"build: darwin/amd64 builder is sick #15860"之類的構建問題,所以1.7對構建做了較大改動和優化,另外"net/http: receive buffer memory usage increases by 400x with HTTP2 #15930"和一些其他issue表示,Go1.6對HTTP2的處理並不是很好,存在內存使用過多等多種問題,而這些打了Go1.7的標籤,應該是要在1.7裡面解決了。
沒有宏不算什麼大問題,關鍵是沒有同名函數,很多操作interface的方法只能取一些長得像C的名字。
另外,SSA雖然好,但是Cgo有一堆鏈接問題弄得人很頭疼,比如把一個C的靜態庫和Cgo的靜態庫打包在一起,並支持交叉編譯這樣的事。對用戶而言最大的改良是Link時間減少了50%,整個build過程又回到了過去那種愉快得如跑腳本語言一般的體驗了。
進一步提升GC的性能非常重要,經過測試暫停GC後測試程序性能提升30%左右。1.6.2相比1.5.4,程序的執行效果並不理想,放眼看github上的大量軟體正式版都是用1.5.4發布,總體感覺1.6是一個過度版本。golang號稱並發語言,但是runtime庫的性能不夠理想,還需要進行改進。
1.管道chan吞吐極限10,000,000,單次Put,Get耗時大約100ns/op,無論是採用單Go程,還是多Go程並發(並發數:100,10000,100000),耗時均沒有變化,Go內核這對chan進行優化。
2.互斥鎖Mutex在單Go程時Lock,Unlock耗時大約20ns/op,但是採用多Go程時,性能急劇下降,並發越大耗時越長,在Go1.5並發數達到1024耗時900ns/op,Go1.6優化到300ns/op,究其原因,是構建在CPU的原子操作之上,搶佔過於頻繁將導致,大量消耗CPU時鐘,進而CPU多核無法並行。3.select非同步操作在單管道時耗時120ns/op,但是隨著管道數增加,性能線性下降,每增加1個管道增加100ns/op,究其原因時Go內部不是事件,而是使用沒1ms輪訓的方式。
4.Go調度性能低下,當出現10,000,000Go程時,Go的調度器的性能急劇下降。
編輯於 2016-07-071、ssa添加進去了。
2、編譯時間變短了(比1.4還是長)3、生成文件變小了4、可以生成二進位的庫了(實驗)5、vendor機制默認了6、把x/net/context修改到標準庫了,看了下介面實現,有一部分改變了,所以如果你自己的介面有依賴,可能編譯不過了7、修改了不少的標準庫8、增加了一些其他平台上的編譯還有什麼記不得了,就醬吧。能不能來個 CPPGO 啊... 我想用 Boost....
推薦閱讀: