【十問十答】對話Go語言開發團隊

csdn發表於2014-10-22

  Go是谷歌推出的一門程式語言。熟悉Go語言的開發者都知道其彌補了C語言的不足並且保持了C的極簡主義。使用Go編譯的程式可以媲美C或C++程式碼的速度,而且更加安全、支援並行程式(使用Go語言的12個理由)。一些主流的專案包括DockerHeroku's Force.com以及Cloud Foundry's (Go)Router都是基於Go語言編寫而來。有人說,Go為雲而生,也正是由於其擁有併發性的作業系統以及完美的架構,使其備受開發者的青睞。

  本月10日在巴黎舉行的dotGo會議最後一個環節,是對Go語言開發團隊(包括memcached開發者Brad Fitzpatrick)的問答。本文譯自Sourcegraph的同學的現場記錄,讓我們一起來聆聽大神們怎麼看Go語言吧。

  譯文如下:

Go語言開發團隊成員:Francesc Campoy Flores、Andrew Gerrand、Brad Fitzpatrick、Dave Cheney、Keith Rarick及Blake Mizerany

  Q1:在任何程式語言中都會出現反模式(譯註:指應該避免的錯誤用法)尤其是新語言,人們還在學習該使用和複用哪些語言特性。你們在Go語言中看到了哪些反模式,正確的做法是什麼?

  Dave Cheney:我覺得是包,現在的包實在是太多了。包的粒度應該是一個比較完整和具體的概念,比如HTTP包合適,而HTTP Client就不合適。

  Utility包沒問題,但名字不應該只是叫“utils”。

  Q2:坊間有不少第三方的依賴管理工具,如:godep,gpm等。未來Go的核心會提供這種功能嗎?

  Brad Fitzpatrick:我們不想來定義遊戲規則,話語權應交給社群,讓它們自由競爭,產生勝者。受歡迎的產品穩定幾年之後,我們才會考慮納入語言核心。另外,我們之所以不太操心依賴管理,是因為在Google內部我們不用這些工具。

  Andrew Gerrand:語言核心中沒有版本管理能促使庫的作者們提供好的、穩定的API。約定是包API改變時,只改變匯入路徑。

  Q3:Go語言在Unix環境下的伺服器端程式設計表現不俗。接下來,人們會不會嘗試使用Go來進行桌面和嵌入式應用的編寫?

  Dave Cheney:我樂於看到Go能在小的ARM處理器上有所表現。我們需要讓編譯器能針對不同的ARM生成相應的程式碼,這還比較簡單。另外,垃圾回收語言需要更多記憶體,但這也是可以解決的問題。

  Brad Fitzpatrick:已經有人用Go編寫GUI庫了。

  Q4:Go語言在對Android支援方面有什麼新進展嗎?

  Andrew Gerrand:當然有!Google紐約辦公室的David Crawshaw正在做這方面工作。他有幾個讓Go在Android上執行的辦法:1)通過NDK,遊戲應用可以訪問畫布、觸控事件、聲音等;2)使用Java與Go相結合的辦法。

  Q5:你認為Go語言的垃圾回收器已經適合用於產品環境的長時間執行、低延遲處理了嗎?

  Brad Fitzpatrick:沒問題啊,只要你仔細處理垃圾。我們已嘗試重構dl.google.com,產生更少的垃圾,延遲非常小。現在Google內部只剩一個客戶的實時需求Go垃圾回收器還無法滿足。

  Q6:類似dlopen的動態載入程式碼有什麼新進展嗎?

  Andrew Gerrand: 可以先看看Lance Taylor最近寫的關於Go語言執行模式的文件:Go程式碼可以在哪些不同上下文中執行。這些模式的實現都在計劃之中,但何時完成誰來完成,具體還沒有時間表,文件可以說是第一步吧。

  Brad Fitzpatrick:我想在聯結器用Go重寫之前都沒時間做。

  Q7:因為沒有機制引用其他goroutine,實現supervision tree和銷燬goroutine執行緒都需要手工操作。這些未來會解決嗎,哪些是通過庫來支援,哪些會通過修改語言?

  Dave Cheney:在今年的GopherCon 會議上,有一種強烈的感覺,設計即使崩潰也能安全恢復的健壯應用是程式設計師的天職。指望系統層面花費投入精力就能坐收百分百可靠性,是靠不住的。

  Andrew Gerrand: 我覺得你應該反過來想想,即使Go語言把這些都實現了又能怎麼樣呢?整個程式崩潰,清理處理器沒法呼叫時,你還不是得自己處理?

  Q8:堆壓縮在路線圖上嗎?還是要等到在2.0版本大改?

  Brad Fitzpatrick:這個在路線圖上。(Brad自己在此次會議的演講中說,Go 2.0還根本沒影呢)

  Q9:Go語言在新特性開發上好像較保守,不願意增加新特性,這是有意為之嗎?

  Dave Cheney:是的,這正是Go的特色之一。

  Andrew Gerrand:Go的設計當初只需要三名成員達成共識就行。現在成員多多了,所謂眾口難調,共識更難達成。(半開玩笑的口氣)小痛點不值得改,而大痛點需要大改,又很難hold住。Go 1.x總體已經定型了,我不認為增加泛型能突然讓大家都滿意。

  Brad Fitzpatrick:記住,標準委員會永遠不會刪掉任何東西。

  Q10:大公司對選擇新語言顯得更為慎重,對於說服他們來使用Go語言有什麼建議嗎?

  Dave Cheney:Go語言進入某個公司,往往是因為能解決具體問題,而不是來自上層的命令。這是最好的推廣語:“它能幫我解決問題。”

  Andrew Gerrand:我必須指出,現在使用Go語言的大公司很多,包括蘋果、Comcast、Facebook等等。更長列表參見這裡

  英文出自:dotGo

相關文章