当时我们还想着 Go 团队应该不会接纳,至少不会那么快: 懒得翻也可以看我再次道来,本文提到的提案《proposal: arena: new package providing memory arenas》,这其中的 Arena 将会是一个突破项。
当时我们还想着 Go 团队应该不会接纳,至少不会那么快: 懒得翻也可以看我再次道来,本文提到的提案《proposal: arena: new package providing memory arenas》,这其中的 Arena 将会是一个突破项。 快速背景Arena 指的是一种从一个连续的内存区域分配一组内存对象的方式。优点比一般的内存分配更有效率,也可以一次性释放。当然了,它的重点是要手动管理内存。 Go 团队希望加进 Go 特性中,示例代码如下:
手动调用 arena.New 方法分配 arena 内存,再调用 Free 方法进行释放。 简单来讲就是可以手动管理内存,就可以做很多事了,也 “容易” 崩。 最新进展这个提案一直在 issues 上适度的争议讨论,@Michael Knyszek 大佬代码写的很快,已经直接提交上去了...直到最近被人发现,让他更新进度。 已经明确:Go1.20 将会支持 arena 特性,通过 GOEXPERIMENT=arena 来打开,接受大家的 review 和使用,抗阻很小。 已实现 API 和原提案不同的地方有:
另外根据社区的反馈,可能还会出现配套类型的 Arena。如下函数签名:
在 Go1.20 发布该新特性的话,按照发布周期计划,是 2 月份左右发布,相信大家很快就能用上,可以多多关注。 总结一开始了解这个提案时,还想着 Go 搞了快 10 年才采纳和推进泛型。这 Arena 应该不至于这么快吧?毕竟加进去了,许多程序都可以写的复杂起来。 没想到...现实打脸来的太快,推进的很快。 就像其他小伙伴说的,这可以从代码优化性能,而不需要砍需求。也是一个有意思且不错的源动力! 据小道消息,某些同学表示在框架和其它场景测过,有说变得快了,有说没差多少。比较迷,提案内暂时未提供测试报告,不好定论。 Go 1.20 Beta 将在未来几周内(2022.11 月底前)发布,让我们拭目以待:) |
2022-04-28
2022-04-21
2022-05-13
2022-08-17
2022-02-25