Rust vs. other popular languages
2 Project management with Cargo
Creating a new application or library
Building, running, and testing
Best practices for dependency patching
Building statically linked binaries
Code examples in documentation
2.12 Rust projects in embedded environments
3.2 Using rust-analyzer for Rust IDE integration
3.3 Using rustfmt to keep code tidy
3.4 Using Clippy to improve code quality
Automatically applying Clippy’s suggestions
3.5 Reducing compile times with sccache
3.6 Integration with IDEs, including Visual Studio Code
3.7 Using toolchains: Stable vs. nightly
Using nightly on published crates
3.8 Additional tools: cargo-update, cargo-expand, cargo-fuzz, cargo-watch, cargo-tree
Keeping packages up to date date with cargo-update
Debugging macros with cargo-expand
Examining dependencies with cargo-tree
4.1 Demystifying String, str, &str, and &'static str
4.2 Understanding slices and arrays
4.5 Rust types: Primitives, structs, enums, and aliases
4.6 Error handling with Result
4.7 Converting types with From/Into
Best practices for type conversion using From and Into
4.8 Handling FFI compatibility with Rust’s types
5.1 Memory management: Heap and stack
5.2 Understanding ownership: Copies, borrowing, references, and moves
5.5 To box or not to box: Smart pointers
Creating a custom allocator for protected memory
6.1 How testing is different in Rust
6.2 Review of built-in testing features
6.4 What not to test: Why the compiler knows better than you
6.5 Handling parallel test special cases and global state
6.6 Thinking about refactoring
6.9 Dealing with a changing ecosystem
7.1 Comparing integration and unit testing
7.2 Integration testing strategies
7.3 Built-in integration testing vs. external integration testing
7.4 Integration testing libraries and tooling
Using assert_cmd to test CLI applications
Using proptest with integration tests
Other integration testing tools
8.3 Futures: Handling async task results
Defining a runtime with #[tokio::main]
8.4 The async and .await keywords: When and where to use them
8.5 Concurrency and parallelism with async
8.6 Implementing an async observer
8.9 Tracing and debugging async code
8.10 Dealing with async when testing
9 Building an HTTP REST API service
9.8 Implementing the API routes
10 Building an HTTP REST API CLI
10.1 Deciding which tools and libraries to use
10.4 Implementing the commands
10.6 Handling errors gracefully
Fast copies with Vec and slices
11.4 Parallelization with Rayon
11.5 Using Rust to accelerate other languages
11.7 Installing tools for this book
Installing tools on macOS using Homebrew
Installing tools on Linux systems
Installing rustup on Linux- or UNIX-based systems
11.8 Managing rustc and other Rust components with rustup
Installing rustc and other components