当前位置: 首页 > 科技观察

又一次看到了Go的克制:Int128类型该不该支持?

时间:2023-03-14 11:41:39 科技观察

本文转载自微信公众号「polarisxu」,可通过以下二维码关注。转载本文请联系polarisxu公众号。大家好,我是站长polarisxu。如果你看过我写的Rust系列教程,你会注意到Rust有一个整数类型:i128/u128,它是一个16字节长的整数。而且Go不支持int128/unit128。当时也没多想,觉得128这个长度还是少用点吧。今天在2014年的Go中发现了一个增加int128/uint128支持的提案:https://github.com/golang/go/issues/9455。你为什么要这种类型?有人提出了相关的使用场景,可以归纳如下:UUIDIPv6hashing(MD5)timestampscryptographicnoncesdatabasekeys。..针对一些人提出的一些需求点,minux(一位很早就参与了Go开发的华人,领导了gomobile项目)给出了如下回答:Didyounoticethatis??。ianlancetaylor(负责泛型设计的人)给出了这样的回答:UUID和IP6的例子不够有说服力,它们很容易通过其他方式实现。是否支持int128/uint128取决于是否有与该类型相关的算术运算需求。在具体实现中,还需要考虑硬件是否支持良好。如果加入这个类型,strconv、math/big等包需要增加一些额外的函数来兼容。他还回答了很多人的其他问题。他一直强调几点:为什么需要int128/uint128?有些人可能会抱怨:Go并不是一种完全根据需求来决定添加哪些功能的语言。需求当然有影响,但不是决定因素。Go是否增加某个特性,需求不是决定因素!这就是Go一直坚持的理念:路就这么简单!节制!!!有人不喜欢,有人骂,但也有人喜欢,有人喜欢。对我来说,我真的很喜欢Go的简单和Go的克制!最近有人在这个提案中提问:Rust支持,包括PostgreSQL数据库。Go还不支持吗?提案作者给出了回复:就一句话:不知道大家有没有看出什么奇怪的地方?欢迎留言。最后,int128/uint128迟早要支持,因为ianlancetaylor在设计泛型的时候就考虑了这个类型的兼容性。我们稍后会讨论这个问题。