- Introduction
- 1. Lab 01: Unsafe system programming
- 1.1. Development setup
- 1.2. Memory unsafety
- 1.3. Smashing the stack
- 2. Lab 02: Hardening system programming
- 2.1. Unit testing
- 2.2. Stack overflow detection
- 2.3. Memory leak detection
- 3. Lab 03: Rust and references
- 3.1. Your first Rust program
- 3.2. Using a Rust tutorial
- 3.3. References
- 3.4. Lifetimes
- 3.5. Lifetimes: a complex case
- 4. Lab 04: Error handling
- 4.1. Web page retrieval
- 4.2. Name identification
- 4.3. Sets intersection
- 4.4. File system
- 4.5. Easier errors
- 4.6. Prettier messages
- 4.7. Even prettier messages
- 5. Lab 05: Complex data structures
- 5.1. Recursive data structures
- 5.2. Solving common tasks with traits
- 5.3. Refactoring with iterators
- 5.4. Going generic
- 6. Lab 06: Packaging, testing, and fuzzing
- 6.1. Packaging
- 6.2. Testing
- 6.3. Property testing
- 6.4. Fuzzing
- 7. Lab 07: Unsafe, FFI, procedural macros
- 7.1. FFI: Foreign library setup
- 7.2. FFI: Low-level bindings
- 7.3. FFI: Testing the bindings
- 7.4. FFI: High-level bindings
- 7.5. Macros: Setup
- 7.6. Macros: English-to-French
- 7.7. Macros: Chaining computations
- 7.8. Macros: Secure token
- 8. Lab 08: Parallelism
- 8.1. Counting characters
- 8.2. Getting big
- 8.3. Parallel computing
- 8.4. Benchmarking
- 8.5. If you have more time
- 9. Lab 09: Asynchronous programming
- 9.1. An asynchronous client
- 9.2. An asynchronous server