Rust Incubator
It wasn’t always so clear, but the Rust programming language is fundamentally about empowerment: no matter what kind of code you are writing now, Rust empowers you to reach farther, to program with confidence in a wider variety of domains than you did before.
Rust Book's Foreword
This project represents a hard-way step-by-step Rust learning course from language basics to a capability of web backend development.
Prerequisites
Toolchain
- rustup for installing Rust toolchain and keeping it up-to-date.
- CLion/IntelliJ IDEA + IntelliJ Rust + Toml plugins as development environment (or any other on your choice).
Bookshelf
- Rust Book teaches and explains Rust basics.
- Rust By Example teaches you Rust basics using editable examples.
- Rust Reference is not a formal spec, but is more detailed and comprehensive than the Rust Book.
- Cheats.rs and Rust SVG Cheatsheet for quick reference.
- Rust Edition Guide for considering improvements of Rust 2018.
- Rust std lib documentation.
- Cargo Book is a guide to Cargo, Rust's build tool and dependency manager.
- Rustdoc Book is a guide to
rustdoc
documentation tool. - Rust Cookbook is a collection of simple examples that demonstrate good practices to accomplish common programming tasks, using the crates of the Rust ecosystem.
- Rust Design Patterns is an open source repository of Rust design patterns and idioms.
- Rust API Guidelines is a set of recommendations on how to design and present APIs for Rust.
- Rust FAQ answers common question about Rust.
- Rust Playground allows to share and check runnable Rust code snippets online.
- Awesome Rust is a curated list of Rust code and resources.
- This Week in Rust represents handpicked and subscribable Rust weekly updates.
- Baby Steps blog of Nicholas Matsakis shares useful Rust patterns, ideas and design decisions.
Steps
Before you start
- Create a new GitHub repository for yourself using this one as template.
- Invite as a collaborator of your repository the person you want to review your lessons (lead).
Schedule
Each step must be performed as a separate PR (pull request) with an appropriate name and checked here in README's schedule after completion. Each step is a Cargo workspace member, so you can run/test it from a project root (i.e. cargo run -p step_1_8
). Consider to use rustfmt and Clippy when you're writing Rust code.
Each step has estimated time for being completed. If any deeper investigation on step's theme is required for you, then it's on your own.
Do not hesitate to ask your lead with questions, however you won't receive a concrete answer, but rather a direction for investigation. Lead is the one who asks questions about everything here and demands a concrete answers.
- 0. Become familiar with Rust basics (3 days)
- 1. Concepts (2 days)
- 1.1. Default values, cloning and copying (1 day)
- 1.2. Boxing and pinning (1 day)
- 1.3. Shared ownership and interior mutability (1 day)
- 1.4. Clone-on-write (1 day)
- 1.5. Conversions, casting and dereferencing (1 day)
- 1.6. Static and dynamic dispatch (1 day)
- 1.7.
Sized
and?Sized
types (1 day) - 1.8. Thread safety (1 day)
- 1.9. Phantom types (1 day)
- 2. Idioms (2 days)
- 3. Ecosystem (5 days)
- 3.1. Testing and mocking (1 day)
- 3.2. Declarative and procedural macros (1 day)
- 3.3. Date and time (1 day)
- 3.4. Regular expressions and custom parsers (1 day)
- 3.5. Collections and iterators (1 day)
- 3.6. Serialization and deserialization (1 day)
- 3.7. Randomness and cryptography (1 day)
- 3.8. Logging (1 day)
- 3.9. Command-line arguments, environment variables and configs (1 day)
- 3.10. Multithreading and parallelism (1 day)
- 3.11. Async I/O, futures and actors (2 days)
- 3.12. Web frameworks, databases, connection pools and ORMs (1 day)