写点什么

高效又节能的 Rust 能帮助拯救地球吗?

  • 2022-02-17
  • 本文字数:2467 字

    阅读完需:约 8 分钟

高效又节能的Rust能帮助拯救地球吗?

这种编程语言安全又高效,但很难学,会拖累生产力。


去年 12 月,在 AWS Re:invent 大会上,Rust 基金会主席 Shane Miller 和 Tokio 项目负责人 Carl Lerche 提出了使用 Rust 来尽可能减小人类对环境破坏的概念,但他们认为 Rust 陡峭的学习曲线是通向这一目标的道路上最大的障碍。


Miller 还是 AWS 的高级工程经理,而 Lerche 是这家云巨头的首席工程师。


Rust 为什么能拯救地球呢?答案是,更高效的代码需要的运行资源也会更少,这意味着数据中心消耗的能源会更少,而且制造计算设备并将其运送到世界各地的过程中对环境的影响也会更低。



Shane Miller 和 Carl Lerche 在 AWS Re:invent 2021 上谈论 Rust 的效率和安全性


“数据中心消耗了……全球能源总量的 1%,”Miller 说道。不过他补充说,由于技术进步以及云计算行业倾向于减少闲置资源的比例等因素,过去 10 年来行业消耗的能源总量几乎没有变化。


他们论点的第二部分是说 Rust 是最高效的编程语言之一。他们引用的证据来源是 2017 年的一篇论文[PDF],这篇论文测量了 27 种编程语言的性能、内存使用量和能源效率,并将 C 列为最高效的语言,而 Rust 紧随其后,能源使用量仅比 C 增加了 3%。根据这项研究,Java 使用的能量几乎是 C 的两倍,C#则是 C 的三倍以上,Python 则需要使用 75 倍以上的能量。



根据 2017 年的一项研究项目,按能源效率排名的语言

高效率的 Rust 语言


这项研究是有问题的,正如这次会议上的一些人所观察到的那样:之所以会产生这样的结果,不是因为有些语言不那么关心能源效率,而是因为编程语言有许多实现和编译器,其中一些是相对更高效的。这篇论文还测出来 TypeScript 的效率只有 JavaScript 的十分之一,这也很奇怪,因为它明明可以编译为 JavaScript,并且两种语言编写的代码差不多。


不过这些问题并没有那么重要,因为没有人质疑 Rust 作为一种系统语言的效率的确极为出色这个结论。 而且 Miller 和 Lerche 的论点并不仅仅依赖于这项研究。Miller 还引用了来自 Discord 和 Tenable 的案例研究,这些研究显示了 Rust 带来的显著效率提升。


在 Tenable 案例中,开发人员用 Rust 重写了一个 JavaScript 组件,并实现了 50%的延迟改进、75%的 CPU 使用率下降和 95%的内存使用率下降。“这真是不可思议,”Miller 说。“这可节约了不是一点半点,而且不仅仅是在基础设施方面节省了资源,它还意味着节约大量能源。”


Lerche 说,垃圾收集语言本质上就是效率较低的。垃圾收集是自动化内存管理工作的常用方法,它的机制是识别超出范围的对象并释放它们的内存。


“垃圾收集器必须暂停进程以执行垃圾收集操作。当它暂停时……该服务无法再响应请求,”他说。这意味着 Java、C#和 JavaScript 等语言永远无法像 C 和 Rust 那样兼具高效率和高性能。


为什么不直接使用 C 和 C++呢?原因在于安全性和与内存相关的错误上,Lerche 说,他还引用了一项研究,“C 和 C++软件中所有高度严重的安全漏洞中有 70%是由于[缺乏]内存安全性。”


他说,Rust 是革命性的,因为“Rust 是第一种在保持内存安全性的同时具备高效率的主流编程语言。”Lerche 解释了 Rust 如何通过所有权(ownership)的理念来实现内存安全性,这种理念基于一个称为仿射逻辑的概念,其中每个对象一次只有一个所有者(owner)。


所有权规则会在编译时检查,因此没有运行时开销。并发在 Rust 中也比在 C 或 C++中更容易实现、更安全,从而进一步提升了性能和效率。


看起来这个目标很容易达成。开发人员和 IT 社区需要做的就是迁移到 Rust 即可,代码将运行得更快、更安全,地球的能源使用量会随之下降,AWS 可以关闭他们一半的数据中心(尽管我们在会议期间没有听到最后这句话)。

Rust 很节能,但太难学导致流行不起来

“但是,”Miller 说,“如果我们要实现碳减排目标……我们将需要使用 C 或 Rust 等节能语言编写大多数新软件。但是 Rust 确实有一个“臭名昭著”的学习曲线……我们看到了不少人在采用它,但我们并没有看到它广泛流行开来。


“我看到 Rust 使用率增长最快的场景是通过使用 Rust 可以获得显著性能提升的场景,例如大容量的数据库服务等等;在物联网和嵌入式等资源受限的小型环境中也有很多人用 Rust。但在类似这样的场景里:你正在写一个 JavaScript 应用的后端——我们是很难看到类似的采用率的。”


问题是在 Rust 中编程是很困难的。Java、JavaScript 和 Python 等语言被广泛采用的原因之一是程序员可以更快地提高他们的工作效率。


这就是房间里的大象,“著名的学习曲线,”Miller 说。在最近的一项调查中,“在表示不再使用该语言的工程师中,55%的受访者将学习和生产力列为放弃该语言的原因。经验丰富的工程师需要在主题专家的支持下进行三到六个月的学习,然后才能使用该语言进行高效工作。”


有没有可能抚平学习曲线呢?“学习曲线的部分问题并不是说语言有多难用,而是开发体验存在不足,因此我们看到来自 Java 等语言并尝试使用 Rust 的工程师们说,他们对调试器的体验感到不舒服,”Miller 在回答我们的问题时说。“Rust 的性能分析工具与他们习惯使用的也不一样。这就是我们正在调查的领域。”


“从历史上看,Rust 是作为 C++的替代品出现的,”Lerche 补充道。“它的目标就是那个用例。但是我们发现在更高层次上还有很多应用场景。


“如果你要构建一个服务,你得先看一遍 Rust 写得非常详细的手册,然后了解生命周期、trait 和 trait 模式,以及所有这些属于这种语言一部分的概念,但这些概念和你要编写的服务基本没什么关系。”他说,Rust 项目有计划编写一套简化的文档,其中只包含一些“编写服务所需的知识”。


尽管这些举措会有所帮助,但很难想象 Rust 真的会变得那么简单易用,简单到足够让业务应用程序的开发人员能从 Java 或 JavaScript,或 C#或 Python 切换过来。毕竟他们还是有很多业务问题需要解决,并且用其他那些语言来搞定会快得多。


进一步说,在计算栈的底层,代码可能会是用 Rust 或 C 或 C++编写的,因为对于 Linux 内核或数据库引擎的核心来说,高性能和效率已经是一项要求了。


也就是说,Rust 要发挥作用的关键在于目标环境的软件低效率已经显著增加了客户成本,并且 IT 行业非常关注这种低效率问题才行,而且 Rust 也只是解决低效率问题的一部分手段而已。


原文链接:https://www.theregister.com/2021/11/30/aws_reinvent_rust

2022-02-17 09:304216
用户头像
刘燕 InfoQ高级技术编辑

发布了 1112 篇内容, 共 555.4 次阅读, 收获喜欢 1978 次。

关注

评论 1 条评论

发布
用户头像
这……这感觉是在说一个不需要额外说明的道理啊。rust的目标是干死C++,而不是针对java。应该说rust是c++的安全替代,而不是说rust无所不能。同时通过pyo3等项目,rust可以用来在特定情况下显著优化python之类高级语言写的程序的性能。反正就是当优化执行性能本身已经有规模效益时,原来用c/c++来进行的优化,现在有了个安全的多的替代方案
2022-02-17 16:51
回复
没有更多了
发现更多内容

Python 设计模式:单例模式

宇宙之一粟

Python 单例模式 6月月更

mysql中的查询计划及sql语句性能分析:explain

乌龟哥哥

6月月更

应用配置管理,基础原理分析

Java 微服务 构架

K8S学习笔记--《开篇词|迎难而上,做云原生时代的弄潮儿》

IT蜗壳-Tango

容器 k8s IT蜗壳教学 6月月更

一条命令开启监控之旅!

TanCloud探云

开源 监控系统

浅谈DOM中的类型

大熊G

JavaScript 前端 6月月更

设计微博系统中“微博评论”高性能高可用计算机构

Fan

架构师实战营

如何写出同事看不懂的Java代码?

码农参上

后端 Java’

电商增长红海突围,借势小程序生态

Speedoooo

小程序 小程序生态 电商 移动开发 小程序运行时

剖析 SPI 在 Spring 中的应用

vivo互联网技术

spring Java’ JavaSPI Spring SPI Dubbo SPI

DOM操作

Jason199

js DOM事件 6月月更

Java 中的Comparator使用技巧

Nick

Java stream 6月月更 Comparator nullsFirst

如何使用物联网低代码平台进行设备调试?

AIRIOT

低代码 物联网 低代码开发

SRE Lesson One -- Day1 准备你的工作环境

耳东@Erdong

SRE 6月月更 SRE Lesson One

全面双录倒计时,融云助力泛金融业务办理高效合规可回溯

融云 RongCloud

MySql 过滤查询(以字母开头,以数字开头,非数字开头,非字母开头)

迷彩

数据库 MySQL 数据库 6月月更

InfoQ 极客传媒 15 周年庆征文|分布式设计介绍

No Silver Bullet

6月月更 InfoQ极客传媒15周年庆 分布式设计

知识管理系统有效推动中小企业信息化发展

小炮

PingCAP 入选 2022 Gartner 云数据库“客户之声”,获评“卓越表现者”最高分

极客天地

【LeetCode】 移除字母异位词后的结果数组Java题解

Albert

LeetCode 6月月更

Hoo虎符研究院 | 币圈后浪D/Bond一个基于ERC-3475标准开发的去中心化债券生态系统平台

区块链前沿News

Hoo 虎符交易所

Ajax入门教程

倔强的牛角

ajax 6月月更

Eureka的TimedSupervisorTask类(自动调节间隔的周期性任务)

程序员欣宸

Java SpringCloud 6月月更

Linux开发_文件发送与接收

DS小龙哥

6月月更

C#入门系列(二十一) -- 面向对象之继承

陈言必行

C# 6月月更

C语言数据的储存

未见花闻

6月月更

如何提高远程办公的效率?| 社区征文

石云升

远程办公 6月月更 初夏征文

Java 使用 char[] Array 还是 String 存储字符串

HoneyMoose

深度学习编程常用工具Jupyter Notebook

Damon

深度学习 Jupyter Notebook jupyterlab 6月月更

Flutter 中的 Flash 错误消息

坚果

6月月更

我把 b 站拉黑了!

博文视点Broadview

高效又节能的Rust能帮助拯救地球吗?_AI&大模型_Tim Anderson_InfoQ精选文章