• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1% Rust Documentation
2
3<style>
4nav {
5    display: none;
6}
7body {
8    font-family: serif;
9}
10h1, h2, h3, h4, h5, h6 {
11    font-family: sans-serif;
12}
13h3 {
14    font-size: 1.35rem;
15}
16h4 {
17    font-size: 1.1rem;
18}
19
20/* Formatting for docs search bar */
21#search-input {
22    width: calc(100% - 58px);
23}
24#search-but {
25    cursor: pointer;
26}
27#search-but, #search-input {
28    padding: 4px;
29    border: 1px solid #ccc;
30    border-radius: 3px;
31    outline: none;
32    font-size: 0.7em;
33    background-color: #fff;
34}
35#search-but:hover, #search-input:focus {
36    border-color: #55a9ff;
37}
38
39/* Formatting for external link icon */
40svg.external-link {
41  display: inline-block;
42  position: relative;
43  vertical-align: super;
44  width: 0.7rem;
45  height: 0.7rem;
46  padding-left: 2px;
47  top: 3px;
48}
49</style>
50
51Welcome to an overview of the documentation provided by the [Rust
52project]. This page contains links to various helpful references,
53most of which are available offline (if opened with `rustup doc`). Many of these
54resources take the form of "books"; we collectively call these "The Rust
55Bookshelf." Some are large, some are small.
56
57All of these books are managed by the Rust Organization, but other unofficial
58documentation resources are included here as well!
59
60If you're just looking for the standard library reference, here it is:
61[Rust API documentation](std/index.html)
62
63
64## Learning Rust
65
66If you'd like to learn Rust, this is the section for you! All of these resources
67assume that you have programmed before, but not in any specific language:
68
69### The Rust Programming Language
70
71Affectionately nicknamed "the book," [The Rust Programming Language](book/index.html)
72will give you an overview of the language from first principles. You'll build a
73few projects along the way, and by the end, you'll have a solid grasp of how to
74use the language.
75
76### Rust By Example
77
78If reading multiple hundreds of pages about a language isn't your style, then
79[Rust By Example](rust-by-example/index.html) has you covered. RBE shows off a
80bunch of code without using a lot of words. It also includes exercises!
81
82### Rustlings
83
84[Rustlings](https://github.com/rust-lang/rustlings) guides you
85through downloading and setting up the Rust toolchain, then provides an
86interactive tool that teaches you how to solve coding challenges in Rust.
87
88### Rust Playground
89
90The [Rust Playground](https://play.rust-lang.org) is a great place
91to try out and share small bits of code, or experiment with some of the most
92popular crates.
93
94
95## Using Rust
96
97Once you've gotten familiar with the language, these resources can help you put
98it to work.
99
100### The Standard Library
101
102Rust's standard library has [extensive API documentation](std/index.html), with
103explanations of how to use various things, as well as example code for
104accomplishing various tasks. Code examples have a "Run" button on hover that
105opens the sample in the playground.
106
107<div>
108  <form action="std/index.html" method="get">
109    <input id="search-input" type="search" name="search"
110           placeholder="Search through the standard library"/>
111    <button id="search-but">Search</button>
112  </form>
113</div>
114
115### Your Personal Documentation
116
117Whenever you are working in a crate, `cargo doc --open` will generate
118documentation for your project _and_ all its dependencies in their correct
119version, and open it in your browser. Add the flag `--document-private-items` to
120also show items not marked `pub`.
121
122### The Edition Guide
123
124[The Edition Guide](edition-guide/index.html) describes the Rust editions and
125their differences.
126
127### The `rustc` Book
128
129[The `rustc` Book](rustc/index.html) describes the Rust compiler, `rustc`.
130
131### The Cargo Book
132
133[The Cargo Book](cargo/index.html) is a guide to Cargo, Rust's build tool and
134dependency manager.
135
136### The Rustdoc Book
137
138[The Rustdoc Book](rustdoc/index.html) describes our documentation tool, `rustdoc`.
139
140### The Clippy Book
141
142[The Clippy Book](clippy/index.html) describes our static analyzer, Clippy.
143
144### Extended Error Listing
145
146Many of Rust's errors come with error codes, and you can request extended
147diagnostics from the compiler on those errors (with `rustc --explain`). You can
148also read them here if you prefer: [rustc error codes](error_codes/index.html)
149
150
151## Mastering Rust
152
153Once you're quite familiar with the language, you may find these advanced
154resources useful.
155
156### The Reference
157
158[The Reference](reference/index.html) is not a formal spec, but is more detailed
159and comprehensive than the book.
160
161### The Style Guide
162
163[The Rust Style Guide](style-guide/index.html) describes the standard formatting
164of Rust code. Most developers use `cargo fmt` to invoke `rustfmt` and format the
165code automatically (the result matches this style guide).
166
167### The Rustonomicon
168
169[The Rustonomicon](nomicon/index.html) is your guidebook to the dark arts of
170unsafe Rust. It's also sometimes called "the 'nomicon."
171
172### The Unstable Book
173
174[The Unstable Book](unstable-book/index.html) has documentation for unstable
175features.
176
177### The `rustc` Contribution Guide
178
179[The `rustc` Guide](https://rustc-dev-guide.rust-lang.org/)
180documents how the compiler works and how to contribute to it. This is useful if
181you want to build or modify the Rust compiler from source (e.g. to target
182something non-standard).
183
184
185## Specialized Rust
186
187When using Rust in specific domains, consider using the following resources
188tailored to each area.
189
190### Embedded Systems
191
192When developing for Bare Metal or Embedded Linux systems, you may find these
193resources maintained by the [Embedded Working Group] useful.
194
195[Embedded Working Group]: https://github.com/rust-embedded
196
197#### The Embedded Rust Book
198
199[The Embedded Rust Book] is targeted at developers familiar with embedded
200development and familiar with Rust, but have not used Rust for embedded
201development.
202
203[The Embedded Rust Book]: embedded-book/index.html
204[Rust project]: https://www.rust-lang.org
205
206<script>
207// check if a given link is external
208function isExternalLink(url) {
209  const tmp = document.createElement('a');
210  tmp.href = url;
211  return tmp.host !== window.location.host;
212}
213
214// Add the `external` class to all <a> tags with external links and append the external link SVG
215function updateExternalAnchors() {
216  /*
217    External link SVG from Font-Awesome
218    CC BY-SA 3.0 https://creativecommons.org/licenses/by-sa/3.0
219    via Wikimedia Commons
220  */
221  const svgText = `<svg
222     class='external-link'
223     xmlns='http://www.w3.org/2000/svg'
224     viewBox='0 -256 1850 1850'
225     width='100%'
226     height='100%'>
227       <g transform='matrix(1,0,0,-1,30,1427)'>
228         <path d='M 1408,608 V 288 Q 1408,169 1323.5,84.5 1239,0 1120,
229           0 H 288 Q 169,0 84.5,84.5 0,169 0,288 v 832 Q 0,1239 84.5,1323.5 169,
230           1408 288,1408 h 704 q 14,0 23,-9 9,-9 9,-23 v -64 q 0,-14 -9,-23 -9,
231           -9 -23,-9 H 288 q -66,0 -113,-47 -47,-47 -47,-113 V 288 q 0,-66 47,
232           -113 47,-47 113,-47 h 832 q 66,0 113,47 47,47 47,113 v 320 q 0,14 9,
233           23 9,9 23,9 h 64 q 14,0 23,-9 9,-9 9,-23 z m 384,864 V 960 q 0,
234           -26 -19,-45 -19,-19 -45,-19 -26,0 -45,19 L 1507,1091 855,439 q -10,
235           -10 -23,-10 -13,0 -23,10 L 695,553 q -10,10 -10,23 0,13 10,23 l 652,
236           652 -176,176 q -19,19 -19,45 0,26 19,45 19,19 45,19 h 512 q 26,0 45,
237           -19 19,-19 19,-45 z' style='fill:currentColor' />
238         </g>
239     </svg>`;
240  let allAnchors = document.getElementsByTagName("a");
241
242  for (var i = 0; i < allAnchors.length; ++i) {
243    let anchor = allAnchors[i];
244    if (isExternalLink(anchor.href)) {
245      anchor.classList.add("external");
246      anchor.innerHTML += svgText;
247    }
248  }
249}
250
251// on page load, update external anchors
252document.addEventListener("DOMContentLoaded", updateExternalAnchors);
253
254</script>
255