问:为什么要近期想学习Rust?
答: Rust出来也是有一段时间了,从Microsoft吵着要重构他们的C++"祖传代码"开始,Rust就披着“高效,安全”的头衔。而自己决定要学习Rust,是因为近期发现:涉及工作的部分开源代码也在悄然的发现变化。
例如:Google在java端用Kotlin改写原有java代码,这个没有什么意外,毕竟Kotlin是Google的亲儿子。但是,最近发现Google也在修改native层的C/C++代码了.....
一图胜千言! Google已经在着手用Rust来替代C/C++的相关实现。同时,听说Linux内核也在用Rust来替代C/C++相关实现...…所以,Rust要学起来!
Rust 编程语言从根本上讲是一种增强能力的语言:无论你现在正在编写哪种代码,Rust 都能让你走得更远,在比以前更广泛的领域中自信地编程。
例如,"系统级 "工作涉及内存管理、数据表示和并发的底层细节。传统上,这一编程领域被视为神秘莫测,只有少数经过多年学习才能避开其恶名昭彰的陷阱的人才能涉足。即使是那些实践者,也要小心谨慎,以防他们的代码被利用、崩溃或损坏。
Rust 打破了这些障碍,消除了旧有的陷阱,并提供了一套友好、完善的工具,帮助你一路前行。需要 "深入 "底层控制的程序员可以使用 Rust 实现这一目标,而不必承担崩溃或安全漏洞的传统风险,也不必学习善变工具链的细节。更妙的是,Rust 语言的设计会引导你自然而然地编写出可靠的代码,并提高速度和内存使用效率。
已经在使用底层代码的程序员可以使用 Rust 来提升他们的雄心壮志。例如,在 Rust 中引入并行性是一种风险相对较低的操作:编译器会帮你抓住经典错误。你可以在代码中进行更激进的优化。它的表现力和人体工程学足以让 CLI 应用程序、Web 服务器和许多其他类型的代码编写得非常愉快:你将在本书后面的章节中找到这两方面的简单示例。
使用 Rust 可以培养从一个领域转移到另一个领域的技能:你可以通过编写网络应用程序来学习 Rust,然后将这些技能用于 Raspberry Pi。
事实证明,Rust 是一种高效的工具,可用于由具备不同系统编程知识水平的开发人员组成的大型团队之间的协作。底层代码容易出现各种微妙的错误,而在大多数其他语言中,只有经验丰富的开发人员通过大量的测试和仔细的代码审查才能发现这些错误。在 Rust 中,编译器扮演着看门人的角色,拒绝编译存在这些难以捉摸的错误(包括并发错误)的代码。通过与编译器并肩作战,团队可以将时间集中在程序逻辑上,而不是追逐错误。
Rust 是专为那些渴望语言的速度和稳定性的人设计的。所谓速度,既指 Rust 代码的运行速度,也指 Rust 让你编写程序的速度。Rust 编译器的检查通过功能添加和重构来确保稳定性。与之形成鲜明对比的是,在没有这些检查的语言中,遗留代码非常脆弱,开发人员往往不敢修改。通过努力实现零成本抽象,即:高层特性编译成低层代码的速度与手动编写的代码一样快,Rust 致力于让安全代码也成为快速代码。
Rust 还为系统编程领域带来了现代开发人员工具:
- Cargo 是随附的依赖关系管理器和构建工具,它能让添加、编译和管理依赖关系变得简单,并在整个 Rust 生态系统中保持一致。
- Rustfmt 格式化工具可确保不同开发人员的编码风格保持一致。
- Rust 语言服务器支持集成开发环境 (IDE) 集成,可实现代码自动补全和内联错误信息。
随着软件开发的不断发展,人们开始寻求更安全、更高效的编程语言,这促使许多人开始考虑成熟的 C++ 之外的其他编程语言。Rust 注重内存安全、零成本抽象和并发性,已成为一种引人注目的选择。无论您是 C++ 开发人员,还是正在寻找更安全编程语言的公司,Rust 编程语言都能让您的技术达到新的高度。
在本指南中,我们将深入探讨 C++ 和 Rust 为何成为业界流行的主流,并比较它们的特点和优势。然后,我们将探讨希望学习 Rust 的 C++ 开发人员的最佳实践,并探讨希望转用 Rust 的公司应遵循的关键提示。
C++ 与 Rust:功能比较
C++ 和 Rust 是使用最广泛的两种编程语言,虽然新兴的 Rust 正在软件开发领域掀起波澜,但 C++ 绝对经受住了时间的考验。
分析公司 SlashData 的研究显示,Rust 是目前增长最快的语言,开发人员和公司必须考虑以下问题:为什么 Rust 如此受欢迎?C++ 开发人员如何适应这种不断变化的形势?
让我们深入探讨一下 C++ 和 Rust 之间的比较,以便更清楚地了解 Rust 为什么会成为许多人的首选:
① 内存安全
Rust 最根本的优势之一在于其内置的内存安全。由于 Rust 能够执行严格的所有权和借用规则,该语言成功地消除了常见的内存相关故障。Rust 以不易出现内存错误而著称,这也是许多人选择使用 Rust 的重要原因。另一方面,C++ 采用手动内存管理,因此更容易出现缓冲区溢出和空指针引用等与内存相关的错误。
② 语法
Rust 拥有简洁而现代的语法,并拥有多种现代语言特性,包括模式匹配和类型推断。该语言拥有一个富有表现力的类型系统,能够在编译时识别错误。相比之下,C++ 以其复杂的语法而闻名,这也是一些人不愿意学习它的原因。不过,C++ 拥有大量可以生成简洁代码的语言特性,如:模板和操作符重载。
③ 生态系统
鉴于 C++ 的历史比 Rust 长得多,它拥有更大的生态系统也就不足为奇了。C++ 语言拥有种类繁多的库和框架,所有这些库和框架都得到了 C++ 开发人员庞大社区的精心维护和定期测试。虽然 Rust 生态系统目前还没有 C++ 那么庞大,但它正在迅速发展,可供 Rust 开发人员使用的库和工具数量也在不断增加。
④ 性能
Rust 和 C++ 都能提供高性能的代码,它们的速度也广受赞誉。C++ 的速度可以超越 Python 和 Java 等其他语言,因为用 C++ 编写的程序可以直接编译成机器代码,在运行时无需任何翻译时间。虽然 C++ 的速度很快,但熟练的 Rust 开发人员通常能比 C++ 开发人员更快地编写代码,这主要归功于该语言的错误预防系统。
⑤ 并发性
Rust 的并发功能采用所有权模型,可防止数据竞争和引用空指针等并发错误,因此既安全又易于使用。C++ 拥有令人印象深刻的并发功能,可以说比 Rust 的并发功能更强大、用途更广泛,但它更容易出现并发错误,而且调试起来也很困难。归根结底,如果您更喜欢使用简单、安全的并发系统,那么 Rust 是更有利的选择。
C++ 开发人员学习 Rust 的最佳实践
您是一名 C++ 开发人员,现在决定过渡到 Rust :当然,您并不孤单。事实上,根据 2021 年的 Rust 调查,81% 的受访者声称每周都使用 Rust,而上一年调查的这一比例仅为 72%。这些数据表明,Rust 的使用率正在不断增长,而且鉴于这种语言预计在未来会变得更加流行,现在正是开发人员通过学习这种令人兴奋且前景广阔的语言来更新自己技能的大好时机。
然而,要熟练掌握 Rust 绝非易事,尤其是对于尚未熟悉 Rust 独特功能的 C++ 开发人员来说。以下是 C++ 开发人员在初次学习 Rust 时可能遇到的一些挑战:
Ⅰ. 陡峭的学习曲线;尽管 Rust 具有一系列有益的特性,但它也以学习曲线陡峭而著称。习惯了 C++ 自由性的开发人员可能会发现很难适应 Rust 的函数式编程概念。
Ⅱ. 没有那么多的库和框架;鉴于 Rust 是一种相对较新的语言,它没有像更传统的语言那样拥有那么多的库和框架,这是可以理解的。不过,习惯于利用各种资源的 C++ 开发人员可能会认为 Rust 的生态系统有限是一个痛点。
Ⅲ. 所有权和借用;Rust 拥有多种与众不同的特性,其中之一就是它的所有权和借用模型。由于 C++ 开发人员习惯于手动管理内存而不是依赖内存安全,他们可能会发现很难掌握 Rust 的所有权系统。
然这些常见的挑战一开始可能看起来难以驾驭,但如果你愿意投入时间和精力,学习 Rust 可能会是一次有趣而丰富的经历。学习者遇到磨合期的问题是很正常的,但只要记住 Rust 提供的各种优势,他们就会有信心,过渡到 Rust 的决定将使他们的开发事业受益匪浅并焕发新的活力。
让我们来探讨 C++ 开发人员应遵循的关键最佳实践,以增强他们的 Rust 学习体验:
① 识别 C++ 和 Rust 的相似之处
找出 C++ 和 Rust 之间的相似之处,可以让学习曲线变得更容易一些。正如我们前面所讨论的,这两种语言之间有很多相似之处,包括语法相似、没有垃圾回收和运行时。从这些方面开始学习,可能会让 C++ 和 Rust 之间的过渡更加顺畅。
② 掌握基础知识
在深入研究依赖树、借用检查器和生命周期等复杂的 Rust 主题之前,了解该语言的基本功能至关重要。你应该把初始学习的重点放在相对简单的概念上,如 Rust 的语法、数据类型、数字和所有权模型。
如果你觉得在理解语言基本原理方面需要帮助,请务必在 Rust subreddit 等论坛上联系 Rust 日益壮大的社区成员。
③ 迎接挑战
虽然学习一门全新的编程语言有时会令人沮丧,但重要的是要接受挑战并享受学习过程。请记住,Rust 越练越简单,一段时间后,你就会开始乐于发现更多有关 Rust 的概念。你还应该感到动力十足,因为学习 Rust 可能会帮助你在开发生涯中取得进步。
④ 充分利用现有资源
虽然 Rust 缺少像 C++ 那样的大量库和框架,但它仍然拥有大量有用的资源,可以增强你的 Rust 教育。Rust 官方网站上有各种教程和文档,旨在增强你的语言知识,而其活跃的社区论坛则是向经验丰富的 Rust 开发人员寻求帮助的绝佳场所。另一个重要资源是Rust Book,这是一本涵盖初级和高级概念的综合资源,其中的示例和练习可以帮助你进行实践。
⑤ 经常练习编写代码
坚持练习是学习任何知识的关键,尤其是像 Rust 这样的计算机编程语言。无论是绝对的初学者还是接近流利的程序员,都应该投入大量时间练习编写代码。您可以从简单的小项目开始,然后逐步提高到更复杂的项目。Rust by Practice 是一个测试 Rust 编程技能的好地方,这个平台允许学习者通过练习和项目来锻炼自己的 Rust 能力。
下一篇: 01-开始Rust之旅