對Go團隊的一次訪談
在Google I/O 2013上,幾名Go團隊的成員組織了一個名為“爐邊談話”的活動。Robert Griesemer, Rob Pike, David Symonds, Andrew Gerrand, Ian Lance Taylor, Sameer Ajmani, Brad Fitzpatrick, 與Nigel Tao一同回答了由現場觀眾與那些無緣當場的其他人提出的關于Go的多方面的特征的一些問題。
我們去年同樣也組織過一個類似的活動:Meet the Go team.
當時我們收到了很多問題以至于我們無法在短短的四十分鐘內一一回答。現在我們將會在這里對當時無法現場回答的一些問題做出解答。
連接速度(和內存的使用)對于GC的工具鏈來說是一個已知的問題。有沒有計劃在1.2期間搞定這個問題?
Rob:是的。我們總是在考慮改善工具的性能、語言支持和庫的方法。
我已經很高興的看到了,Go那么迅速就得到了顯著的提高。你能談談,在同其他Google內外的開發者一起工作時,曾經得到的反饋嗎?
Robert:許多開發者,在認真的使用了Go之后,都很高興使用它。他們中許多人提出了一個小很多、更具可讀性、如此易于維護的代碼基:一個50%的代碼縮減,而來自于C++的代碼縮減更多是很常見的。從Python改用Go的開發者們,都很為獲得的性能而高興。典型的抱怨是關于語言中少量的不一致性的(在某一時刻,我們將解決他們當中的一些)。令我驚奇的是,幾乎沒有人抱怨缺少通用性。
Go語言會不會發展成為安卓開發的首選語言?
Andrew:非常棒的想法,但是目前我沒有什么消息可以宣布。
關于Go語言的版本有沒有路線圖?
Andrew:我們沒有關于功能的路線圖。貢獻者們傾向于在他們感興趣的方面做工作。其中比較活躍的方面包括:gc和gccgo編譯器,垃圾回收器和運行時支持(runtime),還有很多其它方面。而我們希望大部分令人激動的改進是對我們的工具(tools)進行改進。你可以在go語言的開發郵件列表找到關于設計的討論和對代碼審查。
至于時間線,我們確實有精確的計劃:我們會在2013年的12月1號發布Go 1.2。
在外界的哪些領域使用Go是你們所希望看到的?在谷歌之外,如何使用Go會讓你們認為是一個巨大的勝利?你們認為Go在哪些領域會有巨大的潛力?
Rob:在哪里部署Go取決于使用她的人,而不是我們。我們很樂意看到Go能在任何地方嶄露頭角。她一開始是被設計用于服務器端的軟件開發,而且也確實在這方面展現出她的魅力。但是,她也在很多其它領域顯現出了她的優勢。整個故事其實才剛剛開始,還有很多的驚喜在等著我們。
Ian:Go很容易上手,因為新手不需要面對復雜難懂的代碼基。所以,我們將看到在未來Go會有兩個巨大的勝利:1.除谷歌之外,許多大型的軟件公司會大量的采用Go語言。2.那些主要用Go的創業公司會有一個重要的IPO(首次公開募股)或者直接被收購。原因很直接:對編程語言的選擇對于一個企業的成功是一個很小的因素。但是,這也以另外一種方式證明:Go會成為成功軟件系統的一部分。
你們是否想過Go在動態加載方面(包或者目標文件)有非常大的潛力?是否考慮過在Go中如何實現動態加載?我認為如果實現動態加載會使一些有趣的構想成為可能,尤其是與接口相結合。
Rob:這也是一個經常被討論的問題。我們能感受到動態加載的想法之強大,也希望我們不用花太長時間就能找到一個實現它的方法。畢竟在進行設計和跨平臺的過程中肯定會有非常多的挑戰。
之前有這樣一個爭論:收集一些database/sql驅動的最佳組合放到一個更加集中的地方。另外一些人則極力反對。明年database/sql會怎樣發展呢?
Brad:當我們為數據庫驅動創建一個子庫("go.db")時,我們擔心這樣會過份的偏向特定的驅動。在這一點上,我始終希望能看到不同驅動之間的公平健康的競爭。在數據庫驅動的wiki上列出了一些優秀的驅動。database/sql包在過去一段時間并沒有獲得太多的關注,主要是因為缺乏驅動。現在驅動有了,這個包的使用量也漸漸上升。更正和Bug也漸漸被反饋回來。我們會繼續修復Bug,但是對于接口的變更暫時不在計劃之內。可能會有一些協助某些驅動的提高性能的小擴展。
那版本的情況呢?從github中導入代碼是Go團隊推薦的最佳實踐嗎?萬一我發布的代碼中依賴的某個github庫的API發生改變了呢?
Ian:嗯,這也是郵件列表中經常討論的問題。我們自己的做法是導入代碼,及時的更新快照。這樣的話,當 API改變時我們的代碼基就不會意外的崩潰。但是,我們明白這樣的方法對于那些自己提供庫的人不是很有效。我們開放的接納關于此方面的建議。記住,這是一個關于Go語言的工具的問題,而不是語言本身。也就意味著:修復這個問題的地方是在工具里,而不是語言本身。
那么,關于Go和圖形用戶界面呢?
Rob:這也是我非常掛心的一個問題。Newsqueak, 被設計專門用來寫圖形程序(或者稱之為app)的一個較早的語言。現在的局勢發生了很多改變,但是我認為Go的并發模型在交互式圖形方面會有非常大的優勢。
Andrew:現在已經有很多對已有圖形庫的綁定,還有一些專為Go開發的圖形庫。其中前景最好的是go.uik,但是她現在還太年輕了。我認為專為Go語言編寫的UI庫在編寫本地應用方面一定有非常大的潛力(想想:通過從一個channel接受消息來處理用戶事件),但是開發一個工業級質量的庫是一個非常艱巨且意義重大的事情。我相信不久之后就會有一個這樣的庫出現的。
與此同時,web平臺是現在最廣泛使用的用戶界面,Go提供了對web應用的強大的支持,雖然只是在后端方面。
Adam Langley 在郵件列表中表示 TLS 代碼還沒有被外圍組織審閱,這些不應該用在產品中。 有代碼審閱的計劃么?并發 TLS 擁有良好的安全實行是非常棒的。
Adam:加密在細微和奇詭之處容易弄得一團糟是出了名的,我只是一只人類。我不覺得 我可以保證 Go 的 TLS 代碼將會如何如何完美,我不想歪曲這點。
代碼中有很多地方有側通道問題:RSA 代碼會被蒙蔽但時間不定,P-224之外的橢圓曲線時間不恒定,Luck13 攻擊可能會生效。我希望在 Go1.2 的時間表內,后面兩個問題能夠得到解決:一個時間恒定的 P-256 實現和 AES-GCM。
沒有人進一步審閱 TLS 協議棧,而且,我沒有調查我們是否能去 Matasano 或其它類似的地方。這取決于谷歌是否愿意資助。
你對 GopherCon 2014大會怎么看? 團隊中的成員有參加的計劃么?
Andrew::我很期待。我確定我們會出現的。