再一次看到了 Go 的節(jié)制:Int128 類型要不要支持?
本文轉(zhuǎn)載自微信公眾號「polarisxu」,可以通過以下二維碼關注。轉(zhuǎn)載本文請聯(lián)系polarisxu公眾號。
大家好,我是站長 polarisxu。
如果有看我寫的 Rust 系列教程,會注意到,Rust 有一個整數(shù)類型:i128/u128,即 16 字節(jié)長的整數(shù)。而 Go 是不支持 int128/unit128 的。
當時,我也沒有多想,感覺 128 長度應該用的也少。今天,我發(fā)現(xiàn)早在 2014 年就有人提議在 Go 中增加 int128/uint128 的支持:https://github.com/golang/go/issues/9455。
為什么想要這個類型呢?
有人提出了相關的使用場景,總結下大概有如下幾個:
- UUID
- IPv6
- hashing (MD5)
- timestamps
- cryptographic nonces
- database keys
- 。。。
針對有人提出的一些需求點,minux(很早期就參與 Go 開發(fā)的,華人,go mobile 項目是他主導的)給了如下答復:
大家注意到?jīng)],被人 ??。
ianlancetaylor(泛型是他在主導設計)給出了這樣的答復:
UUID 和 IP6 的例子不夠有說服力,它們很容易用其他方式實現(xiàn)。要不要支持 int128/uint128,關鍵在于有沒有該類型相關的算術運算需求。在具體實現(xiàn)時,硬件是否很好的支持也需要考慮。
如果增加了該類型,strconv、math/big 等包為了兼容,需要增加額外的一些列函數(shù)。
他還回復了很多人的其他疑問,他一直強調(diào)幾點:
- 你為什么需要 int128/uint128?
- 是否有做運算的需要?
- 對語言可能有破壞,因此這個提案標記為 「Go2」
其中他的一句話不少人可能要吐槽:
- Go is not a language that decides what features to add based solely on demand. Of course demand plays a role, but it is not the determining factor.
Go 是否增加某個特性,需求不是決定因素!
這就是 Go 一直堅持的理念:大道至簡!節(jié)制!!!有人不喜歡,有人罵,但同樣也會有人喜歡,有人愛。對我來說,挺喜歡 Go 的簡單,Go 的節(jié)制!
最近有人在這個提案接著問:
Rust 支持了,包括 PostgreSQL 數(shù)據(jù)庫也支持,Go 還不支持嗎?該提案的作者給出了回復:
閑扯一句:不知道大家看出什么異樣了嗎?歡迎留言。
最后,int128/uint128 目測遲早應該會支持,因為 ianlancetaylor 在設計泛型時,考慮了對該類型的兼容問題。這個問題我們以后再聊。