1.0 简介
1.0. 简介
1.0.1. 为什么要使用Rust
-
Rust代码可靠且高效。
-
Rust可以代替C和C++。在具有相近性能的前提下,Rust比它们更安全。在实际编程中最明显的感受就是:Rust不需要像前两者那样写几行就编译一下查看是否报错。具体如下:
- 内存安全:无空指针解引用、悬空指针或数据竞争
- 线程安全:在程序运行之前就可以保证多线程代码是安全的
- 避免未定义行为:例如数组越界、未初始化的变量和使用已释放的内存
-
Rust提供了现代语言特性,如泛型、trait、模式匹配等。
-
Rust提供了更现代化的工具链。Rust的Cargo和Python的包管理工具(如pip)有着同一理念。用过C/C++的人都知道,这两个语言的依赖项配置比较麻烦,而Python的包管理工具十分灵活且简单。Cargo让Rust用户能在拥有C/C++级性能的同时,获得类似Python般令人舒适的依赖管理体验。
1.0.2 适用场景
-
需要运行速度:Rust既可以像C一样精细控制内存(通过
unsafe),也可以提供现代高级语言的便利性(如所有权系统和模式匹配)。Python是一种非常高级的语言,开发效率高,但牺牲了性能和控制。 -
需要内存安全:Rust通过编译时的静态检查,提供了强大的内存安全保证,这使其在需要避免内存错误的场景(如操作系统、嵌入式开发、网络服务器等)中极为适用。
-
需要高效利用多处理器:Rust为高效并发和多处理器编程提供了原生支持,而不牺牲安全性。这对于需要处理高吞吐量和并发任务的场景(如Web服务器、分布式系统、实时计算)尤其重要。
擅长的领域:
- Web服务
- WebAssembly (C#和Java的性能对比Rust和C/C++相形见绌)
- 命令行工具
- 网络编程
- 嵌入式设备
- 系统编程
1.0.3 与其他语言的对比
| 类别 | 语言 | 特点 |
|---|---|---|
| 机器语言 | 二进制指令 | 最接近硬件,由CPU直接执行 |
| 汇编语言 | Assembly | 使用助记符代替机器指令,如 MOV AX, BX |
| 低级语言 | C、C++ | 更贴近硬件,提供有限的抽象 |
| 中级语言 | Rust、Go | 性能接近低级语言,但提供了更高的抽象 |
| 高级语言 | Python、Java | 更高层次的抽象,易读易用 |
高级语言与低级语言并不是绝对对立的,而是一个连续的光谱:
- 更低级的语言提供更多的硬件控制能力,但编写代码复杂,开发效率低。
- 更高级的语言提供更多的抽象和自动化功能,但可能会引入运行时开销,失去对硬件的精细控制。
Rust的优点:
- 性能好
- 安全性高
- 极好的并发支持
Rust作为一种中级语言相比于其他语言有这些优势:
- C / C++性能非常好,但是不够安全;Rust能够做到在维持大致相同性能的前提下保证安全。
- Java / C#能保证内存安全(有GC垃圾回收程序),也有很多特性,但是性能不行;Rust不但拥有与之相媲美的安全性,而且性能还更强。
1.0.4. Rust的历史
Rust最早是Mozilla公司下的一个研究性项目,火狐(Firefox)浏览器就是其应用的重要例子。
Mozilla公司使用Rust创建了Servo实验性浏览器引擎(2012年启动,2016年发布首个预览版本),其组件被设计为并行运行。不幸的是,在2020年8月,Mozilla裁撤了大部分Servo开发团队。从2020年11月17日起,Servo由Linux基金会接管。目前Servo的部分功能已经被集成到火狐里了。
Firefox量子版包含了Servo的CSS渲染引擎。Rust使得Firefox获得了巨大的性能改进。
1.0.5. Rust的用户与案例
- Google: 操作系统Fuchsia,Rust代码量占30%
- Amazon: 基于Linux开发的、可以直接在裸机或虚拟机上运行容器的操作系统
- Redox OS: 纯Rust开发的下一代安全操作系统
- 斯坦福大学和密歇根大学: 嵌入式实时操作系统,应用于Google的加密产品
- 微软:使用Rust重写Windows系统中的一些低级组件
- 微软:WinRT/Rust项目