Go 部落格

貢獻者峰會

Sam Whited
2017年8月3日

引言

在 GopherCon 前一天,一群 Go 團隊成員和貢獻者齊聚丹佛,共同討論和規劃 Go 專案的未來。這是同類活動中的第一次,是 Go 專案的一個重要里程碑。活動包括一個圍繞特定主題進行重點討論的上午場,以及一個由小型分組圓桌討論組成的下午場。

編譯器和執行時

編譯器和執行時會議首先討論了將 gc 及相關工具重構為可匯入的包。這將減少核心工具和 IDE 的開銷,因為 IDE 可以自行嵌入編譯器來進行快速語法檢查。程式碼也可以完全在記憶體中編譯,這在不提供檔案系統的環境中非常有用,或者可以在開發時持續執行測試以獲取即時錯誤報告。關於是否繼續進行這項工作的更多討論很可能會在未來在郵件列表上提出。

會議還大量討論瞭如何彌合最佳化後的彙編程式碼和 Go 之間的差距。Go 中的大多數加密程式碼出於效能原因都用匯編編寫;這使得除錯、維護和閱讀變得困難。此外,一旦開始編寫彙編,通常就無法再呼叫 Go 程式碼,限制了程式碼複用。用 Go 重寫將使維護更容易。新增處理器內在函式和更好地支援 128 位數學運算將提高 Go 的加密效能。有人建議,1.9 版本中即將推出的新的 math/bits 包可以為此目的進行擴充套件。

對於編譯器和執行時開發不太熟悉,對我來說,這是當天更有趣的環節之一。我學到了很多關於當前狀態、存在的問題以及人們未來的發展方向。

依賴管理

dep 團隊快速介紹了專案狀態後,依賴管理會議轉向了在 dep(或類似 dep 的工具)成為主要包管理方式後,Go 世界將如何運作。使 Go 更易於入門並使 dep 更易於使用的努力已經開始。在 Go 1.8 中,引入了 GOPATH 的預設值,這意味著使用者只需將 Go 的 bin 目錄新增到他們的 $PATH 中即可開始使用 dep。

dep 可能帶來的另一個未來的可用性改進是允許 Go 在任何目錄(而不僅僅是 GOPATH 中的工作區)下工作,這樣人們就可以使用他們習慣於使用其他語言的目錄結構和工作流程。將來也可能透過引導使用者將 bin 目錄新增到其路徑中,甚至自動化該過程來簡化 go install。有許多不錯的選項可以使 Go 工具鏈更易於使用,討論很可能會在郵件列表上繼續進行。

標準庫

我們圍繞 Go 語言未來進行的討論大多包含在 Russ Cox 的部落格文章:邁向 Go 2 中,所以我們繼續討論標準庫環節。

作為標準庫和子倉庫的貢獻者,這個環節對我來說特別有趣。哪些內容應該放在標準庫和子倉庫中,以及它們可以改變多少,是一個沒有明確定義的話題。當 Go 團隊可能沒有在特定主題領域擁有專業知識的成員時,維護大量包可能會很困難。要對標準庫中的包進行關鍵修復,必須等待 6 個月才能釋出新版本的 Go(或者在出現安全問題時必須釋出一個點版本,這會消耗團隊資源)。更好的依賴管理可能有助於將一些包從標準庫遷移到擁有自己釋出計劃的獨立專案中。

會議還討論了一些難以透過標準庫中的介面實現的事情。例如,如果 io.Reader 接受一個 context,以便可以取消阻塞的讀操作,那就太好了。

在確定標準庫將發生哪些變化之前,需要更多經驗報告

工具和編輯器

為編輯器提供語言伺服器是工具環節的一個熱門話題,許多人主張 IDE 和工具開發者採用通用的“Go 語言伺服器”來索引和顯示程式碼及包的資訊。由於微軟的 語言伺服器協議(Language Server Protocol) 在編輯器和 IDE 中得到廣泛支援,因此被建議作為良好的起點。

Jaana Burcu Dogan 還討論了她在分散式追蹤方面的工作,以及如何更容易地獲取執行時事件的資訊並將其附加到追蹤中。有人提議建立一個標準的“計數器” API 來報告統計資料,但在設計這樣的 API 之前,需要社群提供具體的經驗報告。

貢獻者體驗

當天的最後一個環節是貢獻者體驗。第一個討論完全圍繞著如何使當前的 Gerrit 工作流程對新貢獻者更容易,這已經導致了幾個倉庫文件的改進,並影響了幾天後的新貢獻者研討會!

會議還考慮瞭如何更容易找到要完成的任務,賦予使用者在 issue 跟蹤器上執行“園藝”任務(如分類、清理 issue)的能力,以及如何更容易找到審閱者。希望在接下來的幾周和幾個月裡,我們能在這些以及貢獻過程的許多其他方面看到改進!

分組討論

下午,參與者分成更小的組,對上午環節的一些主題進行更深入的討論。這些討論有更具體的目標。例如,一個小組致力於識別經驗報告中有用的部分,並列出記錄 Go 使用者經驗的現有文獻清單,最終形成了經驗報告的維基頁面

另一個小組討論了 Go 中錯誤的未來。許多 Go 使用者最初對 error 是一個介面這一事實感到困惑或不理解,而且很難在不遮蓋諸如 io.EOF 等哨兵錯誤的情況下向錯誤附加更多資訊。分組討論探討了在即將釋出的 Go 版本中可能修復其中一些問題的具體方法,以及在 Go 2 中可以改進錯誤處理的方式。

社群

除了技術討論,這次峰會還為來自世界各地經常交流和合作的一群人提供了面對面會面的機會,許多情況下是第一次見面。沒有什麼能替代面對面的交流來建立相互尊重和同志情誼,這對於背景和想法各異的多元化群體需要聚集在一起在一個社群中工作至關重要。休息期間,Go 團隊成員分散在貢獻者中,既討論 Go,也進行了一些輕鬆的社交,這真正有助於我們將那些每天審閱我們程式碼的名字與面孔聯絡起來。

正如 Russ 在邁向 Go 2 中討論的那樣,有效的溝通需要了解你的受眾。將廣泛的 Go 貢獻者聚集在一個房間裡,幫助我們更好地理解 Go 受眾,並就 Go 的未來展開了許多富有成效的討論。展望未來,我們希望更頻繁地舉辦此類活動,以促進交流和社群意識。

照片由 Steve Francia 拍攝

下一篇文章:貢獻者研討會
上一篇文章:邁向 Go 2
部落格目錄