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


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

点此查看详情。

 


相關推薦

2022-04-02

协调开源指令集架构 (ISA) 开发的 RISC-V International 正在努力制定各项标准性规范,尽可能地减少该架构的碎片化问题。 上周,该组织在其上分享了一项调查,以收集社区的反馈, “帮助识别 ISA 差距,制定未来的扩展计划,并

2022-10-15

发布公告写道,2.0 旨在适应现代化 Python 的实际使用,开发团队花费了三年多的时间来升级 SQLAlchemy 用例模型和架构。他们表示,自 2006 年 SQLAlchemy 发布第一个版本以来出现了三个主要的 Python 范式:Python 3、pep-484 类型支持和

2022-08-03

具体更新内容如下: Go 1.19 完善并改进了 Go 1.18 。开发团队将 Go 1.19 的泛型开发集中在解决社区报告的一些细微问题和极端情况,以及重要的性能改进(某些泛型程序性能改进高达 20%)。 文档注释现在支持链接、列表

2023-04-12

快 5-50 倍。 安全性和可维护性——此版本变更了架构,团队认为这将有助于他们维护 Pydantic V2,从长远来看,错误要少得多。 使用pydantic-core后,Pydantic 库中的大部分逻辑专门用于生成"pydantic core schema"——所使用的模式定义

2024-08-15

Go 编程语言开发团队今天凌晨正式发布 Go 1.23。 此版本带来了众多改进和新特性,下面简单看看主要亮点。 一. 语言特性更新 新的迭代器语法: 在"for-range"循环中,现在可以使用迭代器函数作为range表达式,如func(func(K) bool)

2022-10-11

eta 测试版。公告写道,自 3.0 发布以来,此版本已经积极开发了一年多,包含大量变化,并超过 1000 次 commit。 下载地址:https://transmissionbt.com/download Transmission 是开源的 BitTorrent 客户端,支持 macOS、Windows 和 Linux 平台。特点

2023-11-07

2023年1月启动DataEase的大规模重构工作,历经11个月的产品开发、测试和改进,DataEase v2.0版本诞生。 ▲图2 DataEase v2版本产品功能架构图 更轻量 在v1版本中,DataEase集成了Apache Doris与Kettle以满足数据的同步需求。但在这两个组

2022-11-21

nextversion/ 主要变化 优化 IDE 启动和打开项目速度 开发团队称,对于即将推出的 2022.3 版本,他们特别努力优化 IDE 的启动体验。因此,他们带来了明显的性能改进,以加快应用程序的启动和项目的打开。 通过切换到基于

2023-03-03

一变化反映了 TC39(ECMAScript/JavaScript 的标准机构)内部的讨论和共识。 另一个是新的 bundler 模块解析选项只能在 --module 选项设置为 esnext 时使用。这样做是为了确保在打包器解析之前,输入文件中写入的&

2023-11-17

一技术的成熟。此外,您还可以通过扫描下方二维码加入开发者交流社区,与广大同行进行交流学习。

2023-04-09

更好的 gRPC 代码导航,并使重命名重构可用于接收器。 开发者现在可以用非标准库包运行 Scratch 文件,使用正则表达式来创建你自己的搜索和替换检查,并快速地将原始字符串文字转换成双引号文字等。 漏洞检查器 GoLand

2023-01-10

Invalid、ErrSheetNameLength 和 ErrSheetNameSingleQuote,以便开发者可根据不同的错误类型进行采取相应处理 新增 5 项导出数据类型: HeaderFooterOptions、PageLayoutMarginsOptions、PageLayoutOptions、SheetPropsOptions 和 ViewOptions 支持

2022-03-01

全,程序将在任何不正确的行为发生之前终止。目前 Go 团队已在 Google 内部实现并使用了 arena,结果显示其为许多大型应用程序节省了高达 15% 的 CPU 和内存使用量,这主要是由于垃圾回收 CPU 时间和堆内存使用量的减少。 提

2024-06-20

个主要版本,是自上一个功能版本发布以来经过 11 个月开发的成果。该版本包含了来自 212 位贡献者提交的 1078 个 PR,引入了大量的新功能以及对 Python 和 C API 的更改。 此主要版本包括常规次要(功能)版本中不会发生的破坏