Go 語言的下一個大版本:Go 2.0 被安排上了
今年8月Go開發團隊公佈了Go 2.0的設計草案,包括錯誤處理和泛型這兩大主題。現在備受矚目的Go 2.0又有了新動向——昨日Go開發團隊在其官方博客表示,Go 2已經被安排上了!目前Go 2已進入確定變更提案的階段,並公佈了提案評估流程。
廢話不多說,先來看看Go 2.0 有哪些值得關注的內容:
1.最大程度保持對1.x 的兼容,以避免分裂Go 語言生態系統
2.採用增量升級的方式,而非單獨發布重大更新版本
3.實施新的提案評估流程,以評估尚未解決且被標記為提案的issue
4.將會在Go 1.13 版本中選擇Go 2 部分的提案
背景
早在2017年的GopherCon大會上,Russ Cox(Go核心團隊的技術leader)就已經正式開始思考Go的下一個大版本(相關文章)。當時官方非正式地將它稱為Go 2,但我們知道,所謂的Go 2.0並非一個單獨的重大更新版本,而是通過“增量更新(incremental)”的方式以逐漸抵達”Go 2.0″。所以本文對這個未來版本的稱號——也暫且用Go 2來描述。
Go 1 和Go 2 之間的主要區別在於主導權的不同。誰將影響設計,又該如何做出決策?我們都知道,Go 1 的誕生是小團隊努力的結果,受外部影響不大;而到了Go 2,尤其是經過將近10 年的發展後,Go 語言的生態已經十分龐大,因此它也更多地受到社區的驅動和影響。經歷了這些,Go 開發團隊也了解到了更多一開始不知道的與語言特性和庫相關的知識—— 這些都來自於Go 社區的反饋。
2015年,Go 開發團隊引入了提案流程,以收集特定類型的反饋:針對語言和庫變更方面的提案。由Go 開發團隊高級成員組成的委員會定期審查、分類和決定社區提交的提案。這個流程十分有效,但作為該過程的一部分,他們忽略了所有不向後兼容的提案,只是將其標記至 Go 2。到了2017年,Go 開發團隊也停止進行任何類型的向後兼容的“增量”語言特性變更,因為他們認為無論變更多麼小,都要有更全面的支持計劃,並將Go 2 考慮在內。
對於這些累積下來的提案,官方表示現在是時候採取行動了!
近況
本文發佈時,官方表示目前在Go 2的提案中,大約有120個尚未解決且被標記為提案的issue。這些提案都涉及到重要的庫或語言特性變更,而它們通常不能與Go 1互相兼容。Ian Lance Taylor和Robert Griesemer一直在研究這些提案,並對它們進行了分類(Go2Cleanup, NeedsDecision等),以理解這些提案背後的含義並使它們後續更易進行。此外,他們還合併了相似的提案,並關閉了那些看似明顯超出Go範圍的提案,或者其他方面無法實現的提案。
早期出現的兩個提案包括更好的錯誤處理和泛型,而它們的草案已在今年的GopherCon 大會上發布,等待更多的探索發展。至於剩餘的提案,官方提到,他們不希望過度影響數百萬Go 開發者以及現在的Go 代碼,更不想冒著分裂生態系統的風險去改版Go 2,因此Go 2 無法做出太多變更,每一個變更都需要仔細選擇。為此,這些提案都將使用新的提案評估流程來決定去留與發展。
提案評估流程
提案評估流程旨在收集對少數選定提案的反饋意見,以作出最終決定。這個過程或多或少會與發布週期並行進行,包括以下步驟:
- 提案選擇: Go開發團隊選擇少量看起來值得考慮接受的Go 2提案,但尚未做出最終決定。
- 提案反饋: Go開發團隊將發布一份列出所選提案的公告,公告會向社區解釋提案的初衷並收集反饋意見。在這個步驟中,社區可提出建議。
- 實現:根據來自社區的反饋意見,提案開始實現。
- 針對所實現的提案的反饋:在開發週期中,Go開發團隊和社區試用新功能並且收集進一步的反饋意見。
- 啟動決策:在三個月的開發週期結束時,根據在發布週期中收集的經驗和反饋意見,Go開發團隊會考慮變更的預期收益或產生的額外成本,從而最終決定是否發布每個變更。一旦發布,這些被發布的提案就成為語言和庫的一部分。未被發布的提案可能會重新起草,但也有可能會被永久拒絕。
可以看到,通過兩輪的反饋過程,可對提案進行有效的篩選,從而防止“功能蔓延(feature creep)”,有助於保持Go 語言的簡潔。
提案選擇標準
一項提案至少要滿足以下這些條件:
- 解決大部分使用者覺得重要的問題
- 不會對其他使用者造成太大的影響
- 提供一個清晰且易於理解的解決方案
條件1確保提案所做的任何變更都可以幫助到盡可能多的Go 開發者(使他們編寫的代碼更健壯、正確性更高等),條件2則保證了變更將給使用者帶來的影響降到最低。
至於條件3,如果提案不能滿足該條件,它將不會被實現。即便這項提案能夠解決一個很重要的問題,思路也很好,但在沒有實現方案的情況下,它將會被拒絕,並需要重新起草。
下一步
在這篇文章發佈時,Go開發團隊表示已經執行提案評估流程的第一步,並開始了流程的第二步,關於具體的提案可點此進行查看。
對於Go 開發團隊已經明確並通過的提案,將會繼續實現(即評估流程的第3步)。開發團隊表示希望在下一個發布週期的第一天(暫定於2019年2月1日)完成這些提案變更的實現,所以這次可能會在較早的時間開始進行,以留出兩個月的反饋時間(2018年12月至2019年1月)。
而在為期3個月的開發週期中(2019年2月至5月),被選擇的提案將會被實現,每位使用者都可以體驗新功能並進行反饋(評估流程的第4步)。
最後,在短暫的凍結期後(2019年5月1日),Go 開發團隊會最終決定是否永久保留新功能(並保證這些功能與Go 1 兼容),或是放棄這些功能(評估流程的最後一步)。
Go 開發團隊表示這是首次採用這一流程,因此在凍結階段將會是反思這個流程,並在必要時進行調整的好機會。我們也不妨拭目以待吧!