You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

53 lines
3.5 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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 异步编程
## 实战