您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > Rust

Rust综述:生态系统的当前趋势和缺陷

时间:2023-05-30 15:24:58  来源:InfoQ  作者:

作者 | Vitaly Bragilevsky

译者 | 刘雅梦

策划 | Tina

Rust 生态系统会定期通过众多的开发者调查进行探索。仔细阅读这些调查报告可以深入了解社区和技术的潜力。例如,大多数 Rust 开发人员是最近才开始使用该语言的,这可能是一个信号,表明雇主应该审查他们的工作描述,不要再指望应聘者能有 10 年的 Rust 经验。

在本文中,我们将分享关于 Rust 社区和生态系统的发现和见解,并将详细阐述使用 Rust 启动新项目或从其他语言迁移到 Rust 的独特性和陷阱。

Rustaceans

有多少 Rust 开发者(或 Rustaceans,他们自称为 Rustaceans)?尽管统计开发人员并不是一门精确的科学,但我们有一些估算。在《SlashData 23 届开发者国家状态报告》(2022 年第三季度)中,SlashData 估算的 Rust 开发者数量为 280 万,是 JAVA 社区规模的 1/7,不到 C/C++ 社区规模的 1/4。

该调查报告还显示,这一数字在过去两年中增加了两倍,使其成为增长最快的开发者社区之一。那它还有增长的潜力吗?

根据《Stack Overflow 2022 开发者调查》,在没有使用过 Rust 的开发人员当中,有 17.6% 的人想要使用它,这使得 Rust 成为开发者社区最受期待的语言。考虑到当前的趋势以及该技术的年龄尚轻,它的未来看起来还是很光明的。

Rust 社区还很年轻。根据 JetBrAIns 发布的《2022 年开发者生态系统状态报告》,在将 Rust 作为主要语言的开发者中,有 60% 的人年龄在 30 岁以下。

Rust 团队的《2021 年 Rust 状态调查报告》称,有一半的开发人员在任何一门编程语言中的编程经验都不超过 10 年。

我们也来看看 Rust 开发人员的背景编程经验。关于其所使用的其他编程语言,《Rust 状态调查》确定了以下几大类(可能交叉)Rust 开发人员群体:

  • 41% 的 Rust 开发人员认为自己是动态类型语言(Java、Python/ target=_blank class=infotextkey>Python、php 等)的专家。
  • 27% 的人认为自己是具有垃圾收集功能的面向对象的静态类型语言(Java、C#、Go 等)的专家。
  • 20% 的人认为自己是手动内存管理语言(C、C++ 等)的专家。

《Stack Overflow 调查》还报告了大量对使用 Rust 感兴趣的 Java、Type、Python、Java 和 C++ 开发人员。有趣的是,C 开发人员并不那么倾向于 Rust,但考虑到最近 linux 关于内核开发的政策发生了变化,以及在其他主要基于 C 的项目(例如 curl)中支持 Rust 的趋势,这种情况可能会改变。

根据《2022 年开发者生态系统状态》的 Rust 部分,只有 5% 的 Rust 开发人员使用该语言的时间超过了 3 年。大约一半的 Rust 项目是纯粹的 Rust 项目,而其他项目则是与 Java/Type(22%)、Python(15%)、C++(12%)、Go(12%)和 C(11%)以及其他语言共享代码库。在 Github 上搜索以 Rust 作为主要语言的流行代码库会发现,其中 20% 的代码库还包含 Python 代码,另有 20% 包含 Java。

根据这些数据和我对 Rust 社区的观察,我猜想它正在增长,这要归功于大量具有 Python 和 Java 背景的年轻人正在转向他们的第一门系统编程语言。这类语言很难学习,但会为他们带来全新的软件开发体验。像 C 和 C++ 这样的老语言对他们来说没有那么吸引人,但 Rust 有。

技术领域和行业采用

Rust 团队的调查显示,服务器端(后端)项目是 Rust 的主要技术领域。云计算基础设施和应用程序是应用 Rust 的另一个巨大领域,而分布式应用程序也是 Rust 社区的热门选择。

Linux 是最具针对性的平台(占 77%,而 windowsmacOS 分别占 41% 和 36%)。WebAssembly 占 22%,而嵌入式系统仅占 11%。Rust 在移动应用程序中的使用基本上可以忽略不计。

对于 Rust 项目,CLI 工具比 GUI 应用程序更受欢迎。这可以归因于生态系统中 CLI 库的主要供应,而 GUI 库则不太常见。根据《2022 年开发者生态系统状态调查》,46% 的 Rust 开发者将其用于 CLI 工具的开发。

有一个技术领域,虽然在展示 Rust 应用程序时非常重要,但仅仅从数字上看可能并不那么容易看出:那就是为其他编程语言提供的工具。我们可以看到,在 Java 和 Python 社区中都使用 Rust 来作为开发高性能的替代方案,以替代当前可用于这些语言的工具。像 deno(一个 Java 和 Type 运行时)和 Ruff(一个 Python linter)这样的项目就是这种趋势的很好的例子。这些开源项目表明,Rust 在提供高性能和高开发速度的同时也吸引了大量的贡献者。使用编程语言来开发工具有着悠久的传统。Rust 非常有效地打破了这一传统。

微软、谷歌、亚马逊和 Meta 等科技巨头都推崇并支持 Rust。尽管如此,《2022 年开发者生态系统状态调查》报告称,大多数 Rust 开发人员在工作之外使用 Rust。只有 18% 的受访者在他们正式工作中使用 Rust 来开发软件。在 Rust 团队的调查中,只有不到一半的受访者认为自己使用 Rust 是高效的。在同一调查中,只有不到一半的受访者每天都在使用 Rust。这些数字表明,其他人仍在学习 Rust,或者偶尔将其作为爱好用于个人项目。

各种网站上的招聘信息并不能让我们得出这样的结论:有成千上万的中小型公司有兴趣雇佣 Rust 开发人员。在 Rust 团队的调查受访者中,只有 15% 的人表示他们的公司在大量项目中使用 Rust,而另有 18.5% 的人认为它只在少数项目中使用。似乎在公司中引入 Rust 的主要方式是通过从其他语言中重写非关键组件,或者在 Rust 中启动一个新的非必要项目来衡量其有效性。Rust 社区正在积极讨论关于过渡到 Rust 或启动新项目过程中的成功案例和失败案例。

开始 Rust 之旅需要公司拥有一些具有长期 Rust 经验的高级工程师来监督过渡。正如我们已经强调的那样,社区中缺乏这种类型的开发人员。幸运的是,随着时间的推移,这个问题会自动得到解决。

《2021 年 Rust 状态调查》将 Rust 在行业中的使用不足确定为首要问题。然而,这种情况有望改变。

语言和工具

Rust 的一大优点是它兑现了自己的承诺。内存安全允许消除某些类型的错误。谷歌将Android/ target=_blank class=infotextkey>安卓系统中关键漏洞数量的下降部分归因于采用 Rust 作为 C++ 的内存安全替代品。Rust 的性能使亚马逊在能源效率方面具有可持续性。降低 CPU 使用率和有效的内存管理都是 Rust 语言特性的成果。

70% 的在工作中使用 Rust 的开发人员强烈赞同 Rust 的性能特征(如速度、内存占用等)会影响其采用。其中 64% 的人看重 Rust 的安全性和安全特性。大约 80% 的人同意 Rust 可以帮助他们实现自己的目标,并能弥补采用成本。65% 的开发人员认为 Rust 语言和标准库文档写的很棒。这些数字解释了为什么 Rust 连续七年成为最受欢迎的语言,根据 Stack Overflow 的调查,87% 的开发人员表示他们想继续使用 Rust。Rustaceans 忠于 Rust,与开发人员本身相比,Rust 更能说明语言及其质量。

38% 的 Rust 团队调查受访者一致认为,与其他编程语言相比,Rust 的编程要复杂得多。62% 的人认为它的学习需要付出更多的努力。他们还担心情况会变得更加复杂。这是调查受访者对 Rust 未来的第二大担忧。

所有的调查都一致认为,由 rust-analyzer 提供支持的 Visual Studio Code 是最流行的 Rust 编写 IDE。大约一半的 Rust 开发人员都在使用它。亚军是由我们的 IntelliJ Rust 插件提供支持的 JetBrains IDE(CLion、IntelliJ IDEA 和其他),根据调查的不同,份额从 25% 到 40% 不等。Vim/Neovim 是第三大最受欢迎的选择。三分之二的 Rust 开发人员认为他们的 IDE 体验很棒或足够好。

当深入到开发体验的细节时,调查显示,问题最多的部分是调试和测评分析。32% 的《2022 年开发者生态系统状态》调查受访者提到他们怀念本机调试体验。29% 的 Rust 团队调查受访者认为调试体验可以更好。超过一半的 Rust 开发人员使用 println 风格的调试作为调试代码问题的主要方式,其中三分之一的开发人员只使用这种方法。

代码评测分析体验更差;超过 80% 的 Rust 开发人员根本不使用性能分析工具。其中一个原因可能是目前可用的工具都很难用,而且它们的发现也很难解释。侧重于分析的教材也多有缺失。开发人员似乎很乐意盲目地相信 Rust 的性能而不进行实际地检查。随着 Rust 在行业中的普及,这种态度可能会成为一个关键问题。评测分析工具本身和学习资料都需要认真努力地加以改进。

不幸的是,现有的调查还没有进入 Rust 库。关于库生态系统缺失的部分,我们还没有很好的数据。作为一项年轻的技术,会存在技术完整性的问题,但考虑到 Rust 良好的互操作性,这从未被认为是一个关键问题。

结 论

和调查中经常出现的情况一样,这些结果既支持了一些有趣的结论,也破坏了一些著名的理论。以后一种情况为例,这些结果表明,最初认为 Rust 是 C/C++ 杀手的观点在今天看来似乎并不相关。我们没有证据表明在现有的代码库中 C/C++ 代码被大量替换,我们也不希望这种情况在未来发生。为什么呢?因为 C 和 C++ 都可以继续工作。C++ 正在发展,长期存在的问题正在得以解决。根本没有必要用 Rust 重写所有内容。此外,也没有足够的劳动力来做这件事。尽管如此,现在用 C 或 C++ 启动一个新项目仍需要仔细考虑。Rust 也可能是该项目的一个不错选择,尤其是当目标平台是 Linux 并且你关心性能和安全性时。

社区成员的年轻化预示着 Rust 有着光明的未来。它不会消失,而且在该行业的采用率将继续上升。随着经验丰富的 Rust 开发人员数量的增长,我们将看到更多的纯 Rust 项目的出现。科技巨头已经上了 Rust 的船,我们预计中小企业很快就会效仿。

Rust 工具正在不断发展,世界各地的许多爱好者和公司都在为工具生态系统做出贡献。

要想用 Rust 高效工作,需要对其概念有深刻的理解,尤其是在所有权、内存管理和并发方法方面。用 Rust 高效编程需要专门的学习和培训。这就是为什么让精通其他编程语言的开发人员切换到 Rust 的常见做法可能比切换到其他语言更成问题。从任何语言转换都需要改变很多习惯。不要指望开发人员自己掌握这些概念并迅速养成新习惯;相反,应该事先对他们进行教育和培训。

原文链接

https://www.infoq.com/articles/rust-ecosystem-review-2023/



Tags:Rust   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,不构成投资建议。投资者据此操作,风险自担。如有任何标注错误或版权侵犯请与我们联系,我们将及时更正、删除。
▌相关推荐
Rust 标准库 1.77.2 发布,修复高危漏洞
IT之家 4 月 10 日消息,Rust 的优势之一就是安全,但这并不代表该编程语言就没有漏洞。安全专家近日发现了追踪编号为 CVE-2024-24576 的漏洞,攻击者利用 Rust 标准库中的一个安...【详细内容】
2024-04-10  Search: Rust  点击:(4)  评论:(0)  加入收藏
在Rust中使用Serde的详细指南
在处理HTTP请求时,我们总是需要在一种数据结构(可以是enum、struct等)和一种可以存储或传输并稍后重建的格式(例如JSON)之间来回转换。Serde是一个库(crate),用于高效、通用地...【详细内容】
2024-03-26  Search: Rust  点击:(17)  评论:(0)  加入收藏
Rust 写脚手架,Clap你应该知道的二三事
有感而发最近,在和前端小伙伴聊天发现,在2024年,她们都有打算入局Rust学习的行列。毕竟前端现在太卷了,框架算是走到「穷途末路」了,无非就是在原有基础上修修补补。所有他们想在...【详细内容】
2024-03-11  Search: Rust  点击:(20)  评论:(0)  加入收藏
前端开始“锈化”?Vue团队开源JS打包工具:基于Rust、速度极快、尤雨溪主导
Vue 团队已正式开源Rolldown —— 基于 Rust 的 JavaScrip 打包工具。Rolldown 是使用 Rust 开发的 Rollup 替代品,它提供与 Rollup 兼容的应用程序接口和插件接口...【详细内容】
2024-03-09  Search: Rust  点击:(11)  评论:(0)  加入收藏
Rust中的数据可视化指南
可视化是数据分析和解释的一个关键方面。虽然Rust主要以其性能和安全特性而闻名,但它也为数据可视化提供了强大的工具。在这个全面的指南中,我们将深入研究Rust中的数据可视化...【详细内容】
2024-03-07  Search: Rust  点击:(31)  评论:(0)  加入收藏
如何在Rust中操作JSON,你学会了吗?
sonic-rs ​还具有一些额外的方法来进行惰性评估和提高速度。例如,如果我们想要一个 JSON​ 字符串文字,我们可以在反序列化时使用 LazyValue​ 类型将其转换为一个仍然带有斜...【详细内容】
2024-02-27  Search: Rust  点击:(47)  评论:(0)  加入收藏
记一次Rust内存泄漏排查之旅
在某次持续压测过程中,我们发现 GreptimeDB 的 Frontend 节点内存即使在请求量平稳的阶段也在持续上涨,直至被 OOM kill。我们判断 Frontend 应该是有内存泄漏了,于是开启了排...【详细内容】
2024-02-27  Search: Rust  点击:(12)  评论:(0)  加入收藏
Rust 最受欢迎的这些库
今天分享主题是,关于一些值得注意的 Rust 库,这些库可以根据它们的功能和在编码中的受欢迎程度进行选择。什么是 Rust 库?在 Rust 中,常被称为 “crate” 的库,是一个打包的单元...【详细内容】
2024-02-19  Search: Rust  点击:(50)  评论:(0)  加入收藏
异步Rust:构建实时消息代理服务器
在本文中,我们将深入研究使用Rust构建实时消息代理服务器,展示其强大的并发特性。我们将使用Warp作为web服务器,并使用Tokio来管理异步任务。此外,我们将创建一个WebSocket客户...【详细内容】
2024-02-01  Search: Rust  点击:(58)  评论:(0)  加入收藏
在 Rust 编程中使用泛型
本文的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。1.摘要Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以...【详细内容】
2024-01-09  Search: Rust  点击:(89)  评论:(0)  加入收藏
▌简易百科推荐
Rust 标准库 1.77.2 发布,修复高危漏洞
IT之家 4 月 10 日消息,Rust 的优势之一就是安全,但这并不代表该编程语言就没有漏洞。安全专家近日发现了追踪编号为 CVE-2024-24576 的漏洞,攻击者利用 Rust 标准库中的一个安...【详细内容】
2024-04-10    IT之家  Tags:Rust   点击:(4)  评论:(0)  加入收藏
在Rust中使用Serde的详细指南
在处理HTTP请求时,我们总是需要在一种数据结构(可以是enum、struct等)和一种可以存储或传输并稍后重建的格式(例如JSON)之间来回转换。Serde是一个库(crate),用于高效、通用地...【详细内容】
2024-03-26  coding到灯火阑珊  微信公众号  Tags:Rust   点击:(17)  评论:(0)  加入收藏
Rust 写脚手架,Clap你应该知道的二三事
有感而发最近,在和前端小伙伴聊天发现,在2024年,她们都有打算入局Rust学习的行列。毕竟前端现在太卷了,框架算是走到「穷途末路」了,无非就是在原有基础上修修补补。所有他们想在...【详细内容】
2024-03-11  前端柒八九  微信公众号  Tags:Rust   点击:(20)  评论:(0)  加入收藏
Rust中的数据可视化指南
可视化是数据分析和解释的一个关键方面。虽然Rust主要以其性能和安全特性而闻名,但它也为数据可视化提供了强大的工具。在这个全面的指南中,我们将深入研究Rust中的数据可视化...【详细内容】
2024-03-07  coding到灯火阑珊  微信公众号  Tags:Rust   点击:(31)  评论:(0)  加入收藏
如何在Rust中操作JSON,你学会了吗?
sonic-rs ​还具有一些额外的方法来进行惰性评估和提高速度。例如,如果我们想要一个 JSON​ 字符串文字,我们可以在反序列化时使用 LazyValue​ 类型将其转换为一个仍然带有斜...【详细内容】
2024-02-27  前端柒八九  微信公众号  Tags:Rust   点击:(47)  评论:(0)  加入收藏
记一次Rust内存泄漏排查之旅
在某次持续压测过程中,我们发现 GreptimeDB 的 Frontend 节点内存即使在请求量平稳的阶段也在持续上涨,直至被 OOM kill。我们判断 Frontend 应该是有内存泄漏了,于是开启了排...【详细内容】
2024-02-27  OSC开源社区    Tags:Rust   点击:(12)  评论:(0)  加入收藏
Rust 最受欢迎的这些库
今天分享主题是,关于一些值得注意的 Rust 库,这些库可以根据它们的功能和在编码中的受欢迎程度进行选择。什么是 Rust 库?在 Rust 中,常被称为 “crate” 的库,是一个打包的单元...【详细内容】
2024-02-19  码农渔夫  微信公众号  Tags:Rust   点击:(50)  评论:(0)  加入收藏
异步Rust:构建实时消息代理服务器
在本文中,我们将深入研究使用Rust构建实时消息代理服务器,展示其强大的并发特性。我们将使用Warp作为web服务器,并使用Tokio来管理异步任务。此外,我们将创建一个WebSocket客户...【详细内容】
2024-02-01      Tags:Rust   点击:(58)  评论:(0)  加入收藏
在 Rust 编程中使用泛型
本文的内容将涉及泛型定义函数、结构体、枚举和方法, 还将讨论泛型如何影响代码性能。1.摘要Rust中的泛型可以让我们为像函数签名或结构体这样的项创建定义, 这样它们就可以...【详细内容】
2024-01-09  二进制空间安全  微信公众号  Tags:Rust   点击:(89)  评论:(0)  加入收藏
什么是Rust语言 ,特点是什么,跟其它语言对比有什么优势
什么是RustRust是一种系统编程语言,旨在提供高性能和安全性。它是由Mozilla和其开发社区创建的开源语言,设计目标是在C++的应用场景中提供一种现代、可靠和高效的选择。Rust的...【详细内容】
2024-01-09    简易百科  Tags:Rust语言   点击:(206)  评论:(0)  加入收藏
站内最新
站内热门
站内头条