Author(s): Jim Blandy, Jason Orendorff
Edition: 1
Publisher: O’Reilly Media
Year: 2017
Language: English
Pages: 621
Contents......Page 3
Preface......Page 14
Why Rust......Page 18
Type Safety......Page 20
Downloading and Installing Rust......Page 23
A Simple Function......Page 26
Writing and Running Unit Tests......Page 27
Handling Command-Line Arguments......Page 28
A Simple Web Server......Page 33
Concurrency......Page 39
Basic Types......Page 58
Machine Types......Page 61
Tuples......Page 69
Pointer Types......Page 70
Arrays, Vectors, and Slices......Page 72
String Types......Page 79
Beyond the Basics......Page 84
Ownership......Page 85
Ownership......Page 87
Moves......Page 91
Copy Types: The Exception to Moves......Page 100
Rc and Arc: Shared Ownership......Page 104
References......Page 107
References as Values......Page 111
Reference Safety......Page 115
Sharing Versus Mutation......Page 128
Taking Arms Against a Sea of Objects......Page 135
An Expression Language......Page 137
Blocks and Semicolons......Page 138
Declarations......Page 140
if and match......Page 141
Loops......Page 144
return Expressions......Page 146
Why Rust Has loop......Page 147
Function and Method Calls......Page 148
Fields and Elements......Page 149
Arithmetic, Bitwise, Comparison, and Logical Operators......Page 151
Assignment......Page 152
Type Casts......Page 153
Precedence and Associativity......Page 154
Onward......Page 156
Panic......Page 158
Result......Page 161
Crates......Page 173
Modules......Page 177
Turning a Program into a Library......Page 184
The src/bin Directory......Page 186
Attributes......Page 187
Tests and Documentation......Page 190
Specifying Dependencies......Page 197
Publishing Crates to crates.io......Page 200
Workspaces......Page 202
More Nice Things......Page 203
Structs......Page 204
Tuple-Like Structs......Page 207
Struct Layout......Page 208
Definin Methods with impl......Page 209
Generic Structs......Page 213
Structs with Lifetime Parameters......Page 214
Deriving Common Traits for Struct Types......Page 215
Interior Mutability......Page 216
Enums & Patterns......Page 221
Enums......Page 222
Patterns......Page 231
The Big Picture......Page 243
Traits & Generics......Page 245
Using Traits......Page 247
Definin and Implementing Traits......Page 255
Fully Qualifie Method Calls......Page 262
Traits That Defin Relationships Between Types......Page 263
Reverse-Engineering Bounds......Page 270
Conclusion......Page 273
Operator Overloading......Page 274
Arithmetic and Bitwise Operators......Page 275
Equality Tests......Page 281
Ordered Comparisons......Page 284
Index and IndexMut......Page 286
Other Operators......Page 289
Utility Traits......Page 290
Drop......Page 291
Sized......Page 294
Clone......Page 296
Deref and DerefMut......Page 298
Default......Page 301
AsRef and AsMut......Page 303
Borrow and BorrowMut......Page 305
From and Into......Page 306
Borrow and ToOwned at Work: The Humble Cow......Page 309
Closures......Page 312
Capturing Variables......Page 314
Function and Closure Types......Page 317
Closure Performance......Page 319
Closures and Safety......Page 320
Callbacks......Page 325
Using Closures Effectivel......Page 328
Iterators......Page 330
The Iterator and IntoIterator Traits......Page 331
Creating Iterators......Page 333
Iterator Adapters......Page 339
Consuming Iterators......Page 354
Implementing Your Own Iterators......Page 363
Collections......Page 368
Overview......Page 369
Vec......Page 370
VecDeque......Page 383
LinkedList......Page 385
BinaryHeap......Page 386
HashMap and BTreeMap......Page 387
HashSet and BTreeSet......Page 393
Hashing......Page 396
Beyond the Standard Collections......Page 398
Strings & Text......Page 400
Some Unicode Background......Page 401
Characters (char)......Page 403
String and str......Page 406
Formatting Values......Page 422
Regular Expressions......Page 433
Normalization......Page 436
IO......Page 440
Readers and Writers......Page 441
Files and Directories......Page 454
Networking......Page 462
Concurrency......Page 465
Fork-Join Parallelism......Page 467
Channels......Page 478
Shared Mutable State......Page 492
What Hacking Concurrent Code in Rust Is Like......Page 505
Macros......Page 507
Macro Basics......Page 508
Built-In Macros......Page 515
Debugging Macros......Page 516
The json! Macro......Page 517
Avoiding Syntax Errors During Matching......Page 529
Beyond macro_rules!......Page 530
Unsafe Code......Page 532
Unsafe from What?......Page 533
Unsafe Blocks......Page 534
Unsafe Functions......Page 538
Undefine Behavior......Page 540
Unsafe Traits......Page 543
Raw Pointers......Page 545
Foreign Functions: Calling C and C++ from Rust......Page 564
Conclusion......Page 590
Index......Page 591