写点什么

亚马逊发文力捧 Rust ,Go 技术负责人:别“拉踩”我们

  • 2022-03-02
  • 本文字数:3742 字

    阅读完需:约 12 分钟

亚马逊发文力捧Rust ,Go 技术负责人:别“拉踩”我们

近日,亚马逊官方博客上发布 “Sustainability with Rust” 一文,通过研究和对比来说明了 Rust 在可持续性方面优于其他语言。随后,ZDNet 也对此文进行了报道。在 ZDNet 的报道发出之后,Go 技术负责人 Russ Cox 连发 14 条推特,表示该文章在严重误导大家对 Go 语言的认知。

 

这件事引起了大家的关注,同时也引发了“Rust 还是 Go”的大讨论。那么,究竟发生了什么?

 

一篇文章引发的“对线”

 

在亚马逊,Rust 已经成为大规模构建基础设施的关键。2019 年,亚马逊成为 Rust 项目的赞助商。2020 年开始招聘 Rust 维护者和贡献者,并与谷歌、华为、微软和 Mozilla 联合成立了 Rust 基金会。

 

争议 1:几年前的研究有偏差

 

在发表的“Sustainability with Rust”文章中,为验证 Rust 是一种节能的编程语言,使用了 2017 年的一项研究数据进行证明。这项研究主要是对 27 种编程语⾔进行 10 个基准问题测试,并测量执行时间、能耗和峰值内存使用情况。以下为文章中引起争议的第一个部分:

 

几年前有一项非常有趣的研究,主要探索能源消耗、性能和内存使用之间的关系。这是关于可持续发展的常见话题。我们对服务的能源或碳使用的了解很少,是否有代理指标?是否可以查看现有基础设施成本、性能、内存等服务仪表板,并通过观察到的趋势来推测服务的能源消耗趋势?

 

该研究在 27 种不同的编程语言中进行了 10 个基准测试,并测量了执行时间、能耗和峰值内存使用的情况。C 和 Rust 在能效方面明显优于其他语言。事实上,它们的效率大约比 Java 高 50%,比 Python 高 98%。 

 

C 和 Rust 比其他语言更高效就不足为奇了,但令人惊讶的是差异的幅度。保守估计,广泛采用 C 和 Rust 可以将计算能耗降低 50%。

 

那为什么大家不更多地使用 C?它的语言和开发工具都非常成熟,社区规模也比 Rust 大得多。在 2021 年的开源峰会上,Linux 创造者 Linus Torvalds 坦言,用 C 语言实现代码就像玩电锯。作为一名终身写 C 的程序员,Torvalds 知道,“(C 的微妙类型交互)并不总是合乎逻辑,对几乎所有人来说都是陷阱。”

 

Torvalds 称,Rust 是他见过的第一种可能解决问题的语言。Rust 提供了和 C 一样的能效,同时还没有未定义行为的风险。我们可以将能源消耗减半,同时不失去存储安全的好处。

 

多项分析结果显示,在 C/ C++中发生的高严重性 CVE 中,超过 70% 可以通过在 Rust 中实施相同的解决方案来预防。事实上,支持 Let's Encrypt 项目的非营利组织Internet Security Research Group (ISRG)(一个 2.6 亿个网站的证书颁发机构),目标是将所有互联网安全敏感的基础设施都迁移到内存安全的语言上,目前进行的项目包括在 Linux 内核中支持 Rust ,以及将 curl 迁移到 TLS 和 HTTP 的 Rust 实现。

 

我们再看看其他的研究结果。上图中间一列显示了执行时间的测试结果,Rust 和 C 的执行时间非常相似,这两种语言的执行速度都比其他语言要快。这意味着,选择 Rust 可以在获得可持续性和安全性优势的同时,还将拥有 C 的优化性能。

 

 

那么,文章里的这段论述出现了什么问题呢?Cox 指出,“几年前的有趣研究”是明显存在的问题。该研究于 2017 年 10 月在 Intel i5-4460 CPU(2014 年第二季度)上使用 Go 1.6(2016 年 2 月)进行。“那已经是永远的过去式了。”最重要的是,这个“真正有趣的研究”假设计算机语言基准游戏是个可比较的程序来源,但了解这个网站的话就知道这完全不正确。

 

Cox 表示,最明显的是,如果研究声称 C++ 的能源消耗比 C 使用多 34% 、执行时间快 56% 和内存多 14% ,那就需要重新检查这个研究的前提假设了。“几乎每个 C 程序都是有效的 C++ 程序,所以 C++ 不会输,尤其是没那么糟糕!”

 

“所以,这个‘真正有趣的研究’并不是真正的有趣。事实上,我们应该以辩证的怀疑态度来看待。”Cox 写道。

 

争议 2:不公平的对比

 

亚马逊工程师在文章中还以聊天软件 Discord 为例,讲述从 Go 切换到 Rust 的过程。Cox 认为,其引用的 Discord 内容里,关于从 Go 切换到 Rust 的部分存在令人难以置信的误导。以下为文章中引起争议的第二个部分:

 

Discord 最初以 Python、Go 和 Elixir 为主,但他们的一项关键 Go 服务存在问题。这是一个非常简单的服务,但还是导致其尾部延迟严重。这是因为 Go 是一种垃圾回收 (GC) 语言,所以在创建和释放对象时,垃圾回收器每隔一段时间就得停止程序的执行并运行一次垃圾回收。当 GC 运行时,进程无法响应请求,您可以看到 CPU 峰值和响应时间变化。

 

左:Go,右:Rust

 

为解决该问题,Discord 决定尝试用 Rust 重写服务,上图显示的就是使用结果。虽然 GC 峰值模式在 Rust 中消失了,但真正惊人的差异在于变化的幅度。注意, Go 和 Rust 的计量单位是不同的。

 

Rust 版本速度总体上快了 10 倍以上,甚至最差的尾部延迟减少了 100 倍。这些都是令人难以置信的改进,同时由于服务器响应效率变高,需要的服务器变少,这意味着使用的能源也更少。虽然 Discord 还没有决定开始用 Rust 来减少能源消耗,但这就是影响。

 

另外,Rust 并不是第一种高效的语言。C 已经存在了很长时间,但 Rust 是第一个在不牺牲安全性的情况下保证高效率的主流编程语言。用 C 和 C++ 编写的所有高危安全漏洞中,70% 是内存不安全造成的。Rust 提供了效率,但不会让人觉得自己在玩火。

 

 

对此,Cox 指出, Discord 的原帖中展示了一张 Go 服务器和等效 Rust 服务器的图表。Rust 具有更可预测的性能,并避免了像 Go 中的延迟峰值,但它们的性能大致相当。

Discord 原帖中的对比图,紫色线代表 Go,蓝色线代表 Rust

 

相反,在亚马逊的帖子里,在 Rust 和 Go 图表标出了“ms”与“µs”的时间刻度对比。但该对比的前提是,Rust 服务器进行了重大重写,并使用了新的数据结构和更多内存。

 

“这要么是完全没有理解 Discord 的帖子,要么就是公然说谎。”Cox 认为,这种对比方法在诚实、公平的情况下是很好的表达方式,“但 AWS 的帖子并非如此。”

 

不过,Cox 指出 Discord 的帖子是公平的。“它将 Go 服务器和 Rust 服务器进行了对比,并在文章后面单独绘制了 Rust 服务器在使用重写的数据结构和额外内存后的变化图,而 AWS 的帖子曲解了这一点。”

 

同时,Discord 的帖子也提到了 Go 1.10,而 Go 1.18 也将很快发布。这期间的 8 个版本有很多改进,减少了程序中有非常大的堆或非常多协议的 GC 暂停(Discord 服务器两者都有)。因此,使用最近的 Go 版本将显着减少 Discord 延迟峰值。“但 Rust 仍然是适合该服务器的优秀语言,团队作出了合理的决定。”

 

Cox 没有完全否认帖子里关于 Rust 的观点,但在 Cox 看来,亚马逊完全没必要加上关于 Go 的误导性陈述,“这看起来很丢人,Rust 足以独立存在。”

 

Go、Rust 之争

 

两种语言起源于同一时期。Go 于 2007 年构思并在 2009 年 11 月公开,Rust 出现在几个月后的 2010 年,尽管 Graydon 暗示 Rust 的构思可能要早得多

 

Go 和 Rust 还有很多共同点。两者都是现代软件语言,旨在为影响软件开发的问题提供安全且可扩展的解决方案。两者还都是针对当时现有语言遇到的问题而创建,特别是开发人员在生产力、可扩展性、安全性和并发性方面遇到的问题。因此,两者常被认为是竞争关系。

 

但两者也有很多差异。谷歌 Go 编程语言的产品和战略负责人 Steve Francia 认为,Go 和 Rust 在性能并发、可扩展性、开源意识等方面有着相似之处,但两者有不同的权衡。Francia 在发布到thenewstack的文章里,详细比较了 Go 和 Rust 的差异。

 

在性能方面,Go 具有开箱即用的出色性能。按照设计,Go 中没有可以榨取更多性能的按钮或操纵杆。Rust 旨在让开发者能够从代码中榨取出每个性能,因此 Rust 有着更快的速度,代价是增加了复杂性。

 

在适应性方面,Go 快速迭代的优势使开发人员能够快速尝试想法,并在解决手头任务的工作代码上进行磨练。这通常就已经足够了,开发人员可以腾出时间做其他任务。另一方面,与 Go 相比,Rust 的编译时间更长,导致迭代时间更慢。这使得在更短周转期内,Go 允许开发人员能在不断变化的需求场景中工作得更好,Rust 则可以在拥有更多时间进行更精细、更高效开发的实现场景中发挥出色。

 

在易学性方面, Go 是更平易近人的语言,很多团队甚至能够在几周内使用 Go 并将 Go 服务/应用程序投入生产。而由于其复杂性,Rust 被认为是一种难以学习的语言,但这也为 Rust 带来了更高的性能。

 

在精确控制方面,Rust 拥有很大的优势。Rust 可以使开发人员在如何管理内存、如何使用机器的可用资源、如何优化代码以及如何制定解决方案等问题上,有更精准地控制。

 

因此,Francia 给出的建议是,Go 是大多数公司和开发者的正确默认选项,因为 Go 性能强大、易于采用,高度模块化特性使其特别适用于需求不断变化的情况。随着产品成熟和需求趋于稳定,企业可能有机会从边际性能的提升中获得巨大的收益。这些情况下,采用 Rust 来使性能最大化可能会是不错的选择。

 

结束语

 

“在我看来,与其阅读那些将 Go 与 Rust 视为零和游戏的文章,我更愿意关注那些将 Go 和 Rust 视为相互补充、能很好协同工作的文章。”Cox 在最后说道。

 

编程语言之争从来没有停过,每种语言都有大批的拥护者,甚至存在“鄙视链”的说法,每年的编程语言榜单也是大家竞相关注的热点。但编程语言之间并非水火不容,开发者需要学会选择适合自己的语言。


2022-03-02 14:3114032

评论 1 条评论

发布
用户头像
Google的产品都还不错,关闭时也毫不手软
2022-03-02 15:23
回复
没有更多了
发现更多内容

致 Tapdata 全体用户:2023 年,我们把更多精力集中到了产品能力和稳定性上

tapdata

数据库

活动回顾 | DevData Talks沙龙深圳站:中小到千人规模团队研发效能提升实践

思码逸研发效能

策略分析:Atlassian Server版停止支持,Server版用户应该转向数据中心版本还是云版?

龙智—DevSecOps解决方案

以解析csv数据为例,讨论string、char[]、stream 不同类型来源是否能进行高性能读取解析封装可能性

八苦-瞿昙

C#

SNZ资本的首席信息官Gavin确认出席Hack .Summit() 2024香港开发者大会!

TechubNews

教你如何用Keepalived和HAproxy配置高可用 Kubernetes 集群

华为云开发者联盟

开发 华为云 华为云开发者联盟

密码学在 Web3 钱包中的应用:私钥是什么?bitget钱包为例

威廉META

通过解析库探究函数式抽象代价

八苦-瞿昙

C#

即时通讯技术文集(第34期):IM群聊技术合集(Part1) [共15篇]

JackJiang

网络编程 即时通讯 IM

破防了,谁懂啊家人们:记一次mysql问题排查

阿里技术

MySQL 索引 问题排查 表结构

聊聊Java 类属性与类方法的应用

伤感汤姆布利柏

Java 前端

开班在即 | 测试开发名企定向培养训练营,手把手带你提升核心竞争力!

测吧(北京)科技有限公司

测试

蒋安祥:巴拿马奖项评选指南与规程赢得企业界广泛认可

Geek_2d6073

KaiwuDB 拿下 “物联之星” 双项殊荣

KaiwuDB

数据库 物联网

Udemy 上最受欢迎的免费编程课程

秃头小帅oi

php 学习 React 课程 java

追踪Jira中项目成本与工时,更符合国人使用习惯——TimeWise工时管理

龙智—DevSecOps解决方案

DevOps DevSecOps Atlassian

鸿蒙移动开发加速器何处寻?

Geek_2305a8

EMQX Enterprise 5.5 发布:新增 Elasticsearch 数据集成

EMQ映云科技

mqtt mqtt broker

作为程序员,沟通能力是否重要?

小齐写代码

云桌面哪家好用?

青椒云云电脑

云桌面 云桌面厂家 云桌面解决方案

通过解析库探究函数式抽象代价 ( ini 解析示例补充)

八苦-瞿昙

C#

手机厂商的开年大考:卷AI,还是卷MR?

Alter

MR 大模型 AI手机

区块链游戏解说:什么是 Arcade Champion

Footprint Analytics

蜗牛游戏宣布利用AI技术提升其开发流程

财见

亚马逊云科技为派拓网络打造数字安全平台产品组合

财见

PTS 3.0:开启智能化的压测瓶颈分析

阿里巴巴云原生

阿里云 云原生 压测

前端:Vue2.0和Vue3.0的一些入门对比

秃头小帅oi

前端 低代码 js Vue 3 vue2

Supermicro 通过新基础设施解决方案,加速 5G 和电信云工作负载性能

财见

超越传统:人工智能赋能的自动化测试新前景

测吧(北京)科技有限公司

测试

客户案例 | 思码逸DevInsight帮助企业提炼关键指标,建立研发效能体系

思码逸研发效能

喜讯 | 思码逸Devinsight 入选中国信通院《高质量数字化转型产品及服务全景图》

思码逸研发效能

亚马逊发文力捧Rust ,Go 技术负责人:别“拉踩”我们_编程语言_褚杏娟_InfoQ精选文章