为什么 Rust 是开发者中最受欢迎的语言?

本来来自飞猪前端对 Rust 感兴趣的一个小伙伴。最近 Github 博客出了一篇不错的文章「为什么 Rust 是开发者中最受欢迎的语言?」,很值得一读,他使用 GPT4 翻译了一下,和小伙伴一起学习一下。

连续第八年,Rust 在 Stack Overflow 的年度开发者调查中再次成为"最受欢迎的编程语言"。超过 80%的开发者表示他们明年还想继续使用这种语言,这让人不禁想知道,一个不到 20 年历史的语言如何能够赢得全球开发者的心。

在本文中,我们将回顾 Rust 的历史,它通常用于什么,为什么开发者如此喜爱它,以及一些资源,帮助您开始学习 GitHub 上增长最快的顶级语言之一。

那么,Rust 编程语言是什么?

最初旨在作为 C 和 C++的更安全替代品,Rust 是一种系统编程语言,由于其注重安全性、性能和生产力,已经在开发者中获得了显著的流行。Rust 是一种静态类型语言,因此变量和表达式类型在编译时确定和检查,这有助于增强内存安全性和错误检测,从而实现更可靠的构建。

2006 年,软件开发者 Graydon Hoare 在 Mozilla 工作期间开始了 Rust 这个个人项目。根据《麻省理工科技评论》的一次采访,Rust 的灵感来自 Hoare 公寓楼里一部坏了的电梯。电梯操作系统的软件崩溃了,Hoare 意识到这类问题通常是由程序如何使用内存引起的。

通常情况下,这类设备的软件是用 C 或 C++编写的,但这些语言需要进行大量的内存管理,这可能会导致错误,从而导致系统崩溃。因此,霍尔开始着手研究如何创建一种既紧凑又无内存错误的编程语言。

他后来向一位经理展示了这个项目,这导致 Mozilla 在 2009 年赞助它,作为将该语言纳入实验性浏览器引擎开发的长期努力的一部分。2010 年,Mozilla 研究部正式宣布了 Rust 项目,并将源代码作为开源项目向公众发布。经过几年的开发,Rust 达到了稳定和成熟的状态,并于 2015 年 5 月发布了 Rust 1.0 版本。这个里程碑标志着 Rust 已经准备好用于生产,并为开发人员提供了一个基础。

自从 1.0 版本发布以来,Rust 在流行度和采用率上迅速增长,像微软 Windows 这样的顶级应用程序正在利用 Rust 来用其内存安全的代码重写核心库。除了科技巨头之外,Rust 还拥有一个充满活力的开发者社区,也被称为"Rustaceans",致力于使 Rust 的使用体验变得积极而协作。

根据 SlashData 最近的一项调查,2023 年全球大约有 280 万名 Rust 开发者,这个数字在过去两年里几乎翻了两番。由于有大量活跃的论坛、文档和一个支持性强的社区,适合各个技能水平的开发者,Rust 一直在最受欢迎的编程语言榜单上名列前茅,这或许并不令人意外。

Rust 有什么特别之处?

那么,Rust 有哪些关键特性使其对开发者如此具有吸引力呢?

简而言之,Rust 解决了开发者在 C 和 C++中常见的一些令人沮丧的内存管理问题,但这并不是它唯一出色的能力。GitHub 的一位员工软件工程师 Jason Orendorff,与他人合著了一本关于 Rust 编程的书,对这门语言有如下评价:

据 Orendorff 说:"对我来说,Rust 的伟大之处在于它既快速又可靠。它让我能够编写能够在 16 个核心上运行的多线程程序,并保持可读性、可维护性和无崩溃。它还让我能够编写需要对内存布局进行控制的低级算法,并引入一个使 HTTPS 请求变得超级简单的 crate。正是这些特性的结合使得 Rust 如此独特。"

在此基础上,以下是它更受喜爱的特点和功能之一:

并发。Rust 通过其所有权系统内置支持并发编程,该系统通过强制执行数据访问的严格规则和借用模型来防止数据竞争,从而允许受控的同时访问,确保多个线程可以在共享数据上工作而不引入与内存相关的问题。 没有垃圾回收。与一些编程语言不同,Rust 不使用垃圾回收。相反,它的所有权和借用规则管理内存,帮助开发人员精确控制内存分配和释放,以实现高效的资源管理。

Cargo 包管理器。Rust 内置的包管理器 Cargo 简化了项目管理、依赖跟踪和构建过程,有助于高效有序的开发工作流程。但这并不意味着 Cargo 生态系统的强大程度。根据 Orendorff 的说法,"我的团队利用高质量的开源包进行哈希、序列化、多线程、数据结构、压缩等方面的开发。这些都是性能关键的库。如果没有其中一些库,我们在 GitHub 上重新思考代码搜索的项目将无法实现。"还有一个有趣的事实:Rust 实际上是第一个拥有标准包管理器的系统编程语言,因此 Rust 生态系统非常强大。

零成本抽象。这个特性允许开发者编写高级代码抽象和功能,而不会引入任何运行时性能开销。

模式匹配。这个强大的语言特性使开发人员能够简洁有效地匹配复杂的数据结构与特定模式,以清晰可读的方式提取和处理不同的情况或场景。

类型推断。这个特性允许 Rust 的编译器在你编写代码时根据上下文自动检测表达式。Orendorff 说:"许多编程语言都有一些类型推断,C#和 C++有一些,Rust 有更多,而像 Haskell、Scala 和 ML 这样的语言则有更多。"

Rust 通常用于什么?

由于 Rust 具有直接访问硬件和内存的能力,它非常适合嵌入式系统和裸机开发。而且,由于它是一种通用编程语言,也可以用于各种应用,让我们来探索一些关键的使用案例:

使用 Rust 构建性能关键的后端系统

性能关键的后端系统是处理需要高速处理、低延迟响应和高效资源利用的任务的软件组件或服务,而 Rust 的性能、线程安全性和错误处理使其成为开发这些类型系统的绝佳选择。事实上,我们在 GitHub 上使用 Rust 构建了一些这样的系统。例如,我们代码搜索功能的后端就是用 Rust 编写的(你也可以阅读更多关于 GitHub 最新代码搜索功能与 Rust 开发的内容)。

使用 Rust 开发操作系统

Rust 最初是为了解决操作系统问题而创建的(还记得电梯问题吗?)------因此,毫不奇怪,它经常被用于构建操作系统、内核、设备驱动程序或其他需要对内存和性能进行精确控制的低级组件。Redox 是一个类 Unix 的操作系统,用 Rust 编写,这为其最重要的特性------安全性做出了贡献。"Fuchsia 是另一个在 Google 开发的例子," Orendorff 说道。"如果你有一个 Google Nest 智能音箱,很可能它正在运行 Fuchsia。"

操作系统相关代码的 Rust

Rust 也非常适合编写与操作系统紧密交互的代码任务。例如,GitHub 的 Codespaces 团队正在利用 Rust 来提高 GitHub Codespaces 中虚拟磁盘启动速度,并优化 Azure 存储的利用率。Coursera 也在其在线评分系统中使用 Rust,因为它在 Docker 中运行,并且需要一种编译成机器码且依赖性最小的语言。

使用 Rust 进行网络开发

Rust 在网络开发中的应用越来越广泛,尤其是在服务器端。Rust 的异步编程模型和性能特点使其非常适合构建高性能的 Web 服务器、API 和后端服务。此外,出现了许多针对 Rust 的 Web 框架,比如 Rocket,可以帮助人们开始编写安全的 Web 应用程序。这些框架的出现凸显了 Rust 作为一门成熟语言的地位,也有助于增加对 Rust 在前端或后端工作中的支持。

使用 Rust 进行加密和区块链开发

Rust 的速度、内存管理和安全性都对其与加密货币和区块链技术的关联起到了贡献。例如,Polkadot 旨在实现多个区块链之间的互操作性和交互,以安全和去中心化的方式共享信息和资产,利用 Rust 构建其核心基础设施。Polkadot 的运行时逻辑,即管理区块链行为和规则的部分,也是用 Rust 编写的。请查看这个仓库 awesome-blockchain-rust,其中包含一些有用的组件,可用于使用 Rust 构建自己的区块链应用程序。

使用 Rust 构建命令行工具

Rust 的编译能力和表达性语法使其成为构建命令行工具和应用程序的强大选择。此外,编写命令行应用程序是学习和熟悉 Rust 的绝佳方式。快来看看这份全面指南,教你如何在 15 分钟内用 Rust 构建自己的 CLI 应用程序!

使用 Rust 进行嵌入式系统和物联网开发

Rust 的最小运行时和对内存布局的控制使其在开发嵌入式系统和物联网(IoT)设备方面非常有用。它能够防止与内存相关的错误,管理并发,并生成小型高效的二进制文件,满足物联网对安全性、实时性和效率的需求。

为什么开发者喜爱 Rust

尽管 Rust 的用户群体远不及 Java 或 Python,但它在互联网上的最受赞赏列表中仍然与大牌语言竞争。甚至有一个完整的网站专门收录开发者对 Rust 的赞美之词。

但是为什么 Rust 会受到开发者的如此崇敬呢?如果简化为只有几个原因,那么开发者喜爱 Rust 的原因必然是这门语言的速度、安全性和性能。

此外,Rust 正在不断发展壮大,涌现出新的框架、工具和资源。您可以通过 awesome-rust 存储库跟踪对该语言的贡献,该存储库收录了令人印象深刻的 Rust 代码和资源列表。

底线是:欣赏 Rust 不仅仅是采用一种语言,而是拥抱一种以创新为重点,同时又不妥协于稳定性和安全性核心原则的心态。

原文地址:github.blog/2023-08-30-...

相关推荐
小马爱打代码20 分钟前
SpringBoot:封装 starter
java·spring boot·后端
STARSpace888833 分钟前
SpringBoot 整合个推推送
java·spring boot·后端·消息推送·个推
Marktowin1 小时前
玩转 ZooKeeper
后端
GIS之路2 小时前
GDAL 实现影像裁剪
前端·python·arcgis·信息可视化
AGMTI2 小时前
webSock动态注册消息回调函数功能实现
开发语言·前端·javascript
蓝眸少年CY2 小时前
(第十二篇)spring cloud之Stream消息驱动
后端·spring·spring cloud
码界奇点2 小时前
基于SpringBoot+Vue的前后端分离外卖点单系统设计与实现
vue.js·spring boot·后端·spring·毕业设计·源代码管理
不会Android的潘潘2 小时前
受限系统环境下的 WebView 能力演进:车载平台 Web 渲染异常的根因分析与优化实践
android·java·前端·aosp
建军啊2 小时前
java web常见lou洞
android·java·前端
阳无2 小时前
宝塔部署的前后端项目从IP访问改成自定义域名访问
java·前端·部署