Go 創始人 Rob Pike 反對在 Go 1.18 標準庫中引入泛型支援:建議不要改動 Go 1.18 中的標準庫

MissD 發表於 2021-10-20
Go

近日,Go 語言創始人之一 Rob Pike 在 Github 上發表評論引發關注。據悉,他已在 Go 程式碼倉庫提交了一個 issue (#48918),反對在 Go 1.18 的標準庫中引入泛型支援,建議不要改動 Go 1.18 中的標準庫。

Go 創始人 Rob Pike 反對在 Go 1.18 標準庫中引入泛型支援:建議不要改動 Go 1.18 中的標準庫

Rob 提出以上建議主要有兩個依據

其一,是因為改動範圍過大,可能會出現差錯。Rob 表示,Go 語言 1.18 版本很可能包括自建立以來對語言的最大變化——引數多型性,俗稱泛型。

儘管語言的變化已經以某種形式進行了十多年,但是庫的變化是非常新的,且暫時沒有設計使用新型別的經驗和依據。當然,多年來 Go 語言團隊已經對此做了很多工作。

關於核心庫將如何適應等議題,目前也已經有很多討論(例如請參見#45955和#48594,還有其他的,而且肯定會很快出現。)

其二,是缺乏實戰經驗。Rob 指出,如何在標準庫中使用這些泛型是需要深思熟慮計劃的。如果現在將它們放入庫中,會給釋出增加了很大的負擔。

可以在生產中進行測試,在一兩個週期內進行更改、調整和發展,讓整個社群試用,只有通過測試,才會將它們轉移到主回購協議中進入主倉庫。也就是說,有了一、兩個版本的實際使用,且積累了足夠的經驗之後,再考慮更新標準庫也不遲。

另外,由於泛型的相容性承諾使得任何細節出錯的成本相當高,Rob 團隊先等待、觀察和學習。

Go 創始人 Rob Pike 反對在 Go 1.18 標準庫中引入泛型支援:建議不要改動 Go 1.18 中的標準庫

因此,Rob 建議暫時不要在 Go 1.18 修改標準庫。可以繼續為切片、貼圖、通道等設計、構建、測試和使用新的庫,先在 golang.org/x 或 golang.org/exp 提供相關庫的泛型版本。

Go 創始人 Rob Pike 反對在 Go 1.18 標準庫中引入泛型支援:建議不要改動 Go 1.18 中的標準庫

最後,Rob 忠告稱:“我意識到每個人都想從新的語言功能中獲得樂趣,並期待著解決核心庫中的一些問題,這些問題一旦出現就會變得不那麼笨拙,但我堅信,現在最好放慢速度。謹慎使用、學習、學習和行動。”