您现在的位置是:首页 > 文章详情

Go 开发团队讨论创建 math/rand/v2:引入新 API、标准库首个 v2 版本包

日期:2023-06-13点击:597

Go 社区正在讨论关于开发 math/rand v2 版本的相关提案。

Go 开发团队技术 leader Russ Cox (rsc) 建议将新版本的 math/rand 添加到标准库中,然后导入为 math/rand/v2。

rsc 说到,提出该提案最直接的动机是清理 math/rand 并修复许多挥之不去的问题,特别是使用过时的生成器低效的算法以及与 crypto/rand.Read 相关的不稳定冲突

此外还可以为标准库中的其他 v2 版本包树立标杆。因为创建 math/rand/v2 能够在一个相对较少使用的包中解决工具问题(在 gopls、goimports 等中支持 v2 版本包),在转向更常用、风险更高的包之前(比如 sync/v2 或 encoding/json/v2),风险低得多。

最后看一下 math/rand/v2 API 不向后兼容的变更:

  1. 移除 Rand.Read 和 top-level Read
  2. 移除 Source.Seed, Rand.Seed, 和 top-level Seed
  3. 将 Source 接口更改为使用单一Uint64() uint64方法,以替换Int63() int64
  4. 移除 Source64,因为现在 Source 提供了Uint64方法,前者不再是必需品
  5. 在 Float32 和 Float64 中使用更直接的实现
  6. 根据 Rand.Shuffle 实现 Rand.Perm
  7. 将 Int31、Int31n、Int63、Int64n 重命名为 Int32、Int32n、Int64、Int64n
  8. 将 Uint32、Uint32n、Uint64、Uint64n、Uint、Uintn 添加为基于 Rand 的 top-level 函数和方法
  9. 在 Intn、Uintn、Int32n、Uint32n、Int64n、Uint64n 中使用 Lemire 算法
  10. 使用此 API 添加新的 Source 实现,PCG-DXSM:
     func NewPCG(seed1, seed2 uint64) *PCG type PCG struct { ... } func (p *PCG) Uint64() uint64 func (p *PCG) Seed(seed1, seed2 uint64)
  11. 移除 Mitchell & Reeds LFSR 生成器和NewSource

点此查看详情

 

原文链接:https://www.oschina.net/news/245054/go-math-rand-v2
关注公众号

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。

持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

文章评论

共有0条评论来说两句吧...

文章二维码

扫描即可查看该文章

点击排行

推荐阅读

最新文章