成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Go 泛型有沒有可能在后期改為 <> 尖括號?

開發(fā) 前端
現(xiàn)在來看 Go 已經(jīng)不太可能在后期將泛型改為 <> 尖括號了。畢竟,米已成炊。泛型也已經(jīng)有了定論好幾年了,尖括號早已被否決。

大家好,我是煎魚。

最近有一個社區(qū)朋友反饋他在某乎上看到一個提問,內(nèi)容是如標題,對于 Go 泛型的標識符 <> 不太滿意,想看看 Go 以后有沒有機會改。

問題上的原話是:

一直對 Go 語言的泛型使用 [] 中括號耿耿于懷,[] 中括號在視覺上很難有辨識度,尤其是和切片在視覺上不具有明顯區(qū)別,當泛型類型約束是切片時更是災(zāi)難,對此一直久久不能釋懷,那么 Go 官方在后續(xù)版本迭代中是否會考慮新增 <> 來表示泛型,也就是說 [] 和 <> 都能表示泛型,由開發(fā)者自己決定采用哪個。

考慮到以前的很多同學(xué)沒了解過 Go 設(shè)計的歷史,我又翻了出來。

快速溫習

針對泛型而言,我們做一個快速的溫習。泛型允許程序員在強類型語言中編寫代碼時,使用一些以后才確定的類型,其在真正實例化時才會為這些參數(shù)指確定類型。

簡單來講,泛型就是參數(shù)化多態(tài)。其可根據(jù)實參類型生成不同的版本,支持任意數(shù)量的調(diào)用:

func F(a, b T) T{ return a+b }

// T 為 int
F(1, 2)

// T 為 string
F("1", "2")

在編譯時期編譯器便確定其 T 的入?yún)㈩愋汀?/p>

為什么不使用尖括號

很多同學(xué)在討論的一個問題,那就是 “為什么 Go 泛型不像 C++ 和 Java 那樣使用尖括號?,也出現(xiàn)了 “Go 一直標榜業(yè)界工程實踐類的榜樣,為什么就是不用尖括號” 的言論?

思考問題我們不只看表面,官方說不行,那么我們可以倒推來看,看看 Go 語言就用尖括號:

func print<type T>(list []T) {

print<int>(numbers)
print<string>(strings)
print<float64>(floats)

普通的函數(shù)聲明看上去似乎結(jié)構(gòu)清晰,沒有什么大問題的。接著往下看:

a := w < x
b := y > (z)

我們繼續(xù)把代碼演進一下,簡潔一點:

a, b := w < x, y > (z)

這時候就犯難了,不僅編譯器難以解析,人也很難判別,到底指的是:

a := w < x
b := y > (z)

又或是:

a, b := w<x, y>(z)

從上述代碼來看,使用尖括號難以分別,因為沒有類型信息,就無法確定賦值的右側(cè)是一對表達式 w < x  y > (z),還是返回兩個結(jié)果值 w<x, y>(z) 的泛型函數(shù)實例化和調(diào)用,其存在歧義。

如果要解決還要引入新的約束,可能會破壞 Go1 的兼容性承諾,這顯然是違反 Go 的規(guī)范的,在這屆核心團隊中是無法推進的。

為什么不使用括號

其實最早 Go 泛型的版本是使用了括號的模式,雖然能用,但是用括號會引入新的解析歧義。例如:

var f func(x(T))

從語法上來講,你無法識別他是未命名參數(shù)的 x(T) 函數(shù),還是類型名為參數(shù)的 (T) 函數(shù)。

同時 Go 語言還存在強制類型轉(zhuǎn)換這一語法,假設(shè)代碼是 []T(v1)  []T(v2){} ,那么你在開括號處,就無法得知其是否代表類型轉(zhuǎn)換。

甚至在函數(shù)的完整聲明上,我們都會感到困惑:

func F(T any)(v T)(r1, r2 T)

函數(shù)入?yún)ⅰ⒎盒汀⒎祷刂德暶骶际抢ㄌ枺斐闪苏Z義不清,這顯然也是不合理的。

為什么不使用書名號

書名號,也就是:??。Go 核心團隊表示過,不想使用非 ASCII,未來更沒打算支持這類情況。

一些爭議

網(wǎng)上也有社區(qū)里的同學(xué)對不支持 Go 官方的尖括號 <> 的說法不是很認可。

例如,前面提到的 Go 里泛型用尖括號會沖突的這個寫法:

v1,v2 := a<b,c>d

Go 核心團隊表示說比較為難。

但網(wǎng)友 @Ninsun 同樣甩出了 C++ 泛型的用法下是 OK 的。如下圖:

圖片

因此有許多社區(qū)同學(xué)表示,Go 不想用尖括號就是懶得處理,嫌編譯器 parser 不好寫。

總結(jié)

現(xiàn)在來看 Go 已經(jīng)不太可能在后期將泛型改為 <> 尖括號了。畢竟,米已成炊。泛型也已經(jīng)有了定論好幾年了,尖括號早已被否決。

另外 Go 核心團隊顯然不希望使用尖括號寫法,這樣會造成明確語義沖突,也不希望花費大量功夫去重新調(diào)整編譯器。

還剩唯一一種可能性,那就是 Go 核心團隊大換血...(難)

責任編輯:武曉燕 來源: 腦子進煎魚了
相關(guān)推薦

2024-10-23 08:27:36

2020-10-13 10:16:09

網(wǎng)絡(luò)技術(shù)數(shù)據(jù)

2018-12-04 14:46:03

蘋果Face IDTouch ID

2021-09-29 18:17:30

Go泛型語言

2022-03-01 11:00:12

索引MySQL設(shè)計

2021-07-08 10:09:22

微軟Cloud PC云電腦

2019-04-04 13:43:37

區(qū)塊鏈區(qū)塊鏈技術(shù)信用卡

2012-09-27 11:48:20

ARM64位測試服務(wù)器

2020-08-31 11:10:57

編程語言PythonJava

2011-06-21 09:54:08

鮑爾默Windows 8微軟

2021-12-31 11:35:40

藍牙漏洞玩具Fisher-Pric

2012-05-15 09:43:08

蘋果iCloud云計算

2024-10-28 00:40:49

Go語法版本

2009-11-09 09:17:47

Windows 7GPL

2018-03-14 09:27:06

區(qū)塊鏈

2022-12-09 14:32:33

5GSA

2023-03-15 11:46:52

數(shù)字孿生傳感器

2019-02-12 15:47:42

Bash尖括號命令

2020-12-31 10:38:59

ARVR移動開發(fā)

2021-02-26 08:00:00

數(shù)據(jù)中心IT運營商
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 国产一区二区在线播放 | 成人亚洲网| 综合色播 | 91欧美激情一区二区三区成人 | 波多野吉衣久久 | 亚洲精品一区二区三区蜜桃久 | 天天射天天干 | 色播久久 | 日本亚洲精品成人欧美一区 | 日韩成人在线免费视频 | 日韩成人在线看 | 午夜在线观看免费 | 拍真实国产伦偷精品 | 成人在线免费观看视频 | 看片91| 亚洲激情综合网 | 久久精品免费一区二区三 | 在线免费观看黄a | 国产国拍亚洲精品av | 最新国产精品 | 欧美一二三区 | 午夜欧美| 精品久久av| 亚洲欧洲综合av | 日韩久久久久久久久久久 | 影音先锋中文字幕在线观看 | 亚洲一区二区三区福利 | 国产一区二区三区久久久久久久久 | 久久人人国产 | 日本小电影网站 | 色综合色综合网色综合 | 欧美三区在线观看 | 日本韩国电影免费观看 | 欧美精品一区二区三区蜜桃视频 | 成人精品福利 | 中文字幕在线一区 | 丝袜美腿av | www.蜜桃av| 国产精品一区久久久 | 久久精品中文 | 欧美一区二区大片 |