写点什么

高效又节能的 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:304156
用户头像
刘燕 InfoQ高级技术编辑

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

关注

评论 1 条评论

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

从安装到编译: 10分钟教你在本地使用和开发GraphScope

6979阿强

大数据 图计算 GraphScope 图分析 图数据

Python 报错 ValueError list.remove(x) x not in list 解决办法

AlwaysBeta

Python 编程

万字长文:直击关于Docker所必须了解的知识

穿过生命散发芬芳

Docker 4月月更

Flutter 2.0的路由把我搞蒙了!!!

岛上码农

flutter 路由 移动端开发 4月月更 跨平台开发

海洋元宇宙Aquqnee,给人们全新游戏体验

BlockChain先知

读《Software Engineering at Google》(03)

术子米德

架构师成长笔记

用 GraphScope 像 NetworkX 一样做图分析

6979阿强

大数据 图计算 GraphScope 图分析 图数据

DevSecOps:云原生安全风险“避坑”指南

York

容器 云原生 安全 DevSecOps

你知道Java是如何解决可见性和有序性问题的吗?,邮储银行Java笔试

爱好编程进阶

Java 面试 后端开发

简单的常量和变量的运算实例

CRMEB

大厂工程师所热衷的DPDK到底是个什么东西?

赖猫

Linux 网络协议栈 DPDK

使用 Helm 部署 GraphScope

6979阿强

大数据 图计算 GraphScope 图分析 图数据

建议收藏!总结了42种前端常用布局方案

云智慧AIOps社区

CSS html 前端 大前端 HTML5, CSS3

2022-04微软漏洞通告

火绒安全

安全 终端安全 漏洞检测 漏洞防护

深入浅出 Ext4 块和 Inode 分配器的优化(上)

焱融科技

云计算 高性能 文件存储 文件系统

linux之chroot命令

入门小站

Linux

GraphScope v0.12.0 版本发布

6979阿强

大数据 图计算 GraphScope 图分析 图数据

分享一个在线考试系统,练手项目用他很香,java架构面试题

爱好编程进阶

Java 面试 后端开发

源声|操作系统十年磨一剑,幕后的坚挺、不懈与客户第一

OpenTEKr

Linux 开源 操作系统 社区运营

Docker 实战教程之从入门到提高(三)

汪子熙

Docker 容器 虚拟化 容器镜像 4月月更

ThreadLocal理解及使用

Rubble

4月日更 4月月更

一文带你搭建RocketMQ源码调试环境

悟空聊架构

RocketMQ 4月日更 悟空聊架构 4月月更

从 Redux 源码谈谈函数式编程

有道技术团队

JavaScript Redux

读《Software Engineering at Google》(04)

术子米德

架构师成长笔记

在 K8s 上运行 GraphScope

6979阿强

大数据 图计算 GraphScope 图分析 图数据

腾讯阿里工程师所热衷的DPDK到底是个什么东西?该如何学习?

Linux服务器开发

Linux服务器开发 DPDK C++后台开发 Linux后台开发 虚拟化技术

“双碳”强风吹拂:数据中心的绿色改革图谱

脑极体

在线IEEE浮点二进制计算器工具

入门小站

工具

在线CSV转Excel工具

入门小站

工具

图计算 101:图计算的类型、语言与系统

6979阿强

大数据 图计算 GraphScope 图分析 图数据

自己动手写Docker系列 -- 5.7实现通过容器制作镜像

Go Docker 4月月更

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