写点什么

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

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

关注

评论 1 条评论

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

数十家技术社区联名推荐的GeekOnline来了!

Geek_116789

单例模式的几种写法你用的哪种?

Java小咖秀

Java 设计模式 23种设计模式

我想模糊删除redis key🤔

山中兰花草

Java lua redis 面试 批量任务

《北京市政务服务领域区块链应用创新蓝皮书(第一版)》正式发布

CECBC

企业架构框架之TOGAF

冯文辉

企业架构

Week 06 命题作业

Jeremy

平价又好用的学习电脑小轩PRO来啦,为孩子创造超强学习体验

最新动态

第六周总结

腾志文(清样)

第六周作业

腾志文(清样)

聊聊Dubbo(二):简单入门

猿灯塔

【API进阶之路】老板给我涨薪30%!如何通过SDK接口搞定千万级流量直播

华为云开发者联盟

运维 服务器 直播 云服务 华为云

防止数据重复提交的6种方法(超简单)!

王磊

Java

Flask-Restful 中 fileds.DateTime 不支持 strftime 格式

Leetao

Python flask web开发 Python框架 flask-restful

如何进行需求梳理及埋点方案设计

易观大数据

图解:如何实现最小生成树

淡蓝色

Java 数据结构 算法

寻找握剑的手,青睐懂行的人

脑极体

解决问题 1474 个,Flink 1.11 究竟有哪些易用性上的改善?

Apache Flink

flink

MQTT的搭建、测试、应用及小程序的集成!

诸葛小猿

物联网 IoT mqtt broker

计算机揭秘之:网络分类和性能分析

程序那些事

TCP 计算机网络 网络协议 计算机基础 udp

可读代码编写炸鸡七 - 表达式太长就拆

多选参数

代码质量 代码组织 代码规范 可读代码编写 可读代码

朱嘉明:区块链成为经济转型、形成产业新业态的技术手段

CECBC

Python的四种作用域及调用顺序

BigYoung

Python 局部作用域 全局作用域

CAP原理

jason

区块链加持的家用摄像头能拯救你的隐私吗?

CECBC

可读代码编写炸鸡六 - 控制流尽量向前奔涌就好,不要分心

多选参数

代码 代码优化 代码规范 可读代码编写 可读代码

毕业半年的憨憨,将公司的代码上传到GitHub上了

诸葛小猿

GitHub 代码上传

林左鸣 史瑞华:人类应鼎力进行的探索

CECBC

如何帮助技术员工高效成长?这几家企业的做法值得借鉴

极客时间企业版

研发管理 研发团队培训

以中立性的立场看Severless的目标和流派

韩超

云原生 serverles

Week 06学习总结

Jeremy

LeetCode题解:141. 环形链表,JavaScript HashMap,详细注释

Lee Chen

大前端 LeetCode

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