Enough theory. Let's make Rust do something. The entire create-build-run loop is three cargo commands.
cargo new
cargo new hello-rust scaffolds a complete project: a Cargo.toml manifest, a src/main.rs with a working hello-world, and a git repo. You don't assemble a Rust project by hand — cargo does it.
The shape of a project
Cargo.toml is the manifest (name, version, edition, dependencies). src/main.rs is the entry point — its fn main() is where execution starts. Source lives under src/; build output lands in target/ (which you gitignore).
main and println!
Every executable has exactly one fn main(). println! prints a line — and that ! matters: it marks a macro, not a function. Macros can do things functions can't, like checking your format string at compile time. Type a wrong placeholder and it won't compile. (Macros get a whole track later.)
cargo run = build + run in one step. Use cargo run while developing, cargo build --release for an optimized binary, and cargo check when you just want to know "does it compile?" without waiting for a full build.The loop you'll live in
Edit src/main.rs, run cargo run, read the output (or the compiler error), repeat. That's the heartbeat of Rust development. Everything else — tests, dependencies, docs — hangs off the same cargo front door.