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 的預設值,這意味著使用者只需在開始使用 dep 之前將 Go 的 bin 目錄新增到他們的 $PATH 中。

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

標準庫

我們關於 Go 語言未來討論的大部分內容已包含在 Russ Cox 的部落格文章《邁向 Go 2》中,所以讓我們繼續討論標準庫會議。

作為標準庫和子倉庫的貢獻者,這次會議對我來說特別有趣。標準庫和子倉庫包含什麼,以及它們可以改變多少,這是一個沒有明確定義的主題。Go 團隊要維護大量的包,而他們可能並沒有任何特定領域的專業知識,這可能很困難。要對標準庫中的包進行關鍵修復,必須等待 6 個月才能釋出新版本的 Go(或者在安全問題的情況下必須釋出補丁版本,這會耗盡團隊資源)。更好的依賴管理可能會促進一些包從標準庫遷移到其自己的專案,並擁有自己的釋出週期。

關於標準庫介面難以實現的功能也進行了一些討論。例如,如果 io.Reader 接受一個 context,以便可以取消阻塞的讀取操作,那就更好了。

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

工具和編輯器

用於編輯器的語言伺服器是工具會議上的熱門話題,許多人主張 IDE 和工具開發人員採用通用的“Go 語言伺服器”來索引和顯示有關程式碼和包的資訊。微軟的 語言伺服器協議被建議作為一個良好的起點,因為它在編輯器和 IDE 中得到了廣泛支援。

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

貢獻者體驗

當天的最後一場會議是關於貢獻者體驗的。第一次討論是關於如何讓當前的 Gerrit 工作流程對新貢獻者來說更容易,這已經促使了幾個倉庫的文件改進,並影響了幾天後舉行的“新貢獻者研討會”!

更容易找到要處理的任務,讓使用者能夠對問題跟蹤器執行整理任務,以及更容易找到審閱者也被考慮在內。希望在未來幾周和幾個月內,我們能看到這些以及更多貢獻流程方面的改進!

分組討論

下午,與會者分成小組,對上午會議的一些主題進行了更深入的討論。這些討論有更具體的目標。例如,一個小組致力於識別經驗報告中有用的部分,以及一份記錄 Go 使用者經驗的現有文獻列表,從而建立了經驗報告維基頁面

另一個小組考慮了 Go 中錯誤的未來。許多 Go 使用者最初對 error 是一個介面感到困惑或不理解,並且在不遮蔽 sentinel 錯誤(如 io.EOF)的情況下新增更多錯誤資訊可能很困難。分組討論了在即將釋出的 Go 版本中可能解決這些問題的一些具體方法,以及在 Go 2 中如何改進錯誤處理。

社群

除了技術討論之外,峰會還為一群來自世界各地經常交流和合作的人們提供了一個面對面交流的機會,在許多情況下是第一次。面對面的交流對於建立相互尊重和友誼感至關重要,這對於一個擁有不同背景和想法的多元化群體齊心協力在一個社群中工作來說是不可或缺的。在休息期間,Go 團隊成員分散到貢獻者中,就 Go 相關話題和一些一般性社交進行交流,這真正幫助我們認識了那些每天審查我們程式碼的名字。

正如 Russ 在《邁向 Go 2》中討論的那樣,有效溝通需要了解你的聽眾。讓一群 Go 貢獻者聚集在一起,幫助我們所有人更好地理解 Go 的受眾,並開始了許多關於 Go 未來的富有成效的討論。展望未來,我們希望舉辦更多此類活動,以促進交流和社群意識。

攝影:Steve Francia

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