Go 語言創(chuàng)始人反對(duì)在 Go 1.18 標(biāo)準(zhǔn)庫(kù)中引入泛型支持
近日,Go 語言創(chuàng)始人之一 Rob Pike 在 Github 上發(fā)表評(píng)論引發(fā)關(guān)注。據(jù)悉,他已在 Go 代碼倉(cāng)庫(kù)提交了一個(gè) issue (#48918),反對(duì)在 Go 1.18 的標(biāo)準(zhǔn)庫(kù)中引入泛型支持,建議不要改動(dòng) Go 1.18 中的標(biāo)準(zhǔn)庫(kù)。

Rob 提出以上建議主要有兩個(gè)依據(jù):
其一,是因?yàn)楦膭?dòng)范圍過大,可能會(huì)出現(xiàn)差錯(cuò)。Rob 表示,Go 語言 1.18 版本很可能包括自創(chuàng)建以來對(duì)語言的最大變化——參數(shù)多態(tài)性,俗稱泛型。
盡管語言的變化已經(jīng)以某種形式進(jìn)行了十多年,但是庫(kù)的變化是非常新的,且暫時(shí)沒有設(shè)計(jì)使用新類型的經(jīng)驗(yàn)和依據(jù)。當(dāng)然,多年來 Go 語言團(tuán)隊(duì)已經(jīng)對(duì)此做了很多工作。
關(guān)于核心庫(kù)將如何適應(yīng)等議題,目前也已經(jīng)有很多討論(例如請(qǐng)參見#45955和#48594,還有其他的,而且肯定會(huì)很快出現(xiàn)。)
其二,是缺乏實(shí)戰(zhàn)經(jīng)驗(yàn)。Rob 指出,如何在標(biāo)準(zhǔn)庫(kù)中使用這些泛型是需要深思熟慮計(jì)劃的。如果現(xiàn)在將它們放入庫(kù)中,會(huì)給發(fā)布增加了很大的負(fù)擔(dān)。
可以在生產(chǎn)中進(jìn)行測(cè)試,在一兩個(gè)周期內(nèi)進(jìn)行更改、調(diào)整和發(fā)展,讓整個(gè)社區(qū)試用,只有通過測(cè)試,才會(huì)將它們轉(zhuǎn)移到主回購(gòu)協(xié)議中進(jìn)入主倉(cāng)庫(kù)。也就是說,有了一、兩個(gè)版本的實(shí)際使用,且積累了足夠的經(jīng)驗(yàn)之后,再考慮更新標(biāo)準(zhǔn)庫(kù)也不遲。
另外,由于泛型的兼容性承諾使得任何細(xì)節(jié)出錯(cuò)的成本相當(dāng)高,Rob 團(tuán)隊(duì)先等待、觀察和學(xué)習(xí)。

因此,Rob 建議暫時(shí)不要在 Go 1.18 修改標(biāo)準(zhǔn)庫(kù)??梢岳^續(xù)為切片、貼圖、通道等設(shè)計(jì)、構(gòu)建、測(cè)試和使用新的庫(kù),先在 golang.org/x 或 golang.org/exp 提供相關(guān)庫(kù)的泛型版本。

最后,Rob 忠告稱:“我意識(shí)到每個(gè)人都想從新的語言功能中獲得樂趣,并期待著解決核心庫(kù)中的一些問題,這些問題一旦出現(xiàn)就會(huì)變得不那么笨拙,但我堅(jiān)信,現(xiàn)在最好放慢速度。謹(jǐn)慎使用、學(xué)習(xí)、學(xué)習(xí)和行動(dòng)?!?/p>
文章轉(zhuǎn)載:SegmentFault
(版權(quán)歸原作者所有,侵刪)