Go 核心团队 Russ Cox "驳斥"AWS 博文作者 :对 Go 存在严重误导!

简介: Go 核心团队 Russ Cox "驳斥"AWS 博文作者 :对 Go 存在严重误导!

2 月 23 日,Go 语言核心开发团队 Russ Cox (rsc) 在社交媒体上连发多条推文,“斥责” AWS 官方于前几日发布的一篇博文对 Go 存在着严重的误导。

image.png

据悉,AWS 官方博客于 2月 11日 发布了一篇题为《Sustainability with Rust》的文章,该博文作者为 AWS 的 Rust 倡导者兼软件工程师 Shane Miller 和 AWS 首席工程师 Carl Lerche。他们在文中对 Rust 语言在 AWS 内部发展历程以及基于 Rust 推出的一系列 AWS 产品做了回顾,并对该语言的亮点优势进行了分析和评价。

image.png

这篇博文本身分析的思路并没什么问题,但作者 Shane Miller 在文中作比较时,为了突出 Rust 的高效安全,称 Go 语言“是一种垃圾回收(GC)语言,在创建和释放对象时,垃圾收集器需要停止程序的执行并运行垃圾收集过程。”。

听到这样的评价,作为 Go 语言开发团队的 Leader, Russ Cox 自然有些坐不住了,因此要出来对该“误导”言论进行驳斥。

在 AWS 这篇博文中,作者称 Rust 是一种能将 C 等系统编程语言的性能和资源效率与 Java 等语言的内存安全结合起来的一种语言,是一种“专为开源项目而生”的语言。并透露“ Rust 将很快成为 AWS 大规模建设基础设施发展的关键”,且 AWS 正在投资 Rust 的可持续性,或将使用这种语言来构建可持续和安全的解决方案。

image.png

文中,作者还引用了此前一项用 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 来实现。

image.png

此时, 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 日连发多篇推文来进行驳斥这件事的原因。

image.png

23 日,Russ Cox 发推文转载了一篇题为《Rust vs. Go: Why They’re Better Together》的文章称:

“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 足以自立。”

image.png

正如上面 Russ Cox 附上的那篇《Rust vs. Go: Why They’re Better Together》文章的观点,他强调称“就我个人而言,与其读那些假装 Go vs Rust 是某种零和游戏的博客文章,我更愿意关注 Go 和 Rust 相辅相成、可以很好地协同工作的方式。

目前,外网关于该话题的讨论也在持续上升,不少网友及开发者都已经涌入了 Russ Cox 的推文评论区留言。关于该话题的后续发展,本站也将持续关注,如果您对该话题有任何看法,也欢迎在评论区留言互动。

go

相关文章
|
XML Java 5G
Go 开发团队技术 leader Russ Cox 发文分享 Go 的版本控制历史
Go 开发团队技术 leader Russ Cox 发文分享 Go 的版本控制历史
109 0
|
XML Java 5G
Go 开发团队技术 leader Russ Cox 发文分享 Go 的版本控制历史
Go 开发团队技术 leader Russ Cox 发文分享 Go 的版本控制历史
101 0
|
JavaScript 前端开发 Go
终于!Go 1.18 将支持泛型,来听听Go 核心技术团队 Russ Cox怎么说
终于!Go 1.18 将支持泛型,来听听Go 核心技术团队 Russ Cox怎么说
122 0
终于!Go 1.18 将支持泛型,来听听Go 核心技术团队 Russ Cox怎么说
|
供应链 安全 IDE
Go 开源 12 周年:新域名 go.dev 启用|Russ Cox 发文庆贺
Go 开源 12 周年:新域名 go.dev 启用|Russ Cox 发文庆贺
120 0
Go 开源 12 周年:新域名 go.dev 启用|Russ Cox 发文庆贺
|
2天前
|
人工智能 Go 调度
掌握Go并发:Go语言并发编程深度解析
掌握Go并发:Go语言并发编程深度解析
|
18天前
|
Go
go语言中的数据类型
go语言中的数据类型
13 0
|
6天前
|
数据采集 存储 Go
使用Go语言和chromedp库下载Instagram图片:简易指南
Go语言爬虫示例使用chromedp库下载Instagram图片,关键步骤包括设置代理IP、创建带代理的浏览器上下文及执行任务,如导航至用户页面、截图并存储图片。代码中新增`analyzeAndStoreImage`函数对图片进行分析和分类后存储。注意Instagram的反爬策略可能需要代码适时调整。
使用Go语言和chromedp库下载Instagram图片:简易指南
|
24天前
|
存储 安全 Go
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
掌握Go语言:Go语言类型转换,无缝处理数据类型、接口和自定义类型的转换细节解析(29)
|
1天前
|
Go 开发者
Golang深入浅出之-Go语言上下文(context)包:处理取消与超时
【4月更文挑战第23天】Go语言的`context`包提供`Context`接口用于处理任务取消、超时和截止日期。通过传递`Context`对象,开发者能轻松实现复杂控制流。本文解析`context`包特性,讨论常见问题和解决方案,并给出代码示例。关键点包括:1) 确保将`Context`传递给所有相关任务;2) 根据需求选择适当的`Context`创建函数;3) 定期检查`Done()`通道以响应取消请求。正确使用`context`包能提升Go程序的控制流管理效率。
7 1
|
2天前
|
安全 Go 开发者
Golang深入浅出之-Go语言并发编程面试:Goroutine简介与创建
【4月更文挑战第22天】Go语言的Goroutine是其并发模型的核心,是一种轻量级线程,能低成本创建和销毁,支持并发和并行执行。创建Goroutine使用`go`关键字,如`go sayHello("Alice")`。常见问题包括忘记使用`go`关键字、不正确处理通道同步和关闭、以及Goroutine泄漏。解决方法包括确保使用`go`启动函数、在发送完数据后关闭通道、设置Goroutine退出条件。理解并掌握这些能帮助开发者编写高效、安全的并发程序。
13 1