探索Rust编程之道:从设计哲学到内存安全的学习笔记在编程世界中,Rust以其内存安全、零成本抽象和高性能的特性迅速崛起,成为系统级编程的新宠。《Rust编程之道》不仅是一本技术书籍,更是一场探索Rust设计哲学与实践的旅程。本文将带你走进Rust的世界,从其语言特性到内存管理,梳理核心概念,助你
在编程世界中,Rust以其内存安全、零成本抽象和高性能的特性迅速崛起,成为系统级编程的新宠。《Rust编程之道》不仅是一本技术书籍,更是一场探索Rust设计哲学与实践的旅程。本文将带你走进Rust的世界,从其语言特性到内存管理,梳理核心概念,助你快速上手这门新时代的编程语言!
本文基于《Rust编程之道》整理的学习笔记,深入剖析了Rust语言的主要特性,包括内存安全、零成本抽象和线程安全等设计哲学。文章从Rust的语言背景、设计理念入手,结合类型系统、所有权机制和并发模型,系统梳理了Rust的核心知识点。通过对《Rust编程之道》的章节概述和第一章内容的提炼,帮助读者理解Rust为何成为现代系统编程的首选语言,并为进一步学习提供清晰路径。
Rust是一门现代系统级编程语言,具备以下核心特性:
这些特性使Rust在区块链、游戏、WebAssembly、机器学习等领域得到广泛应用。
何谓快乐?真正的快乐不仅仅是写代码时的“酸爽”,更应该是代码部署到生产环境之后的“安稳”。
Rust语言对程序的三定律支持的恰到好处。 Rust通过类型系统、所有权机制和编译期检查,完美支持这三大定律,确保程序“正确、可维护、高效”。
目前Rust被陆续应用在区块链、游戏、WebAssembly 技术、机器学习,分布式数据库、网络服务基础设施、Web框架、操作系统和嵌入式等领域。
Rust 学习曲线陡的根本原因在于 Rust 语言融合了多种语言特性和多种编程范式。
从Rust 的设计哲学出发,牢牢把握它的设计一致性,就可以把它的所有特性都串起来,从而达到掌握它的目的。
第一章 新时代的语言
第二章 语言精要
第三章 类型系统
第四章 内存管理
第五章 所有权系统
第六章 函数、闭包和迭代器
第七章 结构化编程
第八章 字符串与集合类型
第九章 构建健壮的程序
第十章 模块化编程
第十一章 安全并发
第十二章 元编程
第十三章 超越安全的边界
不谋全局者,不足谋一域。
一门好的语言是有内涵哲学的语言,它表里如一,有所想,有所为。
Ada 语言
2006 年,自称 “职业编程语言工程师” 的 Graydon Hoare(简称为 GH),开始开发一门名为 Rust 的编程语言。
什么是 “职业编程语言工程师”?用 GH 自己的话说,职业编程语言工程师的日常工作就是给其他语言开发编译器和工具集,但并未参与这些语言本身的设计。
Rust 是一门同时追求安全、并发和性能的现代系统级编程语言。
有些事现在不做,一辈子都没机会再做了。 -- 练习曲[2006]
“程序即类型证明”
简单来说,类型安全是指类型系统可以保证程序的行为是意义明确、不出错的。
未定义行为(Undefined Behavior):发生了语言规范规定之外的行为。
Rust语言如果想保证内存安全,首先要做的就是保证类型安全。
类型安全的语言:OCaml、Haskell
类型系统的作用是定义编程语言中值和表达式的类型,将它们归类,赋予它们不同的行为,指导它们如何相互作用。
什么是内存安全?简单来说,就是不会出现内存访问错误。
只有当程序访问未定义内存的时候才会产生内存错误。
一般来说,发生以下几种情况就会产生内存错误:
Rust 编译器可以在编译期对类型进行检查,看其是否满足安全内存模型,在编译器就能发现内存不安全问题,有效地阻止未定义行为的发生。
Rust 编译器会通过静态检查分析,在编译器就检查出多线程并发代码中所有的数据竞争问题。
Rust 的抽象并不会存在运行时性能开销,这一切都是在编译期完成的。
Rust 中零成本抽象的基石就是泛型和Trait。
如何评价一门编程语言的实用性?
日常开发中一般有三类非正常情况:失败、错误和异常。
Rust 语言针对这三类非正常情况分别提供了专门的处理方式,让开发者可以分情况去选择。
Safe Rust 表示开发者将信任编译器能够在编译时保证安全,而 Unsafe Rust 表示让编译器信任开发者有能力保证安全。
Rust 代码是以包(crate)为编译和分发单位的
2015年,Rust发布1.0版本
2018年,Rust团队推出了新的大版本(edition)计划
Rust 2015 版本
Rust 2018 版本
Rust 2021 版本
Rust 2024 版本
Rust的编译器可以方便地管理版本的兼容性
Rust 团队维护三个发行分支:稳定版(Stable)、测试版(Beta)和开发版(Nightly)。
其中稳定版和测试版每6周发布一次。
标记为不稳定(Unstable)和特性开关(Feature Gate)的语言特性或标准库特性只能在开发版中使用。
Rust 编译器是一个编译前端,它的工作是对代码进行词法分析、语法分析、类型检查、生成中间代码、进行独立于目标机器的优化等工作。
使用 LLVM 作为编译器后端代码生成框架,则可以利用 LLVM 兼容多个目标机器的特性,实现跨平台编译和优化等工作。
在用户使用Rust时,大多数时候无须考虑各个目标机器平台的特有性质,基本上可以做到一次编写,到处运行。
Rust 源码经过分词和解析,生成AST(抽象语法树)。
然后把 AST 进一步简化处理为 HIR(High-level IR),目的是让编译器更方便地做类型检查。
HIR 会进一步被编译为 MIR(Middle IR),这是一种中间表示。
最终,MIR 会被翻译为 LLVM IR,然后被 LLVM 的处理编译为能在各个平台上运行的目标机器码。
Rust作为一门追求安全、并发和性能的现代系统级编程语言,其设计哲学和内存管理模型为开发者提供了强大的工具和保障。通过本文的学习笔记,我们不仅了解了Rust的语言特性、设计理念,还掌握了其类型系统、所有权机制和并发模型的核心思想。希望这些内容能为你的Rust学习之旅提供坚实的基础,助你在编程之路上更进一步!
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!