Go 之父 Rob 發(fā)話:Go 泛型步子不能邁太大
早上看到 Go 創(chuàng)始人之一 Rob Pike 發(fā)了一個(gè) issue:go: don't change the libraries in 1.18[1]。有人發(fā)文說了這件事。然后立馬看到有人問:Go1.18 沒有泛型了?
首先要明確,Go1.17 就包含了泛型的核心代碼,只是默認(rèn)不啟用,循序漸進(jìn)。
那 Rob 這個(gè) issue 是什么意思?不貼原文了,說一下大概意思。
Go1.18 版本,因?yàn)榉盒偷囊?,?huì)是該語言自創(chuàng)建以來變化最大的一次。語言層面支持泛型,但不少功能需要庫的支持。這有兩個(gè)層面的問題:
已有庫如何更好的支持泛型; 增加新庫讓泛型更好用;
這兩方面,之前都有相關(guān) issue 討論,比如:proposal: bytes: add Grow, Clip; maybe add bytes/strings Insert, Delete[2]、增加 slices 和 maps 包等。
這些是遲早要做的事情。不過 Rob Pike 認(rèn)為,如果這些事情都在 Go1.18 做,一下子加入太多東西,難免會(huì)有問題,甚至可能是庫的設(shè)計(jì)問題。引入新的庫,大家沒有任何使用經(jīng)驗(yàn),設(shè)計(jì)是否合理?但 Go 一直保證兼容性,如果處理不好,因?yàn)榧嫒菪?,處理起來?huì)很費(fèi)勁。
因此,Rob 建議,應(yīng)該先將新庫放入 golang/x/exp 下面(之前就存在這個(gè) exp),方便大家進(jìn)行使用、體驗(yàn)、測(cè)試,然后反饋,Go Team 可以根據(jù)大家的反饋,進(jìn)行調(diào)整。一旦經(jīng)過一段時(shí)間的檢驗(yàn),更多人認(rèn)可了,再合入主倉庫。
從該 issue 下面的評(píng)論看出,大家對(duì)這個(gè)決定還是很支持的。泛型來得晚,是因?yàn)?Go 官方很謹(jǐn)慎,一直在努力尋找更好的方案。現(xiàn)在終于要來了,也不能操之過急,最后階段得穩(wěn)住,平滑過渡。臨門一腳得踢穩(wěn)當(dāng)。
應(yīng)該基本確定,Go 1.18 發(fā)布時(shí),標(biāo)準(zhǔn)庫不會(huì)有過大的變化。

參考資料
go: don't change the libraries in 1.18: https://github.com/golang/go/issues/48918
[2]proposal: bytes: add Grow, Clip; maybe add bytes/strings Insert, Delete: https://github.com/golang/go/issues/48594
我是 polarisxu,北大碩士畢業(yè),曾在 360 等知名互聯(lián)網(wǎng)公司工作,10多年技術(shù)研發(fā)與架構(gòu)經(jīng)驗(yàn)!2012 年接觸 Go 語言并創(chuàng)建了 Go 語言中文網(wǎng)!著有《Go語言編程之旅》、開源圖書《Go語言標(biāo)準(zhǔn)庫》等。
堅(jiān)持輸出技術(shù)(包括 Go、Rust 等技術(shù))、職場(chǎng)心得和創(chuàng)業(yè)感悟!歡迎關(guān)注「polarisxu」一起成長(zhǎng)!也歡迎加我微信好友交流:gopherstudio
