Russ Cox 发飙:认为 AWS 博文对 Go 存在严重误导!
共 3533字,需浏览 8分钟
·
2022-03-01 15:29
阅读本文大概需要 6 分钟。
大家好,我是 polarisxu。
2 月 23 日,Go 语言 Team Leader Russ Cox (rsc) 在 Twitter 上连发多条推文,认为 AWS 官方于前几日发布的一篇博文对 Go 存在着严重的误导。
AWS 官方于 2月 11日 发布了一篇题为《Sustainability with Rust》的文章,该博文作者为 AWS 的 Rust 倡导者兼软件工程师 Shane Miller 和 AWS 首席工程师 Carl Lerche。他们在文中对 Rust 语言在 AWS 内部发展历程以及基于 Rust 推出的一系列 AWS 产品做了回顾,并对该语言的亮点优势进行了分析和评价。(文章地址:https://aws.amazon.com/cn/blogs/opensource/sustainability-with-rust/)
这篇博文本身分析的思路并没什么问题,但作者 Shane Miller 在文中作比较时,为了突出 Rust 的高效安全,称 Go 语言“是一种垃圾回收(GC)语言,在创建和释放对象时,垃圾收集器需要停止程序的执行并运行垃圾收集”。原文如下:
Discord started as a mostly Python, Go, and Elixir shop, and they had a problem with one of their key Go services. It was a pretty simple service, but it had slow tail latencies. Because Go is a garbage collection (GC) language, as objects are created and released, every so often, the garbage collector needs to stop execution of the program and run a garbage collection pass. While the GC is running, the process is unable to respond to requests, and you can see the spikes on the CPU and response time graphs when it’s running.
听到这样的评价,作为 Go 语言开发团队的 Leader, Russ Cox 自然有些坐不住了,因此要出来对该“误导”言论进行驳斥。
在 AWS 这篇博文中,作者称 Rust 是一种能将 C 等系统编程语言的性能和资源效率与 Java 等语言的内存安全结合起来的一种语言,是一种“专为开源项目而生”的语言。并透露“ Rust 将很快成为 AWS 大规模建设基础设施发展的关键”,且 AWS 正在投资 Rust 的可持续性,或将使用这种语言来构建可持续和安全的解决方案。
文中,作者还引用了此前一项用 27 种不同的编程语言实现 10 个基准问题的研究,来验证各种语言在执行时间、能耗和峰值内存使用方面的情况。
在拿其他语言如 C 、谷歌的 Go ,以及 Lua、Python、Ruby 和老版的 Fortran 等语言来与 Rust 做对比后,最终的得出的结论是:“C 和 Rust 比其他语言的效率更高,其差异的程度令人震惊” —— 比 Java 高 50%,比 Python 高 98%。
随后,Miller 强调称“Rust 不仅关乎内存安全和减少安全缺陷 —— 它是一种比 Python 和 Java 更环保的语言”。他表示,Rust 可在不存在未定义行为的风险情况下提供 C 的能源效率,即可在不损失内存安全好处的情况下将能源消耗减半。
为了证明这一点,Miller 举了网络安全公司 Tenable 的一款应用程序的性能的例子 —— 该应用程序以前是用 JavaScript 编写的,但现在则是用 Rust 来编写,“Rust应用程序在 CPU 性能方面对 JavaScript 造成了冲击,延迟减少了一半,CPU 使用率减少了 75%,内存使用率减少了 95%”。
此外,Discord 最初也是基于 Python、谷歌的 Go 和Elixir 来构建的,不过后来都换成用 Rust 来实现。
此时, Shane Miller 突然话锋一转,拿 Go 语言“开刀”,称其为“垃圾回收(GC)语言”的那句评价,也因此引发了开篇的“误解”:
“因为Go是一种垃圾收集(GC)语言,当对象被创建和释放时,垃圾收集器经常需要停止程序的执行并运行垃圾收集过程。当 GC 运行时,进程无法响应请求,并且在运行时可以看到CPU上的峰值和响应时间图。”
对此,Go 语言开发团队 Russ Cox 批评称:“AWS 在这里的比较,是对 Go 的一种严重的误导”。
Russ Cox 认为,AWS 的文章将两者进行对比时,将 Go 版本的数据与在使用新的数据结构和更多内存后的 Rust 版本数据放在了一起,还特意圈出“ms”和“µs”时间刻度。因此,rsc 表示,这要么是 AWS 对 Discord 的原文存在误解,要么就是公然地说谎。
随后,由于外媒 ZDNet 也转发了上面 AWS 这篇《Sustainability with Rust》博文,所以这也让 Russ Cox 更有必要出面来澄清事实。
这也就回到了开篇 Russ Cox 突然在 23 日连发多篇推文来进行驳斥这件事的原因。(更完整信息见:https://twitter.com/_rsc/status/1496352325157457922)
Russ Cox 还在推文转载了一篇题为《Rust vs. Go: Why They’re Better Together》的文章称:(该文的中文翻译版:Rust vs. Go:两个团队成员都认为两者结合效果更好!)
“I wasn’t going to say anything, but since ZDNet has republished the AWS “Sustainability with Rust” blog post, a short thread about why that post is misleading (at best) about Go. ”
他表示,本来自己什么都不想说,但既然 ZDNet 已经转发了 AWS 这篇《Sustainability with Rust》的帖子,那么就有这篇(《Rust vs. Go: Why They’re Better Together》)简短的帖子来解释为什么 AWS 的文章(充其量)是对 Go 的一种误导。
他还表示,“AWS 的帖子确实对 Rust 做了一些诚实、公正的评论,这使得他们包含这些关于 Go 的误导性声明更加令人遗憾。“他们本不需要那样做,因为 Rust 足以自立。”
正如上面 Russ Cox 附上的那篇《Rust vs. Go: Why They’re Better Together》文章的观点,他强调称“就我个人而言,与其读那些假装 Go vs Rust 是某种零和游戏的博客文章,我更愿意关注 Go 和 Rust 相辅相成、可以很好地协同工作的方式。”
关于这个话题的讨论挺多的,rsc 推文下面有很多人讨论。可能又是一波语言之争~对此,你有何看法?!欢迎留言交流!
参考:https://mp.weixin.qq.com/s/EZ-56sRwqxF4uVzGjNUcrg
公众号:SegmentFault
我是 polarisxu,北大硕士毕业,曾在 360 等知名互联网公司工作,10多年技术研发与架构经验!2012 年接触 Go 语言并创建了 Go 语言中文网!著有《Go语言编程之旅》、开源图书《Go语言标准库》等。
坚持输出技术(包括 Go、Rust 等技术)、职场心得和创业感悟!欢迎关注「polarisxu」一起成长!也欢迎加我微信好友交流:gopherstudio