打脸了兄弟们,Go1.20 arena 来了!

大家好,我是煎鱼。

大概半年前,我写过一篇文章《Go 要违背初心吗?新提案:手动管理内存》。有兴趣了深入解的同学,可以再回顾一下。

当时我们还想着 Go 团队应该不会接纳,至少不会那么快:

a56a5c70e60658d88d8c0dc8ad8dbcaa.jpeg

没想到,计划赶不上变化。

懒得翻也可以看我再次道来,本文提到的提案《proposal: arena: new package providing memory arenas[1]》,这其中的 Arena 将会是一个突破项。

快速背景

Arena 指的是一种从一个连续的内存区域分配一组内存对象的方式。优点比一般的内存分配更有效率,也可以一次性释放。当然了,它的重点是要手动管理内存

Go 团队希望加进 Go 特性中,示例代码如下:

import (“arena”…
)type T struct {val int
}func main() {a := arena.New()var ptrT *Ta.New(&ptrT)ptrT.val = 1var sliceT []Ta.NewSlice(&sliceT, 100)sliceT[99].val = 4a.Free()
}

手动调用 arena.New 方法分配 arena 内存,再调用 Free 方法进行释放。

简单来讲就是可以手动管理内存,就可以做很多事了,因为可以乱来,所以也 “容易” 崩。

最新进展

这个提案一直在 issues 上适度的争议讨论,@Michael Knyszek 大佬代码写的很快,已经直接提交上去了...直到最近被人发现,让他更新进度。

d9f9b8814def0f202df3eded839c7fe7.png

已经明确:Go1.20 将会支持 arena 特性,通过 GOEXPERIMENT=arena 来打开,接受大家的 review 和使用,社区当前抗阻较小。

已实现 API 和原提案不同的地方有:

  • API 使用了泛型,例如:arena.New[int](myArena "int")

  • Arena 的 块大小是 8 MiB 而不是 64 MiB,似乎在更多情况下提供了更好的性能。

  • MSAN 和 ASAN 模式可用于识别不会导致崩溃的 use-after-free 错误(内存损坏应该仍然是不可能的)。需注意,这些模式对非 cgo 的 Go 程序几乎没有作用。Arena 是个例外。

另外根据社区的反馈,可能还会出现配套类型的 Arena。如下函数签名:

// MakeMap creates a new map[K]V with the provided capacity.
// The map[K]V must not be used after the arena is freed.
// Accessing the underlying storage of the map after free may result in a fault,
// but this fault is also not guaranteed.
func MakeMap[K comparable, V any](a *Arena, cap int "K comparable, V any") map[K]V { ... }

在 Go1.20 发布该新特性的话,按照发布周期计划,是 2 月份左右发布,相信大家很快就能用上,可以多多关注。

总结

一开始了解这个提案时,还想着 Go 搞了快 10 年才采纳和推进泛型。这 Arena 应该不至于这么快吧?毕竟加进去了,许多程序都可以写的复杂起来。

没想到...现实打脸来的太快,推进的很快。

就像其他小伙伴说的,这可以直接从代码侧优化性能,而不需要砍需求。也是一个有意思且不错的源动力!

据小道消息,某些同学表示在框架和其它场景测过,有说变得快了,有说没差多少。比较迷,提案内暂时未提供测试报告,不好定论。

Go 1.20 Beta 将在未来几周内(2022.11 月底前)发布,让我们拭目以待:)

推荐阅读

  • Go 只会 if err != nil?这是不对的,分享这些优雅的处理姿势给你!

  • Go 错误处理新思路?用左侧函数和表达式

  • 先睹为快,Go2 Error 的挣扎之路

参考资料

[1]

proposal: arena: new package providing memory arenas: https://github.com/golang/go/issues/51317

关注和加煎鱼微信,

获取一手业内消息和知识,拉你进交流群👇

af2b8d1f9e90400aa0d88897202c2931.jpeg

你好,我是煎鱼,出版过 Go 畅销书《Go 语言编程之旅》,再到获得 GOP(Go 领域最有观点专家)荣誉,点击蓝字查看我的出书之路

日常分享高质量文章,输出 Go 面试、工作经验、架构设计,加微信拉读者交流群,和大家交流!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/46846.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

对正在打野发育的红队同学的一次反制

文章目录 故事开始其他反制思路隐蔽C2CS重定向器实验 故事开始 真的是对同学的反制哈,我们最近都在学习内网&钓鱼就互相”攻击“,就有那么一天我就在想我偷懒把CS登录密码设置的很简单,会不会其它人也偷懒,于是就抱着尝试的心…

zsteg安装及CTF打野wp

下载文件解压后拖进kali里,移到root目录下 使用命令 zsteg 文件名 执行成功后即可获取qwxf{you_say_chick_beautiful?} 下面介绍zsteg的安装 使用命令 git clone http://www.github.com/zed-0xff/zsteg apt-get install gem gem install zsteg 若报错,…

AI版女网红“半藏森林”上线,服务项目让人意想不到

目前首批网红明星“AI克隆人”已提前上线,主营业务就是打造各种名人版AI聊天机器人,用户付费便可与之聊天。其后台报名参加AI克隆人的网红明星“全网粉丝总数已超过5亿”。该公司这波上线的网红明星AI克隆人,包括此前因“疑似插足他人恋情”&…

炉石传说 爬取全部卡牌

之前我30行爬了英雄联盟全部皮肤 这次爬炉石稍稍麻烦点,50行 网页分析 首先,我们分析炉石官方网站卡牌工具https://hs.blizzard.cn/cards/ 通过源代码和Network分析,发现返回的卡牌是用post请求的json文件 请求数据为: cardCla…

我用python玩炉石传说(3)-----炉石卡牌套牌自动构建算法

本文共三个部分: 我用python玩炉石传说(1)-----炉石卡牌相关度分析的手动打分器我用python玩炉石传说(2)-----炉石卡牌套牌爬取器及自动分析卡牌相关度我用python玩炉石传说(3)-----炉石卡牌套…

(写着玩)Python仿网络游戏《炉石传说》,继上次部分代码展示

上一期: (写着玩)Python仿网络游戏《炉石传说》,使用LOL的卡牌进行模拟对局(版本1.0)_AMarvelZ的博客-CSDN博客

手动爬取炉石传说所有卡牌

笔者还记得是从大学开始的时候玩的炉石传说,还记得当时的版本只有黑石山,纳克萨玛斯,地精大战侏儒这些卡包,转眼间到了现在,炉石传说早已和之前的那个炉石传说不再一样了,还记得以前的卡牌套路冰法&#xf…

革命炉石传说,Gods Unchained

欢迎各位新老朋友,我们细说P2E(Play to Earn),为广大用户提供一个深入了解链游的平台。不定期的跟大家分享一些精品项目和最新链游方向,也欢迎大家关注我们。 我们第七期分享的是Gods Unchained,Gods Uncha…

卷没用的,我要被 AI 大模型抢走饭碗了

SOTA AI Devs Park 是专注于生成式 AI 领域的公益开发者社区,由生成式 AI 产业加速营 SOTA AI 支持建设,正在策划举办系列 Meetup 与闭门会,聚焦于同频交流生成式 AI 的前沿趋势与一线技术实践。 前不久我们出了一篇文章《AGI 变革&#xff1…

关于《更新win11之后我的edge浏览器打不开》这件事

win11更新后打不开edge浏览器的解决方法 1.打开此电脑,打开路径C:\Program Files (x86)\Microsoft\Edge\Application下的106.0.1370.42文件夹(版本可能不同,总之找到全是数字的文件夹) 2.找到msedgewebview2.exe文件,…

Edge地址栏搜索引擎换成Bing

‘设置’找到‘隐私,搜索和服务’ 地址栏和搜索 管理搜索引擎 添加保存设为默认值即可 以%s代替查询的URL: {bing:baseURL}search?q%s&{bing:cvid}

【PTA】 统计成绩2 (10分)

给定N个学生的基本信息,包括学号(由12个数字组成的字符串)、姓名(长度小于20的不包含空白字符的非空字符串)、高等数学成绩、C语言程序设计成绩,成绩均为[0,100]区间内的整数,要求统计高等数学成…

好分数网查成绩分数查排名服务平台_好分数免费查年级排名

好分数在线查年段排名,好分数在线查班级排名,好分数免费查询同学成绩 分数API是一个公益性的在线免费查排名软件 由作者一木独立开发 如果您方便的话可以下载软件后投币来支持我们 以维持服务器的正常支出,感谢各位 所需软件下载地址☞点我下载 教程开始 1.打开…

好分数学生家长查排名成绩-在线好分数查成绩入口

好分数在线查年段排名,好分数在线查班级排名,好分数免费查询同学成绩 分数API是一个公益性的在线免费查排名软件 由作者一木独立开发 如果您方便的话可以投币来支持我们 以维持服务器的正常支出,感谢各位 所需软件链接在文末 教程开始咯 1.打开 分数API APP&…

PTA 统计学生平均成绩与及格人数

7-3 统计学生平均成绩与及格人数 分数 15 作者 C课程组 单位 浙江大学 本题要求编写程序,计算学生们的平均成绩,并统计及格(成绩不低于60分)的人数。题目保证输入与输出均在整型范围内。 输入格式: 输入在第一行中给出非负整…

AI杂谈04 与Chat AI沟通代码与绘画的提词

BING AI:“与AI交流应该像与人交流一样,尊重对方的感受和权力。” 图源:文心一言 | 提词:少女机器人 漫画风格 作为小白,在使用AI生成代码的时候,耗过不少时间,栽过不少跟头,因此总…

一建证挂出去一年多少钱?

看专业、看专业、看专业,重要的事情说三遍。 目前在社保全国联网的情况下,如果不能转社保,一般很难挂出去,之前建筑、机电三年10万的光景已经一去不复返了! 价位建筑和机电一般1年2万最多,大部分需求是半年…

计算机二级考试和一建哪个难,一建比二建难很多吗?终于明白了

原标题:一建比二建难很多吗?终于明白了 作为一个报考过一建二建考生,发自内心的说一句一建比二建要难很多,不过这也可能是因为我不聪明吧,不是那种说只要我想学,就能学会的,我在学习方面是比较适…

专插本历年真题_21年专插本历年真题试卷无偿分享

👍1.专插本真题解读考试大纲 每年专插本的题型不会有太大变动,难度上下浮动也不会有很大出入,所以专插本真题具有十分大的权威性,对于每个备考的学生来说都是非常重要的。通过专插本历年真题我们可以了解到考试的 题型命题风格、 …