]> git.proxmox.com Git - rustc.git/blame - src/doc/book/src/ch00-00-introduction.md
New upstream version 1.39.0+dfsg1
[rustc.git] / src / doc / book / src / ch00-00-introduction.md
CommitLineData
13cf67c4
XL
1# Introduction
2
3> Note: This edition of the book is the same as [The Rust Programming
4> Language][nsprust] available in print and ebook format from [No Starch
5> Press][nsp].
6
7[nsprust]: https://nostarch.com/rust
8[nsp]: https://nostarch.com/
9
10Welcome to *The Rust Programming Language*, an introductory book about Rust.
11The Rust programming language helps you write faster, more reliable software.
12High-level ergonomics and low-level control are often at odds in programming
13language design; Rust challenges that conflict. Through balancing powerful
14technical capacity and a great developer experience, Rust gives you the option
15to control low-level details (such as memory usage) without all the hassle
16traditionally associated with such control.
17
18## Who Rust Is For
19
20Rust is ideal for many people for a variety of reasons. Let’s look at a few of
21the most important groups.
22
23### Teams of Developers
24
25Rust is proving to be a productive tool for collaborating among large teams of
26developers with varying levels of systems programming knowledge. Low-level code
27is prone to a variety of subtle bugs, which in most other languages can be
28caught only through extensive testing and careful code review by experienced
29developers. In Rust, the compiler plays a gatekeeper role by refusing to
30compile code with these elusive bugs, including concurrency bugs. By working
31alongside the compiler, the team can spend their time focusing on the program’s
32logic rather than chasing down bugs.
33
34Rust also brings contemporary developer tools to the systems programming world:
35
36* Cargo, the included dependency manager and build tool, makes adding,
37 compiling, and managing dependencies painless and consistent across the Rust
38 ecosystem.
39* Rustfmt ensures a consistent coding style across developers.
40* The Rust Language Server powers Integrated Development Environment (IDE)
41 integration for code completion and inline error messages.
42
43By using these and other tools in the Rust ecosystem, developers can be
44productive while writing systems-level code.
45
46### Students
47
48Rust is for students and those who are interested in learning about systems
49concepts. Using Rust, many people have learned about topics like operating
50systems development. The community is very welcoming and happy to answer
51student questions. Through efforts such as this book, the Rust teams want to
52make systems concepts more accessible to more people, especially those new to
53programming.
54
55### Companies
56
57Hundreds of companies, large and small, use Rust in production for a variety of
58tasks. Those tasks include command line tools, web services, DevOps tooling,
59embedded devices, audio and video analysis and transcoding, cryptocurrencies,
60bioinformatics, search engines, Internet of Things applications, machine
61learning, and even major parts of the Firefox web browser.
62
63### Open Source Developers
64
65Rust is for people who want to build the Rust programming language, community,
66developer tools, and libraries. We’d love to have you contribute to the Rust
67language.
68
69### People Who Value Speed and Stability
70
71Rust is for people who crave speed and stability in a language. By speed, we
72mean the speed of the programs that you can create with Rust and the speed at
73which Rust lets you write them. The Rust compiler’s checks ensure stability
74through feature additions and refactoring. This is in contrast to the brittle
75legacy code in languages without these checks, which developers are often
76afraid to modify. By striving for zero-cost abstractions, higher-level features
77that compile to lower-level code as fast as code written manually, Rust
78endeavors to make safe code be fast code as well.
79
80The Rust language hopes to support many other users as well; those mentioned
81here are merely some of the biggest stakeholders. Overall, Rust’s greatest
82ambition is to eliminate the trade-offs that programmers have accepted for
83decades by providing safety *and* productivity, speed *and* ergonomics. Give
84Rust a try and see if its choices work for you.
85
86## Who This Book Is For
87
88This book assumes that you’ve written code in another programming language but
89doesn’t make any assumptions about which one. We’ve tried to make the material
90broadly accessible to those from a wide variety of programming backgrounds. We
91don’t spend a lot of time talking about what programming *is* or how to think
92about it. If you’re entirely new to programming, you would be better served by
93reading a book that specifically provides an introduction to programming.
94
95## How to Use This Book
96
97In general, this book assumes that you’re reading it in sequence from front to
98back. Later chapters build on concepts in earlier chapters, and earlier
99chapters might not delve into details on a topic; we typically revisit the
100topic in a later chapter.
101
102You’ll find two kinds of chapters in this book: concept chapters and project
103chapters. In concept chapters, you’ll learn about an aspect of Rust. In project
104chapters, we’ll build small programs together, applying what you’ve learned so
105far. Chapters 2, 12, and 20 are project chapters; the rest are concept chapters.
106
107Chapter 1 explains how to install Rust, how to write a Hello, world! program,
108and how to use Cargo, Rust’s package manager and build tool. Chapter 2 is a
109hands-on introduction to the Rust language. Here we cover concepts at a high
110level, and later chapters will provide additional detail. If you want to get
111your hands dirty right away, Chapter 2 is the place for that. At first, you
112might even want to skip Chapter 3, which covers Rust features similar to those
113of other programming languages, and head straight to Chapter 4 to learn about
114Rust’s ownership system. However, if you’re a particularly meticulous learner
115who prefers to learn every detail before moving on to the next, you might want
116to skip Chapter 2 and go straight to Chapter 3, returning to Chapter 2 when
117you’d like to work on a project applying the details you’ve learned.
118
119Chapter 5 discusses structs and methods, and Chapter 6 covers enums, `match`
120expressions, and the `if let` control flow construct. You’ll use structs and
121enums to make custom types in Rust.
122
123In Chapter 7, you’ll learn about Rust’s module system and about privacy rules
124for organizing your code and its public Application Programming Interface
125(API). Chapter 8 discusses some common collection data structures that the
126standard library provides, such as vectors, strings, and hash maps. Chapter 9
127explores Rust’s error-handling philosophy and techniques.
128
129Chapter 10 digs into generics, traits, and lifetimes, which give you the power
130to define code that applies to multiple types. Chapter 11 is all about testing,
131which even with Rust’s safety guarantees is necessary to ensure your program’s
132logic is correct. In Chapter 12, we’ll build our own implementation of a subset
133of functionality from the `grep` command line tool that searches for text
134within files. For this, we’ll use many of the concepts we discussed in the
135previous chapters.
136
137Chapter 13 explores closures and iterators: features of Rust that come from
138functional programming languages. In Chapter 14, we’ll examine Cargo in more
139depth and talk about best practices for sharing your libraries with others.
140Chapter 15 discusses smart pointers that the standard library provides and the
141traits that enable their functionality.
142
143In Chapter 16, we’ll walk through different models of concurrent programming
144and talk about how Rust helps you to program in multiple threads fearlessly.
145Chapter 17 looks at how Rust idioms compare to object-oriented programming
146principles you might be familiar with.
147
148Chapter 18 is a reference on patterns and pattern matching, which are powerful
149ways of expressing ideas throughout Rust programs. Chapter 19 contains a
150smorgasbord of advanced topics of interest, including unsafe Rust, macros, and
151more about lifetimes, traits, types, functions, and closures.
152
153In Chapter 20, we’ll complete a project in which we’ll implement a low-level
154multithreaded web server!
155
156Finally, some appendixes contain useful information about the language in a
157more reference-like format. Appendix A covers Rust’s keywords, Appendix B
158covers Rust’s operators and symbols, Appendix C covers derivable traits
159provided by the standard library, Appendix D covers some useful development
160tools, and Appendix E explains Rust editions.
161
162There is no wrong way to read this book: if you want to skip ahead, go for it!
163You might have to jump back to earlier chapters if you experience any
164confusion. But do whatever works for you.
165
166<span id="ferris"></span>
167
168An important part of the process of learning Rust is learning how to read the
169error messages the compiler displays: these will guide you toward working code.
9fa01778
XL
170As such, we’ll provide many examples that don’t compile along with the error
171message the compiler will show you in each situation. Know that if you enter
172and run a random example, it may not compile! Make sure you read the
13cf67c4
XL
173surrounding text to see whether the example you’re trying to run is meant to
174error. Ferris will also help you distinguish code that isn’t meant to work:
175
176| Ferris | Meaning |
177|------------------------------------------------------------------------|--------------------------------------------------|
9fa01778
XL
178| <img src="img/ferris/does_not_compile.svg" class="ferris-explain"/> | This code does not compile! |
179| <img src="img/ferris/panics.svg" class="ferris-explain"/> | This code panics! |
180| <img src="img/ferris/unsafe.svg" class="ferris-explain"/> | This code block contains unsafe code. |
181| <img src="img/ferris/not_desired_behavior.svg" class="ferris-explain"/>| This code does not produce the desired behavior. |
13cf67c4
XL
182
183In most situations, we’ll lead you to the correct version of any code that
184doesn’t compile.
185
186## Source Code
187
188The source files from which this book is generated can be found on
189[GitHub][book].
190
69743fb6 191[book]: https://github.com/rust-lang/book/tree/master/src