What is Rust?
Rust is a systems programming language. You use it when a program has to sit close to memory, the CPU, and threads, and you still want the compiler to reject the bugs that C and C++ leave for runtime.
Checked before it runs
You write source files. rustc, driven by Cargo, checks types, ownership, and lifetimes. If those checks pass, the compiler emits a native binary. There is no virtual machine and no garbage collector in the running program.
That split is the whole pitch. Compile time is where Rust is strict. Runtime is where the program is fast, and where whole classes of crashes have already been refused.
A Rust program starts as ordinary source files. Nothing is running yet.
Why teams pick it
Memory safety without a garbage-collector pause. Predictable speed, because a high-level abstraction is supposed to compile down to the same tight code you would have written by hand. Concurrency that the type system can reject when two threads would race. And a toolchain you live in: Cargo, rustfmt, clippy, and rust-analyzer.
Languages trade how close you sit to memory for how many ways the program can hurt itself.
Where it shows up
Command-line tools, HTTP and gRPC backends, embedded devices, proxies and databases, and WebAssembly at the edge. The lessons below stay on the language itself: the rules you need before any of those frameworks make sense.
Read them in the numbered order. Do not skip ahead. Bindings and control flow come first, then ownership. Structs and enums come before errors, because Result is an enum. Collections, modules, generics, and lifetimes each wait until the previous idea is already on the page. Threads wait until shared owners exist. Async waits until threads do.
Lessons
Each row is one lesson. Open it and the files from that folder become sections on the same page, with a diagram where the idea is something you should be able to picture.
| # | Lesson | What you learn |
|---|---|---|
| 01 | Getting Started | Install the toolchain, meet Cargo, and learn the shapes of a small program. |
| 02 | Data and Control | Bindings, numbers, tuples, arrays, functions, and match. |
| 03 | Ownership and Borrowing | One owner, moves, borrows, slices, and Drop. Read this twice. |
| 04 | Structs and Enums | Methods, Option, pattern matching, receivers, and newtypes. |
| 05 | Error Handling | Result, the question mark, typed errors, and when a panic is honest. |
| 06 | Collections | Vec, HashMap, String versus str, Cow, and paths. |
| 07 | Modules and Packages | Visibility, use paths, features, and workspaces. |
| 08 | Generics and Traits | Bounds, trait objects, the traits you see every day, and macros you can read. |
| 09 | Lifetimes | How long a borrow is allowed to live, and how to keep that shorter than the data. |
| 10 | Closures and Iterators | Captures, then lazy chains that filter, map, and collect. |
| 11 | Smart Pointers | Box, Rc with RefCell, and Arc with Mutex. |
| 12 | Concurrency | Threads, Send and Sync, and channels that move values across threads. |
| 13 | Async and Await | Lazy futures, a runtime that polls them, streams, and select. |
| 14 | Unsafe and FFI | A small unsafe boundary, and how ownership works when C is on the other side. |
| 15 | Testing | Unit, integration, and doc tests, plus fakes for time and collaborators. |
| 16 | Production Patterns | Layout, config, tracing, API errors, clippy, and shutdown. |