Happy New Year! 🇨🇳

开篇词|让Rust成为你的下一门主力语言

首先,你使用起来就会感受到,Rust 是一门非常重视开发者用户体验的语言。
其次,众所周知的优异性能和强大的表现力,让 Rust 在很多场合都能够施展拳脚。

usage
最后,Rust 会越用越享受。

学习 Rust 的难点

Rust 被公认是很难学的语言,学习曲线很陡峭。
所以如果你想从其他语言迁移到 Rust,必须要经过一段时期的思维转换(Paradigm Shift)。
而 Rust 中最大的思维转换就是变量的所有权和生命周期,这是几乎所有编程语言都未曾涉及的领域。

  • C 开发者,难点是类型系统和泛型编程;
  • C++ 开发者,难点主要在类型系统;
  • Python/Ruby/JavaScript 开发者,难点在并发处理,类型系统及泛型编程;
  • Java 开发者,难点在异步处理和并发安全的理解上;
  • Swift 开发者,几乎没有额外的难点,深入理解 Rust 异步处理即可。

如何学好 Rust?

  • 精准学习
  • 刻意练习
    practise

前置篇 (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 设备、和网络的延迟

代码缺陷



参考资料

  1. 配合课程使用:官方的 Rust book、微软推出的一系列 Rust 培训 Beginner’s Series to: Rust、英文书 Programming Rust 查漏补缺
  2. 学完课程后进阶学习:官方的 Rust 死灵书(The Rustonomicon)、每月一期的 Rust 语言开源杂志、 Jon Gjengset 的 YouTube 频道、张汉东的《Rust 编程之道》、我的 B 站上的“程序君的 Rust 培训”系列。
  3. 学有余力的练习:Rust 代码的文档系统 docs.rs 、小练习 rustlings
  4. 社区动态:博客 This week in Rust 、公众号 Rust 语言中文社区、 公众号 Rust 碎碎念

基础篇 (21讲)

期中周 (2讲)

进阶篇 (11讲)

并发篇 (11讲)

实战篇 (7讲)

结束语 (2讲)

参考: