توضیحاتی در مورد کتاب Programming Rust: Fast, Safe Systems Development
نام کتاب : Programming Rust: Fast, Safe Systems Development
ویرایش : 1
عنوان ترجمه شده به فارسی : برنامه نویسی Rust: توسعه سریع و ایمن سیستم ها
سری :
نویسندگان : Jim Blandy, Jason Orendorff
ناشر : O’Reilly Media
سال نشر : 2017
تعداد صفحات : 604
ISBN (شابک) : 1491927283 , 9781491927281
زبان کتاب : English
فرمت کتاب : pdf
حجم کتاب : 7 مگابایت
بعد از تکمیل فرایند پرداخت لینک دانلود کتاب ارائه خواهد شد. درصورت ثبت نام و ورود به حساب کاربری خود قادر خواهید بود لیست کتاب های خریداری شده را مشاهده فرمایید.
توضیحاتی در مورد کتاب :
Rust یک زبان برنامه نویسی سیستم جدید است که عملکرد و کنترل سطح پایین C و C++ را با ایمنی حافظه و ایمنی رشته ترکیب می کند. انواع مدرن و منعطف Rust تضمین میکند که برنامه شما فاقد ارجاعهای اشاره گر تهی، مضاعف آزاد، نشانگرهای آویزان و اشکالات مشابه است، همه در زمان کامپایل، بدون سربار زمان اجرا. در کد چند رشتهای، Rust در زمان کامپایل، مسابقه دادهها را میگیرد و استفاده از همزمانی را بسیار آسانتر میکند.
این کتاب که توسط دو برنامهنویس با تجربه سیستمها نوشته شده است، توضیح میدهد که چگونه Rust موفق به پر کردن شکاف بین عملکرد و ایمنی میشود. و چگونه می توانید از آن بهره ببرید. موضوعات عبارتند از:
- چگونه Rust مقادیر را در حافظه نشان میدهد (با نمودارها)
- توضیحات کامل در مورد مالکیت، جابهجایی، قرضگیری و طول عمر
- محموله، rustdoc، تستهای واحد، و نحوه انتشار کد خود در crates.io، مخزن بسته عمومی Rust
- ویژگیهای سطح بالا مانند کد عمومی، بسته شدن، مجموعهها و تکرارکنندهها که Rust را سازنده و انعطافپذیر میکنند
- Concurrency در Rust: رشتهها، mutexes، کانالها و اتمیها، استفاده از آنها بسیار ایمنتر از C یا C++ است
- کد ناامن، و نحوه حفظ یکپارچگی کد معمولی که از آن استفاده میکند< /li>
- نمونههای بسط یافته نشان میدهد که چگونه قطعات زبان با هم قرار میگیرند
فهرست مطالب :
Cover......Page 1
Copyright......Page 4
Table of Contents......Page 5
Preface......Page 17
Navigating This Book......Page 18
Conventions Used in This Book......Page 19
O’Reilly Safari......Page 20
Acknowledgments......Page 21
Chapter 1. Why Rust?......Page 23
Type Safety......Page 25
Downloading and Installing Rust......Page 29
A Simple Function......Page 32
Writing and Running Unit Tests......Page 33
Handling Command-Line Arguments......Page 34
A Simple Web Server......Page 39
Concurrency......Page 45
What the Mandelbrot Set Actually Is......Page 46
Parsing Pair Command-Line Arguments......Page 50
Mapping from Pixels to Complex Numbers......Page 53
Plotting the Set......Page 54
Writing Image Files......Page 55
A Concurrent Mandelbrot Program......Page 57
Running the Mandelbrot Plotter......Page 62
Safety Is Invisible......Page 63
Chapter 3. Basic Types......Page 65
Machine Types......Page 68
Integer Types......Page 69
Floating-Point Types......Page 72
The bool Type......Page 73
Characters......Page 74
Tuples......Page 76
Pointer Types......Page 77
Boxes......Page 78
Arrays, Vectors, and Slices......Page 79
Arrays......Page 80
Vectors......Page 81
Slices......Page 84
String Literals......Page 86
Strings in Memory......Page 87
String......Page 89
Other String-Like Types......Page 90
Beyond the Basics......Page 91
Chapter 4. Ownership......Page 93
Ownership......Page 95
Moves......Page 99
More Operations That Move......Page 104
Moves and Indexed Content......Page 106
Copy Types: The Exception to Moves......Page 108
Rc and Arc: Shared Ownership......Page 112
Chapter 5. References......Page 115
Rust References Versus C++ References......Page 119
Assigning References......Page 120
Comparing References......Page 121
Borrowing References to Arbitrary Expressions......Page 122
Borrowing a Local Variable......Page 123
Receiving References as Parameters......Page 127
Returning References......Page 129
Structs Containing References......Page 131
Distinct Lifetime Parameters......Page 133
Omitting Lifetime Parameters......Page 134
Sharing Versus Mutation......Page 136
Taking Arms Against a Sea of Objects......Page 143
An Expression Language......Page 145
Blocks and Semicolons......Page 146
Declarations......Page 148
if and match......Page 149
if let......Page 151
Loops......Page 152
return Expressions......Page 154
Why Rust Has loop......Page 155
Function and Method Calls......Page 156
Fields and Elements......Page 157
Arithmetic, Bitwise, Comparison, and Logical Operators......Page 159
Assignment......Page 160
Type Casts......Page 161
Precedence and Associativity......Page 162
Onward......Page 164
Panic......Page 167
Unwinding......Page 168
Aborting......Page 169
Catching Errors......Page 170
Printing Errors......Page 172
Propagating Errors......Page 174
Working with Multiple Error Types......Page 175
Dealing with Errors That “Can’t Happen”......Page 177
Handling Errors in main()......Page 178
Declaring a Custom Error Type......Page 179
Why Results?......Page 180
Crates......Page 183
Build Profiles......Page 186
Modules......Page 187
Modules in Separate Files......Page 188
Paths and Imports......Page 189
The Standard Prelude......Page 191
Items, the Building Blocks of Rust......Page 192
Turning a Program into a Library......Page 194
The src/bin Directory......Page 196
Attributes......Page 197
Tests and Documentation......Page 200
Integration Tests......Page 202
Documentation......Page 203
Doc-Tests......Page 204
Specifying Dependencies......Page 207
Versions......Page 208
Cargo.lock......Page 209
Publishing Crates to crates.io......Page 210
Workspaces......Page 212
More Nice Things......Page 213
Named-Field Structs......Page 215
Tuple-Like Structs......Page 218
Struct Layout......Page 219
Defining Methods with impl......Page 220
Generic Structs......Page 224
Structs with Lifetime Parameters......Page 225
Deriving Common Traits for Struct Types......Page 226
Interior Mutability......Page 227
Chapter 10. Enums and Patterns......Page 233
Enums......Page 234
Enums with Data......Page 236
Enums in Memory......Page 237
Rich Data Structures Using Enums......Page 238
Generic Enums......Page 240
Patterns......Page 243
Literals, Variables, and Wildcards in Patterns......Page 245
Tuple and Struct Patterns......Page 247
Reference Patterns......Page 248
Pattern Guards......Page 251
Where Patterns Are Allowed......Page 252
Populating a Binary Tree......Page 254
The Big Picture......Page 255
Chapter 11. Traits and Generics......Page 257
Using Traits......Page 259
Trait Objects......Page 260
Trait Object Layout......Page 261
Generic Functions......Page 262
Which to Use......Page 265
Defining and Implementing Traits......Page 267
Default Methods......Page 268
Traits and Other People’s Types......Page 269
Self in Traits......Page 271
Subtraits......Page 272
Static Methods......Page 273
Fully Qualified Method Calls......Page 274
Traits That Define Relationships Between Types......Page 275
Associated Types (or How Iterators Work)......Page 276
Generic Traits (or How Operator Overloading Works)......Page 279
Buddy Traits (or How rand::random() Works)......Page 280
Reverse-Engineering Bounds......Page 282
Conclusion......Page 285
Chapter 12. Operator Overloading......Page 287
Arithmetic and Bitwise Operators......Page 288
Unary Operators......Page 290
Binary Operators......Page 291
Compound Assignment Operators......Page 292
Equality Tests......Page 294
Ordered Comparisons......Page 297
Index and IndexMut......Page 299
Other Operators......Page 302
Chapter 13. Utility Traits......Page 303
Drop......Page 304
Sized......Page 307
Clone......Page 309
Deref and DerefMut......Page 311
Default......Page 314
AsRef and AsMut......Page 316
Borrow and BorrowMut......Page 318
From and Into......Page 319
Borrow and ToOwned at Work: The Humble Cow......Page 322
Chapter 14. Closures......Page 325
Capturing Variables......Page 327
Closures That Steal......Page 328
Function and Closure Types......Page 330
Closure Performance......Page 332
Closures and Safety......Page 333
FnOnce......Page 334
FnMut......Page 336
Callbacks......Page 338
Using Closures Effectively......Page 341
Chapter 15. Iterators......Page 343
The Iterator and IntoIterator Traits......Page 344
iter and iter_mut Methods......Page 346
IntoIterator Implementations......Page 347
drain Methods......Page 349
Other Iterator Sources......Page 350
map and filter......Page 352
filter_map and flat_map......Page 354
take and take_while......Page 357
skip and skip_while......Page 358
peekable......Page 359
fuse......Page 360
Reversible Iterators and rev......Page 361
inspect......Page 362
enumerate......Page 363
by_ref......Page 364
cycle......Page 366
Simple Accumulation: count, sum, product......Page 367
max_by, min_by......Page 368
Comparing Item Sequences......Page 369
position, rposition, and ExactSizeIterator......Page 370
fold......Page 371
last......Page 372
Building Collections: collect and FromIterator......Page 373
partition......Page 375
Implementing Your Own Iterators......Page 376
Chapter 16. Collections......Page 381
Overview......Page 382
Vec......Page 383
Accessing Elements......Page 384
Growing and Shrinking Vectors......Page 386
Joining......Page 389
Splitting......Page 390
Sorting and Searching......Page 392
Comparing Slices......Page 394
Rust Rules Out Invalidation Errors......Page 395
VecDeque......Page 396
LinkedList......Page 398
BinaryHeap......Page 399
HashMap and BTreeMap......Page 400
Entries......Page 403
Map Iteration......Page 405
Set Iteration......Page 406
Whole-Set Operations......Page 407
Hashing......Page 409
Using a Custom Hashing Algorithm......Page 410
Beyond the Standard Collections......Page 411
Chapter 17. Strings and Text......Page 413
UTF-8......Page 414
Characters (char)......Page 416
Handling Digits......Page 417
Conversions to and from Integers......Page 418
String and str......Page 419
Simple Inspection......Page 420
Appending and Inserting Text......Page 421
Conventions for Searching and Iterating......Page 423
Patterns for Searching Text......Page 424
Iterating over Text......Page 425
Parsing Other Types from Strings......Page 428
Converting Other Types to Strings......Page 429
Borrowing as Other Text-Like Types......Page 430
Producing Text from UTF-8 Data......Page 431
Putting Off Allocation......Page 432
Strings as Generic Collections......Page 434
Formatting Values......Page 435
Formatting Text Values......Page 436
Formatting Numbers......Page 437
Formatting Other Types......Page 439
Formatting Values for Debugging......Page 440
Referring to Arguments by Index or Name......Page 441
Dynamic Widths and Precisions......Page 442
Formatting Your Own Types......Page 443
Using the Formatting Language in Your Own Code......Page 445
Regular Expressions......Page 446
Basic Regex Use......Page 447
Building Regex Values Lazily......Page 448
Normalization......Page 449
Normalization Forms......Page 450
The unicode-normalization Crate......Page 451
Chapter 18. Input and Output......Page 453
Readers and Writers......Page 454
Readers......Page 455
Buffered Readers......Page 457
Reading Lines......Page 458
Writers......Page 461
Seeking......Page 463
Other Reader and Writer Types......Page 464
Binary Data, Compression, and Serialization......Page 466
OsStr and Path......Page 467
Path and PathBuf Methods......Page 469
Filesystem Access Functions......Page 471
Reading Directories......Page 472
Platform-Specific Features......Page 473
Networking......Page 475
Chapter 19. Concurrency......Page 479
Fork-Join Parallelism......Page 481
spawn and join......Page 483
Error Handling Across Threads......Page 485
Sharing Immutable Data Across Threads......Page 486
Rayon......Page 488
Revisiting the Mandelbrot Set......Page 490
Channels......Page 492
Sending Values......Page 494
Receiving Values......Page 497
Running the Pipeline......Page 498
Channel Features and Performance......Page 500
Thread Safety: Send and Sync......Page 501
Piping Almost Any Iterator to a Channel......Page 504
Beyond Pipelines......Page 505
What Is a Mutex?......Page 506
Mutex......Page 508
Why Mutexes Are Not Always a Good Idea......Page 510
Deadlock......Page 511
Multi-producer Channels Using Mutexes......Page 512
Read/Write Locks (RwLock)......Page 513
Condition Variables (Condvar)......Page 515
Atomics......Page 516
Global Variables......Page 518
What Hacking Concurrent Code in Rust Is Like......Page 519
Chapter 20. Macros......Page 521
Macro Basics......Page 522
Basics of Macro Expansion......Page 523
Unintended Consequences......Page 525
Repetition......Page 527
Built-In Macros......Page 529
Debugging Macros......Page 530
The json! Macro......Page 531
Fragment Types......Page 532
Recursion in Macros......Page 535
Using Traits with Macros......Page 536
Scoping and Hygiene......Page 538
Importing and Exporting Macros......Page 541
Avoiding Syntax Errors During Matching......Page 543
Beyond macro_rules!......Page 544
Chapter 21. Unsafe Code......Page 547
Unsafe from What?......Page 548
Unsafe Blocks......Page 549
Example: An Efficient ASCII String Type......Page 551
Unsafe Functions......Page 553
Undefined Behavior......Page 555
Unsafe Traits......Page 558
Raw Pointers......Page 560
Dereferencing Raw Pointers Safely......Page 562
Example: RefWithFlag......Page 563
Type Sizes and Alignments......Page 566
Pointer Arithmetic......Page 567
Moving into and out of Memory......Page 568
Example: GapBuffer......Page 572
Panic Safety in Unsafe Code......Page 578
Foreign Functions: Calling C and C++ from Rust......Page 579
Finding Common Data Representations......Page 580
Declaring Foreign Functions and Variables......Page 583
Using Functions from Libraries......Page 584
A Raw Interface to libgit2......Page 588
A Safe Interface to libgit2......Page 594
Conclusion......Page 605
Index......Page 607
Colophon......Page 621
توضیحاتی در مورد کتاب به زبان اصلی :
Rust is a new systems programming language that combines the performance and low-level control of C and C++ with memory safety and thread safety. Rust’s modern, flexible types ensure your program is free of null pointer dereferences, double frees, dangling pointers, and similar bugs, all at compile time, without runtime overhead. In multi-threaded code, Rust catches data races at compile time, making concurrency much easier to use.
Written by two experienced systems programmers, this book explains how Rust manages to bridge the gap between performance and safety, and how you can take advantage of it. Topics include:
- How Rust represents values in memory (with diagrams)
- Complete explanations of ownership, moves, borrows, and lifetimes
- Cargo, rustdoc, unit tests, and how to publish your code on crates.io, Rust’s public package repository
- High-level features like generic code, closures, collections, and iterators that make Rust productive and flexible
- Concurrency in Rust: threads, mutexes, channels, and atomics, all much safer to use than in C or C++
- Unsafe code, and how to preserve the integrity of ordinary code that uses it
- Extended examples illustrating how pieces of the language fit together