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

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

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

大家好,我是煎魚。

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

問題上的原話是:

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

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

快速溫習

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

簡單來講,泛型就是參數化多態。其可根據實參類型生成不同的版本,支持任意數量的調用:

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

// T 為 int
F(1, 2)

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

在編譯時期編譯器便確定其 T 的入參類型。

為什么不使用尖括號

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

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

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

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

普通的函數聲明看上去似乎結構清晰,沒有什么大問題的。接著往下看:

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

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

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

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

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

又或是:

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

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

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

為什么不使用括號

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

var f func(x(T))

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

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

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

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

函數入參、泛型、返回值聲明均都是括號,造成了語義不清,這顯然也是不合理的。

為什么不使用書名號

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

一些爭議

網上也有社區里的同學對不支持 Go 官方的尖括號 <> 的說法不是很認可。

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

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

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

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

圖片

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

總結

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

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

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

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

2024-10-23 08:27:36

2022-03-01 11:00:12

索引MySQL設計

2020-10-13 10:16:09

網絡技術數據

2018-12-04 14:46:03

蘋果Face IDTouch ID

2021-07-08 10:09:22

微軟Cloud PC云電腦

2021-09-29 18:17:30

Go泛型語言

2019-04-04 13:43:37

區塊鏈區塊鏈技術信用卡

2012-09-27 11:48:20

ARM64位測試服務器

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云計算

2009-11-09 09:17:47

Windows 7GPL

2018-03-14 09:27:06

區塊鏈

2023-03-15 11:46:52

數字孿生傳感器

2022-12-09 14:32:33

5GSA

2020-12-31 10:38:59

ARVR移動開發

2021-02-26 08:00:00

數據中心IT運營商

2022-01-23 16:29:52

比特幣加密貨幣貨幣

2024-10-28 00:40:49

Go語法版本
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 2018国产精品 | 特黄小视频 | 久久九九色 | 超碰在线免费公开 | 成人免费在线观看视频 | 99久久婷婷国产综合精品电影 | 91免费福利视频 | 精品乱码久久久久 | 中文字幕乱码一区二区三区 | 中文字幕精 | 国产成人自拍av | 激情免费视频 | 日韩成人在线观看 | 天天操天天射综合网 | 色播99| 亚洲一区视频在线 | 中文字幕国产一区 | 中文字幕日韩一区二区 | 黄a免费网络 | 天天色天天色 | 91精品久久久久久久 | 四虎影| 国产精品不卡 | 日韩www| 99久久婷婷 | 97国产精品 | 在线一区观看 | 亚洲精品久久久9婷婷中文字幕 | 国产传媒毛片精品视频第一次 | 欧美白人做受xxxx视频 | 黄色高清视频 | 国产91一区 | 精品一区二区三区91 | 国产高清视频在线播放 | 欧美黄色免费网站 | 久久久久国 | 国产精品网页 | 欧美一区二区三区视频 | 男人的天堂在线视频 | 天天爽天天操 | 91.com在线观看 |