Happy New Year! 🇨🇳
开篇词|让Rust成为你的下一门主力语言
首先,你使用起来就会感受到,Rust 是一门非常重视开发者用户体验的语言。
其次,众所周知的优异性能和强大的表现力,让 Rust 在很多场合都能够施展拳脚。
最后,Rust 会越用越享受。
学习 Rust 的难点
Rust 被公认是很难学的语言,学习曲线很陡峭。
所以如果你想从其他语言迁移到 Rust,必须要经过一段时期的思维转换(Paradigm Shift)。
而 Rust 中最大的思维转换就是变量的所有权和生命周期,这是几乎所有编程语言都未曾涉及的领域。
- C 开发者,难点是类型系统和泛型编程;
- C++ 开发者,难点主要在类型系统;
- Python/Ruby/JavaScript 开发者,难点在并发处理,类型系统及泛型编程;
- Java 开发者,难点在异步处理和并发安全的理解上;
- Swift 开发者,几乎没有额外的难点,深入理解 Rust 异步处理即可。
如何学好 Rust?
- 精准学习
- 刻意练习
前置篇 (3讲)
01|内存:值放堆上还是放栈上,这是一个问题
let s = "hello world".to_string();
栈
栈是程序运行的基础。每当一个函数被调用时,一块连续的内存就会在栈顶被分配出来,这块内存被称为帧(frame)。
堆
栈虽然使用起来很高效,但它的局限也显而易见。当我们需要动态大小的内存时,只能使用堆,比如可变长度的数组、列表、哈希表、字典,它们都分配在堆上。
- 栈上存放的数据是静态的,固定大小,固定生命周期;
- 堆上存放的数据是动态的,不固定大小,不固定生命周期。
02|串讲:编程开发中,那些你需要掌握的基本概念
原生类型(primitive type)是编程语言提供的最基础的数据类型。
- 所有原生类型的大小都是固定的,因此它们可以被分配到栈上。
组合类型(composite type)或者说复合类型,是指由一组原生类型和其它类型组合而成的类型。 - 结构体(structure type):多个类型组合在一起共同表达一个值的复杂数据结构。比如 Person 结构体,内部包含 name、age、email 等信息。用代数数据类型(algebraic data type)的说法,结构体是 product type。
- 标签联合(tagged union):也叫不相交并集(disjoint union),可以存储一组不同但固定的类型中的某个类型的对象,具体是哪个类型由其标签决定。比如 Haskell 里的 Maybe 类型,或者 Swift 中的 Optional 就是标签联合。用代数数据类型的说法,标签联合是 sum type。
函数、方法和闭包
接口和虚表
接口是一个软件系统开发的核心部分,它反映了系统的设计者对系统的抽象理解。作为一个抽象层,接口将使用方和实现方隔离开来,使两者不直接有依赖关系,大大提高了复用性和扩展性。
并发(concurrency)与并行(parallel)
同步和异步
对比了 CPU、内存、I/O 设备、和网络的延迟
代码缺陷
参考资料
- 配合课程使用:官方的 Rust book、微软推出的一系列 Rust 培训 Beginner’s Series to: Rust、英文书 Programming Rust 查漏补缺
- 学完课程后进阶学习:官方的 Rust 死灵书(The Rustonomicon)、每月一期的 Rust 语言开源杂志、 Jon Gjengset 的 YouTube 频道、张汉东的《Rust 编程之道》、我的 B 站上的“程序君的 Rust 培训”系列。
- 学有余力的练习:Rust 代码的文档系统 docs.rs 、小练习 rustlings
- 社区动态:博客 This week in Rust 、公众号 Rust 语言中文社区、 公众号 Rust 碎碎念