The Rust Programming Language
Foreword
Introduction
1.
Getting Started
1.1.
Installation
1.2.
Hello, World!
1.3.
Hello, Cargo!
2.
Programming a Guessing Game
3.
Common Programming Concepts
3.1.
Variables and Mutability
3.2.
Data Types
3.3.
Functions
3.4.
Comments
3.5.
Control Flow
4.
Understanding Ownership
4.1.
What is Ownership?
4.2.
References and Borrowing
4.3.
The Slice Type
5.
Using Structs to Structure Related Data
5.1.
Defining and Instantiating Structs
5.2.
An Example Program Using Structs
5.3.
Method Syntax
6.
Enums and Pattern Matching
6.1.
Defining an Enum
6.2.
The match Control Flow Construct
6.3.
Concise Control Flow with if let
7.
Managing Growing Projects with Packages, Crates, and Modules
7.1.
Packages and Crates
7.2.
Defining Modules to Control Scope and Privacy
7.3.
Paths for Referring to an Item in the Module Tree
7.4.
Bringing Paths Into Scope with the use Keyword
7.5.
Separating Modules into Different Files
8.
Common Collections
8.1.
Storing Lists of Values with Vectors
8.2.
Storing UTF-8 Encoded Text with Strings
8.3.
Storing Keys with Associated Values in Hash Maps
9.
Error Handling
9.1.
Unrecoverable Errors with panic!
9.2.
Recoverable Errors with Result
9.3.
To panic! or Not to panic!
10.
Generic Types, Traits, and Lifetimes
10.1.
Generic Data Types
10.2.
Traits: Defining Shared Behavior
10.3.
Validating References with Lifetimes
11.
Writing Automated Tests
11.1.
How to Write Tests
11.2.
Controlling How Tests Are Run
11.3.
Test Organization
12.
An I/O Project: Building a Command Line Program
12.1.
Accepting Command Line Arguments
12.2.
Reading a File
12.3.
Refactoring to Improve Modularity and Error Handling
12.4.
Developing the Library’s Functionality with Test Driven Development
12.5.
Working with Environment Variables
12.6.
Writing Error Messages to Standard Error Instead of Standard Output
13.
Functional Language Features: Iterators and Closures
13.1.
Closures: Anonymous Functions that Capture Their Environment
13.2.
Processing a Series of Items with Iterators
13.3.
Improving Our I/O Project
13.4.
Comparing Performance: Loops vs. Iterators
14.
More about Cargo and Crates.io
14.1.
Customizing Builds with Release Profiles
14.2.
Publishing a Crate to Crates.io
14.3.
Cargo Workspaces
14.4.
Installing Binaries from Crates.io with cargo install
14.5.
Extending Cargo with Custom Commands
15.
Smart Pointers
15.1.
Using Box<T> to Point to Data on the Heap
15.2.
Treating Smart Pointers Like Regular References with the Deref Trait
15.3.
Running Code on Cleanup with the Drop Trait
15.4.
Rc<T>, the Reference Counted Smart Pointer
15.5.
RefCell<T> and the Interior Mutability Pattern
15.6.
Reference Cycles Can Leak Memory
16.
Fearless Concurrency
16.1.
Using Threads to Run Code Simultaneously
16.2.
Using Message Passing to Transfer Data Between Threads
16.3.
Shared-State Concurrency
16.4.
Extensible Concurrency with the Sync and Send Traits
17.
Object Oriented Programming Features of Rust
17.1.
Characteristics of Object-Oriented Languages
17.2.
Using Trait Objects That Allow for Values of Different Types
17.3.
Implementing an Object-Oriented Design Pattern
18.
Patterns and Matching
18.1.
All the Places Patterns Can Be Used
18.2.
Refutability: Whether a Pattern Might Fail to Match
18.3.
Pattern Syntax
19.
Advanced Features
19.1.
Unsafe Rust
19.2.
Advanced Traits
19.3.
Advanced Types
19.4.
Advanced Functions and Closures
19.5.
Macros
20.
Final Project: Building a Multithreaded Web Server
20.1.
Building a Single-Threaded Web Server
20.2.
Turning Our Single-Threaded Server into a Multithreaded Server
20.3.
Graceful Shutdown and Cleanup
21.
Appendix
21.1.
A - Keywords
21.2.
B - Operators and Symbols
21.3.
C - Derivable Traits
21.4.
D - Useful Development Tools
21.5.
E - Editions
21.6.
F - Translations of the Book
21.7.
G - How Rust is Made and “Nightly Rust”
Light
Rust
Coal
Navy
Ayu
The Rust Programming Language
Appendix
The following sections contain reference material you may find useful in your Rust journey.