2.18 Summary
In this chapter, we explored the basic structure and organization of Rust programs, highlighting both the similarities and differences with C. We covered:
- Compilation and Cargo: How Rust compiles to an executable binary and how Cargo streamlines building and dependency management.
- Program Structure: The default layout of Rust programs, including modules, functions, types, and
usestatements. mainFunction: Rust’s entry point and its relationship to C’smain.- Variables and Mutability: Rust’s immutable-by-default approach, with the
mutkeyword for explicitly mutable variables. - Data Types: Fixed-width numeric types, booleans, and Rust’s Unicode-based
char. - Constants and Statics: How to declare compile-time constants and static variables.
- Functions and Control Flow: Defining functions, using
if,while,for, and theloopconstruct. - Modules and Crates: Organizing code into modules and compiling it into either binary or library crates.
useand Namespacing: Precisely importing items into scope, in contrast to C’s preprocessor includes.- Traits: Abstracting shared behavior without using function pointers or manual vtables.
- Macros: Safe, flexible compile-time code generation that goes beyond C’s macro system.
- Error Handling: Employing
ResultandOptioninstead of exceptions or ambiguous error codes. - Memory Safety: Ownership and borrowing rules that prevent common memory issues at compile time.
- Expressions vs. Statements: Rust’s expression-based syntax, which differs from C’s more rigid approach.
- Style and Documentation: Naming conventions, formatting with
rustfmt, and documentation viarustdoc. - Async Support: Rust’s
async/awaitmodel and safe concurrency powered by crates liketokio.
Each of these elements contributes to Rust’s focus on safety, performance, and concurrency. Understanding them provides a solid foundation for more advanced topics such as ownership, lifetimes, and multi-threaded programming. The next chapters will delve deeper into these areas, illustrating how Rust’s unique features further distinguish it from C and other systems languages.