Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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项目