Rust为什么这么火?从入门到精通,掌握这门热门编程语言

Rust 语言凭借其内存安全、高性能及开发者友好等特性,迅速成为开发者最喜爱的编程语言之一,本文带你探索Rust的魅力。

原文标题:豆瓣 9.2 高分口碑,这本书凭什么能得到大家的认可?

原文作者:图灵编辑部

冷月清谈:

Rust 语言凭借其内存安全、高性能和开发者友好等特性,在系统编程、Web 开发、嵌入式等领域迅速崭露头角。本文追溯了 Rust 的发展历程,从 2006 年 Graydon Hoare 的个人项目到 Mozilla 的正式支持,再到 1.0 版本的发布,Rust 的成长之路清晰可见。文章详细介绍了 Rust 的关键特性,包括并发支持、无垃圾回收机制、Cargo 包管理器、零成本抽象、模式匹配和类型推断等,并解释了这些特性如何赋予 Rust 优异的性能和安全性。此外,文章还列举了 Rust 的应用场景,例如构建高性能后端系统、开发操作系统、Web 服务器端应用、加密和区块链开发、命令行工具以及嵌入式系统和物联网开发。最后,文章推荐了《Rust程序设计(第2版)》作为学习 Rust 的入门教程,并列举了该书获得的良好口碑和评价。

怜星夜思:

1、Rust 的无垃圾回收机制和所有权系统对性能和安全性有什么影响?实际应用中有哪些需要注意的地方?
2、除了文章提到的应用领域,Rust 在其他领域还有哪些潜在的应用前景?
3、与其他系统级编程语言(如 C/C++、Go)相比,Rust 的优势和劣势分别是什么?在选择编程语言时,应该如何权衡?

原文内容

Rust 自发布以来,凭借其无与伦比的内存安全性、卓越的性能和开发者的高度满意度,迅速赢得了全球程序员的喜爱。越来越多的大型项目在采用 Rust,像 Firefox、Cloudflare 等公司都在其项目中引入了这门语言,甚至微软和谷歌也在使用 Rust 提升系统级应用的安全性和性能。
根据 2024 年 Stack Overflow 的年度开发者调查,大多数开发人员使用过并希望再次使用的语言依旧是 Rust,支持率高达 83%。Rust 的发展不仅仅体现在开发者社区的热情,也体现在其在系统编程、Web 开发、嵌入式编程等多个领域的广泛应用。
那么,Rust 到底为何如此受欢迎?本文将带你从 Rust 的发展历程开始,通过它的技术用途,探索为何它深受开发者喜爱,并为你提供一些学习资源,帮你快速上手近一年来增长最快的编程语言之一。

1

什么是 Rust 编程语言 

Rust 的 print 宏显示输出 “Hello, World!”

Rust 最初的设计目标之一是提供一种更安全的系统级编程语言,它不仅在系统编程领域被视为 C 和 C++ 的有力竞争者,还在 Web 开发、嵌入式、区块链等多个领域展现出了强大优势。

2006 年,软件开发者 Graydon Hoare 在业余时间启动了 Rust 语言的开发,该项目最初并非 Mozilla 的正式项目。直到 2009 年,Mozilla 看到 Rust 的潜力,开始提供资助和支持,使其成为一个正式的开源项目。

根据 Graydon Hoare 在 MIT Technology Review 的采访,Rust 的灵感来源于他公寓楼里一部故障电梯。电梯操作系统软件崩溃了,Hoare 发现这类问题通常源自程序如何使用内存的问题。

许多这类设备的软件是用 C 或 C++ 编写的,但这些语言需要大量的内存管理,这可能会导致系统崩溃。因此,Hoare 开始思考如何创建一门既简洁又没有内存问题的编程语言。

他后来将这个项目展示给了一个经理,这促使 Mozilla 在 2009 年赞助了该项目,作为其长期计划的一部分,将 Rust 融入到开发实验性浏览器引擎中。2010 年,Mozilla Research 正式宣布了 Rust 项目,并将源代码公开,成为开源项目。经过几年的开发,Rust 达到了稳定和成熟的状态——2015 年 5 月,Rust 1.0 发布,这标志着 Rust 准备进入生产阶段,为开发者提供了一个构建基础。

近年来,微软也在探索 Rust 在操作系统开发中的应用,例如在 Windows 内核的部分组件中引入 Rust 以提高内存安全性。除科技巨头之外,Rust 还拥有一个充满活力的开发者社区,或称“Rustaceans”,他们致力于使 Rust 成为一种积极和协作的体验。

认识 Ferris,Rust 的非官方吉祥物!
根据 SlashData 的一项调查,到 2024 年,全球大约有 400 万 Rust 开发人员,这个数字对比两年前几乎增加了一倍。Rust 拥有大量活跃的论坛、文档和面向各种技能水平的开发者支持社区,因此 Rust 在最受追捧的语言列表中名列前茅也就不足为奇了。

2

Rust 有什么特别之处 

简单来说,Rust 解决了 C 和 C++ 中常见的内存管理问题,但这并不是它唯一的闪光点。

GitHub 的一位资深软件工程师 Jason Orendorff 与人合著了一本关于学习 Rust 编程的书,他谈到这门语言时说:“对我来说,Rust 的优点在于它既快又可靠,”Orendorff 说:“它让我写出可以在 16 个内核上运行的多线程程序,同时保持代码的可读性、可维护性和无崩溃。它还让我编写非常底层的算法,控制内存布局,并可以引入一个简单的 crate 来进行 HTTPS 请求。正是这些特性使得 Rust 独一无二。”

Jason Orendorff 创作的 Rust 书就是这本👆

在此基础上,以下是它更多深受喜爱的特性和功能:

  • 并发。Rust 通过其所有权系统内置了对并发编程的支持,该系统对数据访问施加了严格的规则。其借用模型允许受控的同步访问,从而有效防止数据竞争。这确保了多个线程可以安全地共享数据,而不会引发内存相关的问题。
  • 没有垃圾回收。与某些编程语言不同,Rust 不使用垃圾回收。相反,它的所有权和借用规则管理内存,这有助于开发人员精确控制内存分配和释放,以实现高效的资源管理。
  • Cargo 包管理器。Rust 的内置包管理器 Cargo 简化了项目管理、依赖项跟踪和构建,这有助于实现高效和有序的开发工作流程。但这并不能清楚地表明 Cargo 生态系统有多么疯狂。根据 Orendorff 的说法:“我的团队利用高质量的开源包进行哈希、序列化、多线程、数据结构、压缩等等。这些是性能关键型库。如果没有其中的一些库,我们重新思考 GitHub 上的代码搜索的项目就不可能实现。“
    这里有一个有趣的事实:Rust 的 Cargo 工具为其生态系统提供了强大的支持,使开发者能够轻松管理依赖项、构建项目并发布库。它是系统编程语言中少数拥有官方内置包管理器的语言之一,并极大推动了 Rust 社区的发展。
  • 零成本抽象。此功能允许开发人员编写高级代码抽象和功能,而不会引入任何运行时的性能开销。
  • 模式匹配。这种强大的语言功能使开发人员能够简洁有效地将复杂的数据结构与特定模式进行匹配,从而以清晰可读的方式提取和处理不同的情况或场景。
  • 类型推断。此功能允许 Rust 的编译器在您编码时根据上下文自动检测表达式。“许多编程语言都有一些类型推断,”Orendorff 说:“C# 和 C++ 有一些,Rust 有更多,而 Haskell、Scala 和 ML 等语言甚至更多。”
fn main() {
break rust;
}

运行此代码,了解 Rust 开发人员😆之间的内部笑话


3

通常用 Rust 来做什么

凭借对硬件和内存的直接访问,Rust 非常适合嵌入式系统和裸机开发。由于它是一门通用语言,因此可以用于多种应用场景。
让我们探讨几个关键用例:
  • 使用 Rust 构建性能关键型后端系统
性能关键型后端系统处理的是需要高速处理、低延迟响应和高效资源利用的任务。Rust 的卓越性能、线程安全性和错误处理能力,使其成为开发这种类型系统的理想选择。事实上,我们在 GitHub 上就使用 Rust 构建了其中一些系统。例如,我们的代码搜索功能的后端就是用 Rust 编写的。
  • 使用 Rust 开发操作系统
Rust 最初是为了解决操作系统问题而创建的(还记得电梯问题吗?)——因此,不出所料,它通常用于构建操作系统、内核、设备驱动程序或其他对内存和性能的控制至关重要的低级组件。Redox 是一种类似 Unix 的操作系统,它是用 Rust 编写的,这有助于其最关键的功能:安全性。
“Fuchsia 是 Google 构建的操作系统之一”Orendorff 说:“虽然 Fuchsia 主要使用 C++ 编写,但 Google 也在其部分组件(如 Zircon 内核的一些驱动程序)中使用 Rust,以增强安全性。”
  • Rust 用于操作系统相邻代码
Rust 还非常适合编写执行与操作系统密切交互的任务代码。例如,GitHub 的 Codespaces 团队正在利用 Rust 来提高在 GitHub Codespaces 中启动虚拟磁盘的速度,并优化 Azure 存储的利用率。Coursera 还在其在线评分系统中使用了 Rust,因为它在 Docker 中运行,并且需要一种能够编译为机器代码的语言,并且具有最小的依赖项。
Rust 在 Web 服务器端的应用逐渐增加,主要用于高性能 Web 服务器、API 以及后端基础设施开发。框架如 Actix-web 和 Axum 提供了高并发的 Web 服务器支持,但 Rust 在 Web 开发领域的生态仍在不断发展,尚未达到 JavaScript、Python 等语言的成熟度。
  • 使用 Rust 进行加密和区块链开发
Rust 的速度、内存管理和安全性都有助于它参与加密货币和区块链技术。例如,Polkadot 旨在实现多个区块链之间的互操作性和交互,以安全和去中心化的方式共享信息和资产,它利用 Rust 构建其核心基础设施。Polkadot 运行时逻辑管理区块链的行为和规则,也是用 Rust 编写的。查看这个存储库 awesome-blockchain-rust,了解一些有用的组件,以使用 Rust 构建您自己的区块链应用程序。
  • 使用 Rust 构建 CLI 工具

Rust 的零成本抽象、强大的错误处理能力和生态工具(如 Clap 库)使其成为构建命令行工具的绝佳选择。许多开发者选择 Rust 来编写 CLI 应用,因为它提供了高性能、良好的可维护性,并能够编译成单个二进制文件,便于分发和部署。此外,编写命令行应用程序是学习和熟悉 Rust 的好方法。

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

4

为什么开发人员喜欢 Rust 

虽然 Rust 的用户基数远不及 Java 或 Python,但它仍然在全球开发者中享有极高的声誉,常常跻身最受喜爱的编程语言榜单。

那么,究竟是什么让开发者如此喜爱 Rust 呢?如果简要总结开发者喜爱 Rust 的原因,那必定是它的速度、安全性和性能。

此外,Rust 正在通过新的框架、工具和资源不断发展和成长。您可以在 awesome-rust 存储库中密切关注对该语言的贡献,该存储库包含令人印象深刻的 Rust 代码和资源列表。

当然欣赏 Rust 不仅仅是一门好用的语言,更是拥抱一种优先考虑创新的思维方式,同时又不损害稳定性和安全性的核心原则。

5

Rust 领域内最好的入门教程 

很多初学者,学习 Rust 之初,会被复杂的资料劝退。今天小图给大家安利这本 Rust 一本通,由 Mozilla 创始团员编写,雪狼翻译,30 位一线 Rust 开发者与爱好者精心审读。内容涉及 Rust 所有关键特性,讲解深入浅出,含大量案例,具有很强的实践性。
《Rust程序设计(第2版)》
吉姆·布兰迪,贾森·奥伦多夫 | 著

汪志成(@雪狼)| 译

Rust 领域经典参考书,由业内资深系统程序员编写,广受读者好评。书中全面介绍了 Rust 这种新型系统编程语言——具有无与伦比的安全性,兼具 C 和 C++ 的高性能,并大大简化了并发程序的编写。

第 2 版对上一版内容进行了重组和完善,新增了对“异步编程”的介绍。借助书中的大量案例,你也能用 Rust 编写出兼顾安全性与高性能的程序。

为什么这本书备受推崇?先来看看该书在国内和国外平台上的读者评论。

豆瓣上这本书获得 9.2 分的高分评价。

在美国亚马逊上也是得到了诸多好评。

汇总一下就是:读者大佬们表示,这本书你可以读了又读,也可以跳着读,即使读过之后,你也可以放到书架上,随时参考,因为通过这本宝藏书,你总能发现更多细节,学到更多知识。

在这里也把这本书的目录给大家放上,想学习 Rust 的小伙伴可以了解一下本书的内容。

内容优质,翻译精良,由领域内 Rust 专家雪狼老师翻译。并邀请来 30 位一线 Rust 开发者与爱好者精心审读。还获得陈天、唐刚、王旭、张汉东、张炎泼等专家推荐。

新年,如果你打算学习 Rust,这本书一定不要错过!

初审:邢璐
复审:董冲
终审:郑梦鸽

C/C++ 的优势在于成熟的生态和丰富的库,Go 的优势在于简洁易学和高效的并发模型,但它们在内存安全方面都存在一些不足。Rust 虽然学习曲线较陡峭,但在安全性方面提供了更强的保障。选择哪种语言取决于项目的具体需求和团队的技术栈,没有绝对的好坏之分。

这个问题的答案是:视情况而定。哈哈,开玩笑!不过说真的,没有一种语言是完美的。Rust 的学习曲线确实陡峭,但回报也很丰厚,它能让你写出安全、高效的代码。相比之下,Go 更容易上手,但在性能和控制力方面可能不如 Rust。C/C++ 则更加底层,灵活性更高,但需要开发者自己管理内存,风险也更大。所以,选择哪种语言取决于你的项目需求、团队经验以及个人的学习意愿。

无GC机制确实给Rust带来了性能优势,但也提高了学习门槛。我之前写C++习惯了依赖GC,刚开始用Rust的时候经常被编译器“教育”,各种所有权、借用、生命周期的问题搞得头大。不过,掌握了之后确实感觉代码更稳健了,性能也确实有提升,尤其是写并发程序的时候,不用担心数据竞争,非常省心。

我看到有人用 Rust 写 WebAssembly,感觉挺有意思的。WebAssembly 可以让浏览器运行高性能的代码,而 Rust 正好可以满足这个需求。未来随着 WebAssembly 的发展,Rust 在 Web 开发领域可能会扮演更重要的角色。

关于Rust的无GC和所有权系统,对性能来说,避免了GC带来的运行时开销和不可预测的停顿,从而使程序运行更加高效和流畅。对安全性来说,它在编译期就能够有效地防止悬垂指针、数据竞争等内存安全问题,减少了运行时错误的风险。
实际应用中需要注意的是,所有权和借用规则可能会增加代码的复杂性,特别是在处理复杂数据结构时。需要仔细思考数据的所有权转移和借用关系,避免出现编译错误。另外,由于没有GC,需要手动管理内存,例如适时地释放不再使用的内存,避免内存泄漏。

Rust 的优势在于内存安全和高性能,这是 C/C++ 等语言难以同时兼顾的。相比 Go,Rust 的性能更高,对底层硬件的控制能力更强。但 Rust 的劣势在于学习曲线较陡峭,代码编写较为复杂。在选择编程语言时,需要根据项目的具体需求进行权衡,比如对性能要求高且注重安全的项目,Rust 是一个不错的选择;但如果项目对开发效率要求较高,或者团队成员对 Rust 不熟悉,那么 C/C++ 或 Go 可能更合适。

我觉得Rust 在机器学习领域也有一定的潜力。它可以用来编写高性能的数值计算库,或者用于构建机器学习模型的底层基础设施。虽然目前 Python 在机器学习领域占据主导地位,但 Rust 的性能优势可能会吸引一些对性能要求较高的应用场景。

Rust还可以用于开发游戏引擎和游戏客户端。它能提供媲美C++的性能,并保证内存安全,可以有效减少游戏开发中的bug和崩溃。有一些独立游戏开发者已经开始使用Rust进行游戏开发了

性能方面,Rust 的无 GC 机制让它在实时性和资源敏感的场景中大放异彩,比如游戏开发和嵌入式系统,想想看,玩游戏的时候突然卡顿一下,多影响体验啊!安全性方面,所有权系统从根本上杜绝了悬垂指针和数据竞争,这对于构建可靠的系统至关重要,毕竟谁也不想系统动不动就崩溃吧?当然,学习曲线确实比较陡峭,需要花时间理解所有权和借用规则,但从长远来看,绝对是值得的!