rust初次实践
Rust 是一门现代的、开源的系统编程语言,其设计的核心目标是同时实现安全(Safety)、并发(Concurrency)和性能(Performance)。它通过在编译时强制执行一系列严格的规则,来消除一整类常见的内存错误(如空指针、悬垂指针、数据竞争等),而无需像 Java 或 Go 那样依赖垃圾回收器(Garbage Collector)。
Rust 就像一位拥有 “ 魔法钥匙 “ 的贴身管家:任何时候,一件珍贵的物品(一块内存数据)要么只能由一个人持有 “ 主钥匙 “(可写入权限),要么可以被多个人持有 “ 复制钥匙 “(只读权限),但绝不允许 “ 主钥匙 “ 和任何 “ 复制钥匙 “ 同时存在。这位管家(编译器)在你的程序 “ 运行 “ 之前,就会严格检查所有钥匙的分配,确保万无一失。
1. 介绍
1.1 历史发展
系统软件领域的 “ 不可能三角 “:高性能、高安全性、高生产力,通常我们只能三选二。
- C/C++ 选择了高性能,但牺牲了安全性,导致了无数的内存安全漏洞。
- Java/C#/Go 选择了安全性(通过垃圾回收)和高生产力,但在一定程度上牺牲了极致的性能和内存控制。
Rust 的重要性在于,它正面挑战了这个 “ 不可能三角 “。它解决了 C/C++ 长期存在的内存安全和数据竞争问题,同时提供了与之媲美的性能和底层控制力。这意味着你可以构建像操作系统、数据库、浏览器引擎这样对性能和可靠性要求极高的软件,而不用再为那些臭名昭著的 segmentation fault
或线程安全问题彻夜难眠。
Rust 的开发最早可以追溯到 2006 年,当时 Mozilla 的员工 Graydon Hoare 开始了这个项目,作为个人兴趣。2015 年 5 月,Rust 1.0 正式发布。
特性 | Rust | Go | C++ |
---|---|---|---|
核心哲学 | 零成本抽象,编译期安全 | 简洁、高效并发,工程化 | 掌控一切,相信程序员 |
内存管理 | 所有权系统 (编译期) | 垃圾回收 (GC, 运行时) | 手动管理 (new /delete ) |
性能 | 顶尖,与 C++ 相当 | 优秀,但受 GC 停顿影响 | 顶尖,直接控制硬件 |
并发模型 | 无畏并发 (所有权防止数据竞争) | Goroutines + Channels (非常易用) | 多线程 + 锁 (强大但极易出错) |
安全性 | 极高,在编译期消除内存和线程安全问题 | 高,GC 避免内存泄漏,但仍有其他风险 | 低,充满了未定义行为和安全漏洞的风险 |
学习曲线 | 陡峭,所有权和生命周期是难点 | 平缓,语法简单 | 非常陡峭,特性复杂且历史包袱重 |
适用场景 | 操作系统、嵌入式、游戏引擎、WebAssembly、高性能后端 | 网络服务、微服务、云原生工具链 | 游戏引擎、桌面应用、高性能计算、金融交易 |
1.2 语言特点
Rust 的魔法核心在于其 所有权系统(Ownership System),它由三个关联的概念组成,并在编译期由借用检查器(Borrow Checker)强制执行。
- 所有权 (Ownership):
- Rust 中的每个值都有一个被称为其所有者(owner)的变量。
- 值在任何时刻都只能有一个所有者。
- 当所有者离开作用域(scope)时,该值将被自动清理(drop)。
let s1 = String::from("hello"); let s2 = s1;
//s1
的所有权被移动到s2
,s1
不再有效。
- 借用 (Borrowing):
- 如果你不想转移所有权,可以 “ 借用 “ 一个值。这通过引用(reference)实现。
- 不可变借用 (Immutable Borrow):
&T
。你可以拥有任意多个不可变借用,但此时不能有可变借用。大家都可以看(只读)。 - 可变借用 (Mutable Borrow):
&mut T
。你只能有一个可变借用,且此时不能有任何其他借用。只有一个人能改(读写)。
- 生命周期 (Lifetimes):
- 这是一个稍高级的概念,是编译器用来确保所有借用都有效的工具。它保证了引用指向的数据在引用被使用期间绝对不会被释放掉,从而杜绝了 “ 悬垂指针 “。
1.3 能用来干什么
- 系统编程:Rust 可以用来编写操作系统内核、驱动程序和嵌入式系统,因为它提供了对硬件和系统资源的精细控制。
- Web 开发:Rust 在 Web 开发中的应用越来越广泛,尤其是通过框架如 Rocket、Actix 和 Axum。Rust 编写的 Web 应用可以同时具有高性能和安全性。
- CLI 工具:Rust 被广泛用于开发命令行工具,因为它可以编写快速且可靠的工具。例如,许多流行的命令行应用,如 ripgrep、exa 等,都是用 Rust 编写的。
- 游戏开发:Rust 可以用于游戏开发,尤其是需要高性能和低延迟的场景。Amethyst 等游戏引擎就是基于 Rust 的。
- 区块链和加密货币:Rust 在区块链和加密货币领域也有应用,特别是在需要高性能和安全性保证的智能合约和去中心化应用中。
- 嵌入式系统:Rust 适合用于嵌入式系统编程,因为它能够在资源受限的环境中提供安全和高效的代码。
2. 初探
2.1 安装使用
1 | # 安装 |
Rust 将被安装在 ~/.cargo/bin
目录下。
2.2 创建项目
1 | cargo new hello-rust |
- Cargo.toml 为 Rust 的清单文件。其中包含了项目的元数据和依赖库。
- https://crates.io/ 可以查找 Rust 包的仓库
2.3 项目初探
Cargo.toml 增加依赖
1 | [dependencies] |
代码
1 | use ferris_says::say; |
执行
1 | cargo run |
3. 提问问题
- 单个 rs 文件怎么运行
1 | rustc main.rs |