Go 开发团队 leader 批评 AWS 文章对 Go 存在严重误导


事件起因是 AWS 前几天发布的一篇博客:《Sustainability with Rust》。

在这篇文章里,AWS 举例的时候将 Rust 和 Go 进行了对比。文章提到了早期 Discord 的一项关键 Go 服务存在问题,原本这是一个非常简单的服务,但它的尾部延迟 (Tail Latency) 非常慢。AWS 认为原因在于 Go 是一种垃圾回收 (GC) 语言,因此当对象被创建和释放时,垃圾回收器每隔一段时间就需要停止程序的执行并运行一次垃圾回收。当垃圾回收器运行时,会导致进程无法响应请求。

为了解决此问题,Discord 决定尝试用 Rust 重写这个服务。测试结果显示,使用 Rust 重写后的速度提升超 10 倍,最慢的尾部延迟时间也降低至为原来的约 1%。

下图是运行过程中 CPU 和响应时间的峰值,左边为 Go 实现的版本,右边为 Rust 实现的版本。

Go 开发团队 leader Russ Cox (rsc) 认为 AWS 在这里的比较对 Go 存在严重的误导。他认为,AWS 的文章将两者进行对比时,将 Go 版本的数据与在使用新的数据结构和更多内存后的 Rust 版本数据放在了一起,还特意圈出“ms”和“µs”时间刻度。rsc 表示,这要么是 AWS 对 Discord 的原贴存在误解,要么就是公然地说谎。

因为在 Discord 的原文中,他们展示 Go 服务器和同级别 Rust 服务器的对比时,图表数据来源既有原始的版本,也包括重写数据结构和提供额外内存后的情况。AWS 的文章却对此进行了故意的歪曲。

而且 AWS 引用的 Discord 数据当时使用的 Go 版本还是 Go 1.10,但现在 1.18 版本很快就推出了。在这 8 个重要版本的迭代过程中,Go 团队改进了许多功能,对因 GC 而引起的中断也提供了极大的改善(这正是当时 Discord 面临的问题)。

除了这个,rsc 认为 AWS 引用的一份“非常有趣”的研究的真实性也十分可疑。

rsc 表示,AWS 的文章对 Rust 的描述公正客观,但对 Go 却存在误导性的描述。他认为 Rust 和 Go 不是零和的博弈关系。Rust 十分优秀,所以他更愿意关注 Go 和 Rust 相互补充并进行良好合作的方式。比如这个案例:https://thenewstack.io/rust-vs-go-why-theyre-better-together/


相關推薦

2022-11-02

可用于设置变量 "A=B" 和 "C=D"。 详情查看 Release Note。 Go 开发团队 leader Russ Cox 表示,这次的安全修复与 OpenSSL CRITICAL 安全补丁版本无关。因为 Go 团队并不对发布的安全补丁的严重性进行分类,毕竟严重性在本质上是与用户所处

2022-11-12

Go 语言开发团队技术 leader Russ Cox 在博客中庆祝 Go 开源 13 周年。2009 年 11 月 10 日,Go 作为开源项目正式宣布推出,目前已开源 13 周年。   对于 Go 来说,2022 是非常重要的一年,这一年  Go 发布了 Go 1.18 和 G

2023-08-16

会破坏与现有 Go 1.x 程序兼容性的 "Go 2"。 昨天,Go 开发团队技术 leader Russ Cox (rsc) 发表博客详细介绍了针对 Go 向后兼容性的改进,并回答了上面的问题。 rsc 回应称,答案是永远不会。如果所谓“破坏”是指不与旧版

2023-02-26

。 Google 在去年为 Play Store 推出了「数据安全」标签,开发者可以通过填写 Google Data Safety Form,为其应用程序收集的信息提供 "完整和准确的声明"。Mozilla 的调查显示,这些由开发者自己提交的隐私标签大部分都无法准确反映

2023-09-22

数据技术都能四世同堂,凭什么开发 30 岁就要被干掉? 上月正式发布的 Go 1.21 修改了 for 循环变量的语义(预览阶段,点此查看详情)。 现在,Go 团队表示 Go 1.22 会将这项特性发布为正式功能。 根据 Go 开发团队技术 l

2023-05-06

,Mojo 不仅兼容 Python,还比它快 35000 倍。详情查看:AI 开发有了新编程语言, 比 Python 快 35000 倍。 为了体现 Mojo 的“快”,其开发团队埋了一个小彩蛋——支持将 🔥 用作 mojo 的文件扩展名。你没看错,就是一把火。

2022-09-13

Go 博客发布了 2022 年第二季度 Go 开发者调查报告。据介绍,总共有 5752 名开发者参与了本次调查,分享了他们使用 Go 1.18 中新特性的经验和心得。 主要发现 泛型已被迅速采用。大多数受访者都知道 Go 1.18 已正式支持泛型

2023-06-14

Go 社区正在讨论关于开发 math/rand v2 版本的相关提案。 Go 开发团队技术 leader Russ Cox (rsc) 建议将新版本的 math/rand 添加到标准库中,然后导入为 math/rand/v2。 rsc 说到,提出该提案最直接的动机是清理 math/rand 并修复许多挥之不

2024-07-11

Go (Golang) 是 Google 开发的一种编译型、并发型,并具有垃圾回收功能的编程语言,于 2009 年 11 月正式宣布推出成为开源项目,2012 年发布 1.0 版本。 如今,谷歌仍在继续投资该语言,最新的稳定版本是 1.22.5。在最新的 TIOBE 7 月

2022-12-03

在 2022 re:Invent 会议上, AWS 软件开发经理 Saikat Banerjee 锐评道:”我们发现 .NET 开源项目资金严重不足,仍可称之为第三方开源”。随即表示 AWS 过去非常重视 .net 生态,未来也将继续大力支持 .NET 的开源发展。 .NET 开源资金不

2022-03-24

求已经达到了 2020 年的两倍以上。 该报告基于对公司与开发人员在其就业市场上的 366,000 多次互动数据的分析,以及 2020 年 1 月至 2021 年 12 月期间收集的 2000 份调查回复。旨在为工程师提供洞察力和资源,以促进他们的职业发

2023-01-17

功能都采用 Java 实现,而且它拥有相当庞大的 Java 工程师团队——一切都是为了性能,其中负责优化 GC 性能的工程师组成了他们最大的团队。 Gosling 在欣赏 Clojure 对函数式编程的高度重视时,也分享了他自己的一个怪癖。Gosling

2024-10-14

:a web browser 来阅读这篇文章的。” Electron 最初由 GitHub 开发,依赖于几个关键的 web-browser 项目:Chromium(Google Chrome 和 Microsoft Edge 的基础)以及 Node.js(和 Google V8)JavaScript 运行时。Electron 项目将相当于 Chromium 驱动的 Web 浏览

2024-08-08

到也要为下一代考虑下 :)),那时候他和 Rob Pike 一起开发贝尔实验室的分布式操作系统 Plan 9 (上世纪 80 年代末由贝尔实验室的 Ken Thompson 和 Rob Pike 等人发起并领导的项目),后来他去 MIT 攻读博士学位期间顺便去了 Google 实习