# Rust ## 0. 目录 ## 1. 背景 ### 1.1 前置知识 - 使用合适的工具解决合适的问题 - 首先,你使用起来就会感受到,**Rust 是一门非常重视开发者用户体验的语言** - 一门语言的编译器在告知你的代码错误的同时,还会极尽可能,给你推荐正确的代码。 - 这种程度的体验,一旦你适应了 Rust,就很难离得开。Rust 语言的这种极致用户体验不仅仅反映在编译器上,整个语言的工具链包括 rustup、cargo 等,都是如此简单易用、善解人意。 - 众所周知的优异性能和强大的表现力,让 Rust 在很多场合都能够施展拳脚 - 截止 2021 年,主流的互联网公司都把 Rust 纳入主力语言,比如开发操作系统Redox/Fuchsia、高性能网络 Tokio、应用的高并发后端 TiKV,甚至客户端软件本身(飞书) - Rust 除了在其传统的系统开发领域,如操作系统、设备驱动、嵌入式等方向高歌猛进之外,还在服务端高性能、高并发场景遍地开花。 - 公司都是业务层面驱动自然使用到 Rust 的 - 比如 Discord 原先使用 Golang 的状态服务,一来会消耗大量的内存,二来在高峰期时不时会因为垃圾回收导致巨大的延迟,痛定思痛后,他们选用 Rust 重写。 - 官方说法,Rust 除了带来性能上的提升外,还让随着产品迭代进行的代码重构变得举重若轻。 - 学习 Rust 的难点 - Rust 被公认是很难学的语言,学习曲线很陡峭。 - 所以如果你想从其他语言迁移到 Rust,必须要经过一段时期的思维转换(Paradigm Shift)。 - 从命令式(imperative)编程语言转换到函数式(functional)编程语言、从变量的可变性(mutable)迁移到不可变性(immutable)、从弱类型语言迁移到强类型语言,以及 从手工或者自动内存管理到通过生命周期来管理内存,难度是多重叠加 - Rust 中最大的思维转换就是**变量的所有权和生命周期** - 在所有权和生命周期之外,语言背景不同的工程师也会有不同难点,你可以重点学习: - C 开发者,难点是类型系统和泛型编程; - C++ 开发者,难点主要在类型系统; - Python/Ruby/JavaScript 开发者,难点在并发处理,类型系统及泛型编程; - Java 开发者,难点在异步处理和并发安全的理解上; - Swift 开发者,几乎没有额外的难点,深入理解 Rust 异步处理即可。 - 从语言的内核来看,它重塑了我们对一些基本概念的理解。比如 Rust 清晰地定义了变量在一个作用域下的生命周期,让开发者在摒弃垃圾回收(GC)这样的内存和性能杀手的前提 下,还能够无需关心手动内存管理,让内存安全和高性能二者兼得。 - 从语言的外观来看,它使用起来感觉很像 Python/TypeScript 这样的高级语言,表达能力一流,但性能丝毫不输于 C/C++,从而让表达力和高性能二者兼得。 - 如何学好 Rust? - 精准学习 + 刻意练习 - 所谓精准学习,就是深挖一个个高大上的表层知识点,回归底层基础知识的本原,再使用类比、联想等方法,打通涉及的基础知识;然后从底层设计往表层实现,一层层构建知识 体系,这样“撒一层土,夯实,再撒一层”,让你对知识点理解得更透彻、掌握得牢固。 ## 2. Rust 基础 ## Rust 核心概念 ## Rust 异步编程 ## 实战