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 團隊無法找到對主題有特定專業知識的成員時,維護大量套件可能會很困難。若要對標準函式庫中的套件進行重大修正,必須等待六個月才能發布新的 Go 版本 (或是在發生安全問題時發布重點版本,這將消耗團隊資源)。更好的依賴關係管理可以促進將某些套件從標準函式庫中移轉至自己的專案,並使用自己的發布時程。

還有一些關於難以透過標準函式庫的介面達成的功能的討論。例如,如果 io.Reader 會接受內容,就會很不錯,這樣就可以取消封鎖讀取作業。

在我們能確定標準函式庫會有哪些變動之前,需要更多 經驗報告

工具和編輯器

供編輯器使用的語言伺服器是工具課程中的熱門話題,許多人提倡 IDE 和工具開發人員採用通用的「Go 語言伺服器」來索引和顯示關於程式碼和套件的資訊。Microsoft 的 語言伺服器通訊協定 被建議作為一個好的起點,因為它在編輯器和 IDE 中得到廣泛支援。

Jaana Burcu Dogan 也討論了她關於分散式追蹤的工作,以及如何更容易取得執行期間事件的資訊並將其附加到追蹤中。有人提議建立標準的「計數器」API 來回報統計資料,不過在設計此類 API 之前,需要社區提供具體的經驗報告。

貢獻者經驗

那天的最後一堂課程是關於貢獻者經驗。第一場討論完全是關於如何簡化新的貢獻者目前的 Gerrit 工作流程,這已經改善了數個存放庫的說明文件,並影響幾天後的新的貢獻者工作坊!

我們也考慮了讓大家更輕易找到工作任務、授權使用者在問題追蹤器上執行園藝工作任務,以及讓大家更輕易找到審查員。希望我們能在未來幾週和幾個月內,在這些領域和許多其他貢獻流程領域中看到改善!

分組會議

下午,參與者分組成較小的團體,針對上午場次的某些主題進行更深入的討論。這些討論有更具體的目標。例如,其中一組著重於找出經驗報告中有用的內容,以及一份記錄 Go 使用者經驗現有文獻的清單,最後形成經驗報告 Wiki 頁面

另一組考慮了 Go 錯誤的未來。許多 Go 使用者最初會對 error 是介面感到困惑或不了解,而且難以附加更多資訊至錯誤,而不遮蓋像 io.EOF 之類的哨兵錯誤。分組會議討論了某些特定方式,比如利用方法來修正即將推出的 Go 版本中的某些問題,以及如何在 Go 2 中改善錯誤處理。

社群

除了技術討論外,高峰會也提供了一個機會讓一群來自世界各地、經常互相交談與合作的人們親自見面,而且對許多人而言這是第一次。對於建立相互尊重和同志情誼,面對面的相處時間不可或缺,而當擁有不同背景和想法的多元族群需要團結起來在單一社群中工作時,這更是至關重要。在休息時間,Go 團隊成員分散在貢獻者之間,討論 Go 與一些一般社交活動,這真的有助於我們將 چهره與我們每天審查程式碼的名字連繫起來。

正如 Russ 在 邁向 Go 2 中所討論的,有效溝通需要了解你的受眾。在房間內齊聚許多 Go 貢獻者有助於我們所有人都更了解 Go 受眾,並開始針對 Go 的未來進行許多富有成效的討論。展望未來,我們希望舉辦公更多像這樣的活動,以促進討論及培養社群意識。

相片由 Steve Francia 提供

下一篇文章: 貢獻工作坊
前一篇文章: 邁向 Go 2
部落格索引