Program
Customization of the program
Some sections are labeled as [OPT]ional. They cover topics that participants will be fine learning about on their own using what they learnt during the course. They can do so either from the course's material (which include exercices for all optional sections) and/or from alternative resources online. These sections are optional because there is simply not enough time to cover everything in three days. Different clients will want to prioritize different concepts, which is why we propose to tailor the course; it can either contain
- all optional sections: the trainer will present them without the exercises;
- one optional section: fully presented, with exercises;
- a tailored version of the above, to discuss before training starts.
Alternatively, clients can elect not to include any optional section. While this can sound like a net loss, trainers adapt the speed at which they introduce notions and conduct exercises in real time. Not having any optional section gives more time to discuss Rust's fundamental and advanced concepts, and practice them. As mentioned already, none of the optional sections are very difficult to dive in for anyone with a good grasp on Rust's main concepts. As a consequence it might be more efficient to take the time to build solid foundations.
[OPT] Declarative macros
- Writing a declarative macro
- Visibility
- Hygiene
Advanced traits
- Trait coherence rule
- Fundamental traits from the standard library
- Complex trait bounds
Advanced ownership
- Dive into borrow rules
- Lifetime subtyping
- Storing references
- Implementing traits for references
More basic (niche) notions
- Global state: const and static
- Turbo fish
Type size and boxing
- Sized types and DSTs
- Algebraic datatypes
- Reference counting
Collections
- Fundamental types: Vec, HashMap, BTreeMap
- Fundamental traits: Iterator, IntoIterator, Collect
Interior Mutability
- Detailed discussion of RefCell
- RefCell limitations (using rayon)
[OPT] Single Dispatch
- Trait objects
- Heterogeneous collections
- Lifetime bounds for trait objects
Fearless Concurrency
- Rc and Arc
- Send and Sync
- Spawning threads and passing messages
[OPT] Unsafe Rust and FFI
- Unsafe powers
- Raw pointers
- Unsafe functions and traits
- FFI basics
- Calling Rust from C and C from Rust