1
Fork 0

Some tidying up

Improving the use of 2nd and 3rd person
Adding a few contractions to make the text less formal
Tidying up some notes
Providing a little bit more clarification for Windows users
This commit is contained in:
Jonathan Hansford 2015-08-18 20:37:27 +01:00 committed by Steve Klabnik
parent f116ab58b2
commit 22fbbd4b5c
4 changed files with 86 additions and 83 deletions

View file

@ -1,6 +1,6 @@
% The Rust Programming Language % The Rust Programming Language
Welcome! This book will teach us about the [Rust Programming Language][rust]. Welcome! This book will teach you about the [Rust Programming Language][rust].
Rust is a systems programming language focused on three goals: safety, speed, Rust is a systems programming language focused on three goals: safety, speed,
and concurrency. It maintains these goals without having a garbage collector, and concurrency. It maintains these goals without having a garbage collector,
making it a useful language for a number of use cases other languages arent making it a useful language for a number of use cases other languages arent
@ -17,7 +17,7 @@ Even then, Rust still allows precise control like a low-level language would.
“The Rust Programming Language” is split into eight sections. This introduction “The Rust Programming Language” is split into eight sections. This introduction
is the first. After this: is the first. After this:
* [Getting started][gs] - Set up our computer for Rust development. * [Getting started][gs] - Set up your computer for Rust development.
* [Learn Rust][lr] - Learn Rust programming through small projects. * [Learn Rust][lr] - Learn Rust programming through small projects.
* [Effective Rust][er] - Higher-level concepts for writing excellent Rust code. * [Effective Rust][er] - Higher-level concepts for writing excellent Rust code.
* [Syntax and Semantics][ss] - Each bit of Rust, broken down into small chunks. * [Syntax and Semantics][ss] - Each bit of Rust, broken down into small chunks.
@ -33,11 +33,11 @@ is the first. After this:
[gl]: glossary.html [gl]: glossary.html
[bi]: bibliography.html [bi]: bibliography.html
After reading this introduction, well want to dive into either Learn Rust or After reading this introduction, youll want to dive into either Learn Rust or
Syntax and Semantics, depending on our preference: Learn Rust if we want to Syntax and Semantics, depending on your preference: Learn Rust if you want
dive in with a project, or Syntax and Semantics if we prefer to start small, to dive in with a project, or Syntax and Semantics if you prefer to start
and learn a single concept thoroughly before moving onto the next. Copious small, and learn a single concept thoroughly before moving onto the next.
cross-linking connects these parts together. Copious cross-linking connects these parts together.
### Contributing ### Contributing
@ -46,7 +46,7 @@ The source files from which this book is generated can be found on Github:
## A brief introduction to Rust ## A brief introduction to Rust
Is Rust a language we might be interested in? Lets examine a few small code Is Rust a language you might be interested in? Lets examine a few small code
samples to show off a few of its strengths. samples to show off a few of its strengths.
The main concept that makes Rust unique is called ownership. Consider this The main concept that makes Rust unique is called ownership. Consider this
@ -76,7 +76,7 @@ annotating types.
Rust prefers stack allocation to heap allocation: `x` is placed directly on the Rust prefers stack allocation to heap allocation: `x` is placed directly on the
stack. However, the `Vec<T>` type allocates space for the elements of the vector stack. However, the `Vec<T>` type allocates space for the elements of the vector
on the heap. If were not familiar with this distinction, we can ignore it for on the heap. If youre not familiar with this distinction, you can ignore it for
now, or check out [The Stack and the Heap][heap]. As a systems programming now, or check out [The Stack and the Heap][heap]. As a systems programming
language, Rust gives us the ability to control how our memory is allocated, but language, Rust gives us the ability to control how our memory is allocated, but
when were getting started, its less of a big deal. when were getting started, its less of a big deal.
@ -104,13 +104,13 @@ fn main() {
} }
``` ```
Weve introduced another binding, `y`. In this case, `y` is a reference to Weve introduced another binding, `y`. In this case, `y` is a reference to the
the first element of the vector. Rusts references are similar to pointers in first element of the vector. Rusts references are similar to pointers in other
other languages, but with additional compile-time safety checks. References languages, but with additional compile-time safety checks. References interact
interact with the ownership system by [borrowing][borrowing] what they point with the ownership system by [borrowing][borrowing] what they point to, rather
to, rather than owning it. The difference is, when the reference goes out of than owning it. The difference is, when the reference goes out of scope, it
scope, it will not deallocate the underlying memory. If it did, wed won't deallocate the underlying memory. If it did, wed de-allocate twice, which
de-allocate twice, which is bad! is bad!
[borrowing]: references-and-borrowing.html [borrowing]: references-and-borrowing.html
@ -146,7 +146,7 @@ fn main() {
Whew! The Rust compiler gives quite detailed errors at times, and this is one Whew! The Rust compiler gives quite detailed errors at times, and this is one
of those times. As the error explains, while we made our binding mutable, we of those times. As the error explains, while we made our binding mutable, we
still cannot call `push`. This is because we already have a reference to an still can't call `push`. This is because we already have a reference to an
element of the vector, `y`. Mutating something while another reference exists element of the vector, `y`. Mutating something while another reference exists
is dangerous, because we may invalidate the reference. In this specific case, is dangerous, because we may invalidate the reference. In this specific case,
when we create the vector, we may have only allocated space for two elements. when we create the vector, we may have only allocated space for two elements.

View file

@ -13,9 +13,10 @@ any dependencies, so well only be using the first part of its functionality.
Eventually, well add more. Since we started off by using Cargo, it'll be easy Eventually, well add more. Since we started off by using Cargo, it'll be easy
to add later. to add later.
If we installed Rust via the official installers we will also have Cargo. If we If you installed Rust via the official installers you will also have Cargo. If
installed Rust some other way, we may want to [check the Cargo you installed Rust some other way, you may want to
README][cargoreadme] for specific instructions about installing it. [check the Cargo README][cargoreadme] for specific instructions about installing
it.
[cargoreadme]: https://github.com/rust-lang/cargo#installing-cargo-from-nightlies [cargoreadme]: https://github.com/rust-lang/cargo#installing-cargo-from-nightlies
@ -30,14 +31,14 @@ old executable (`main.exe` on Windows, `main` everywhere else). Let's do that pa
```bash ```bash
$ mkdir src $ mkdir src
$ mv main.rs src/main.rs $ mv main.rs src/main.rs
$ rm main # or main.exe on Windows $ rm main # or 'rm main.exe' on Windows
``` ```
Note that since we're creating an executable, we retain `main.rs` as the source > Note: since we're creating an executable, we retain `main.rs` as the source
filename. If we want to make a library instead, we should use `lib.rs`. This > filename. If we want to make a library instead, we should use `lib.rs`. This
convention is used by Cargo to successfully compile our projects, but it can be > convention is used by Cargo to successfully compile our projects, but it can
overridden if we wish. Custom file locations for the entry point can be > be overridden if we wish. Custom file locations for the entry point can be
specified with a [`[lib]` or `[[bin]]`][crates-custom] key in the TOML file. > specified with a [`[lib]` or `[[bin]]`][crates-custom] key in the TOML file.
[crates-custom]: http://doc.crates.io/manifest.html#configuring-a-target [crates-custom]: http://doc.crates.io/manifest.html#configuring-a-target
@ -49,7 +50,7 @@ everything, and everything in its place.
Next, our configuration file: Next, our configuration file:
```bash ```bash
$ editor Cargo.toml $ editor Cargo.toml # or 'notepad Cargo.toml' on Windows
``` ```
Make sure to get this name right: we need the capital `C`! Make sure to get this name right: we need the capital `C`!
@ -112,7 +113,7 @@ grows, we can just run `cargo build`, and itll work the right way.
When our project is finally ready for release, we can use `cargo build When our project is finally ready for release, we can use `cargo build
--release` to compile our project with optimizations. --release` to compile our project with optimizations.
We'll also notice that Cargo has created a new file: `Cargo.lock`. You'll also notice that Cargo has created a new file: `Cargo.lock`.
```toml ```toml
[root] [root]
@ -141,7 +142,7 @@ We dont have to go through this whole process every time we want to start a n
project! Cargo has the ability to make a bare-bones project directory in which project! Cargo has the ability to make a bare-bones project directory in which
we can start developing right away. we can start developing right away.
To start a new project with Cargo, use `cargo new`: To start a new project with Cargo, we use `cargo new`:
```bash ```bash
$ cargo new hello_world --bin $ cargo new hello_world --bin
@ -178,8 +179,8 @@ authors = ["Your Name <you@example.com>"]
``` ```
Cargo has populated this file with reasonable defaults based off the arguments Cargo has populated this file with reasonable defaults based off the arguments
we gave it and our `git` global configuration. We may notice that Cargo has also we gave it and our `git` global configuration. You may notice that Cargo has
initialized the `hello_world` directory as a `git` repository. also initialized the `hello_world` directory as a `git` repository.
Heres whats in `src/main.rs`: Heres whats in `src/main.rs`:
@ -199,11 +200,11 @@ Now that weve got the tools down, lets actually learn more about the Rust
language itself. These are the basics that will serve us well through the rest language itself. These are the basics that will serve us well through the rest
of our time with Rust. of our time with Rust.
We have two options: Dive into a project with [Learn Rust][learnrust], or You have two options: Dive into a project with [Learn Rust][learnrust], or
start from the bottom and work our way up with [Syntax and Semantics][syntax]. start from the bottom and work your way up with
More experienced systems programmers will probably prefer Learn Rust, while [Syntax and Semantics][syntax]. More experienced systems programmers will
those from dynamic backgrounds may enjoy either. Different people learn probably prefer Learn Rust, while those from dynamic backgrounds may enjoy
differently! Choose whatevers right for us. either. Different people learn differently! Choose whatevers right for you.
[learnrust]: learn-rust.html [learnrust]: learn-rust.html
[syntax]: syntax-and-semantics.html [syntax]: syntax-and-semantics.html

View file

@ -9,7 +9,7 @@ thing to do.
The first thing that we need to do is make a file to put our code in. I like to The first thing that we need to do is make a file to put our code in. I like to
make a `projects` directory in my home directory, and keep all my projects make a `projects` directory in my home directory, and keep all my projects
there. Rust does not care where our code lives. there. Rust doesn't care where our code lives.
This actually leads to one other concern we should address: this guide will This actually leads to one other concern we should address: this guide will
assume that we have basic familiarity with the command line. Rust itself makes assume that we have basic familiarity with the command line. Rust itself makes
@ -71,10 +71,10 @@ were arguments, they would go inside the parentheses (`(` and `)`), and because
we arent returning anything from this function, we can omit the return type we arent returning anything from this function, we can omit the return type
entirely. Well get to it later. entirely. Well get to it later.
Well also note that the function is wrapped in curly braces (`{` and `}`). Rust Youll also note that the function is wrapped in curly braces (`{` and `}`).
requires these around all function bodies. It is also considered good style to Rust requires these around all function bodies. It is also considered good style
put the opening curly brace on the same line as the function declaration, with to put the opening curly brace on the same line as the function declaration,
one space in between. with one space in between.
Next up is this line: Next up is this line:
@ -84,29 +84,29 @@ Next up is this line:
This line does all of the work in our little program. There are a number of This line does all of the work in our little program. There are a number of
details that are important here. The first is that its indented with four details that are important here. The first is that its indented with four
spaces, not tabs. Please configure our editor of choice to insert four spaces spaces, not tabs. Please configure your editor of choice to insert four spaces
with the tab key. We provide some [sample configurations for various with the tab key. We provide some
editors][configs]. [sample configurations for various editors][configs].
[configs]: https://github.com/rust-lang/rust/tree/master/src/etc/CONFIGS.md [configs]: https://github.com/rust-lang/rust/tree/master/src/etc/CONFIGS.md
The second point is the `println!()` part. This is calling a Rust The second point is the `println!()` part. This is calling a Rust
[macro][macro], which is how metaprogramming is done in Rust. If it were a [macro][macro], which is how metaprogramming is done in Rust. If it were a
function instead, it would look like this: `println()`. For our purposes, we function instead, it would look like this: `println()`. For our purposes, we
dont need to worry about this difference. Just know that sometimes, well see a `!`, dont need to worry about this difference. Just know that sometimes, well see a
and that means that were calling a macro instead of a normal function. Rust `!`, and that means that were calling a macro instead of a normal function.
implements `println!` as a macro rather than a function for good reasons, but Rust implements `println!` as a macro rather than a function for good reasons,
that's an advanced topic. One last thing to mention: Rusts macros are but that's an advanced topic. One last thing to mention: Rusts macros are
significantly different from C macros, if weve used those. Dont be scared of significantly different from C macros, if youve used those. Dont be scared of
using macros. Well get to the details eventually, well just have to take it on using macros. Well get to the details eventually, youll just have to take it
trust for now. on trust for now.
[macro]: macros.html [macro]: macros.html
Next, `"Hello, world!"` is a string. Strings are a surprisingly complicated Next, `"Hello, world!"` is a string. Strings are a surprisingly complicated
topic in a systems programming language, and this is a statically allocated topic in a systems programming language, and this is a statically allocated
string. If we want to read further about allocation, check out [the stack and string. If you want to read further about allocation, check out [the stack and
the heap][allocation], but we dont need to right now if we dont want to. We the heap][allocation], but you dont need to right now if you dont want to. We
pass this string as an argument to `println!`, which prints the string to the pass this string as an argument to `println!`, which prints the string to the
screen. Easy enough! screen. Easy enough!
@ -127,8 +127,8 @@ compiler, `rustc`, by passing it the name of our source file:
$ rustc main.rs $ rustc main.rs
``` ```
This is similar to `gcc` or `clang`, if we come from a C or C++ background. Rust This is similar to `gcc` or `clang`, if you come from a C or C++ background.
will output a binary executable. We can see it with `ls`: Rust will output a binary executable. We can see it with `ls`:
```bash ```bash
$ ls $ ls
@ -151,18 +151,19 @@ $ ./main # or main.exe on Windows
This prints out our `Hello, world!` text to our terminal. This prints out our `Hello, world!` text to our terminal.
If we come from a dynamic language like Ruby, Python, or JavaScript, we may not If you come from a dynamic language like Ruby, Python, or JavaScript, you may
be used to these two steps being separate. Rust is an ahead-of-time compiled not be used to these two steps being separate. Rust is an ahead-of-time
language, which means that we can compile a program, give it to someone else, compiled language, which means that we can compile a program, give it to
and they don't need to have Rust installed. If we give someone a `.rb` or `.py` someone else, and they don't need to have Rust installed. If we give someone a
or `.js` file, they need to have a Ruby/Python/JavaScript implementation `.rb` or `.py` or `.js` file, they need to have a Ruby/Python/JavaScript
installed, but we just need one command to both compile and run our program. implementation installed, but we just need one command to both compile and run
Everything is a tradeoff in language design, and Rust has made its choice. our program. Everything is a tradeoff in language design, and Rust has made its
choice.
Congratulations! We have officially written a Rust program. That makes us Rust Congratulations! You have officially written a Rust program. That makes you a
programmers! Welcome. 🎊🎉👍 Rust programmer! Welcome. 🎊🎉👍
Next, I'd like to introduce us to another tool, Cargo, which is used to write Next, I'd like to introduce you to another tool, Cargo, which is used to write
real-world Rust programs. Just using `rustc` is nice for simple things, but as real-world Rust programs. Just using `rustc` is nice for simple things, but as
our project grows, we'll want something to help us manage all of the options our project grows, we'll want something to help us manage all of the options
that it has, and to make it easy to share our code with other people and that it has, and to make it easy to share our code with other people and

View file

@ -24,37 +24,38 @@ $ sh rustup.sh
[insecurity]: http://curlpipesh.tumblr.com [insecurity]: http://curlpipesh.tumblr.com
If we're on Windows, please download the appropriate [installer][install-page]. If you're on Windows, please download the appropriate [installer][install-page].
**NOTE:** By default, the Windows installer will not add Rust to the %PATH%
system variable. If this is the only version of Rust we are installing and we > Note: By default, the Windows installer won't add Rust to the %PATH% system
want to be able to run it from the command line, click on "Advanced" on the > variable. If this is the only version of Rust we are installing and we want to
install dialog and on the "Product Features" page ensure "Add to PATH" is > be able to run it from the command line, click on "Advanced" on the install
installed on the local hard drive. > dialog and on the "Product Features" page ensure "Add to PATH" is installed on
> the local hard drive.
[install-page]: https://www.rust-lang.org/install.html [install-page]: https://www.rust-lang.org/install.html
## Uninstalling ## Uninstalling
If we decide we don't want Rust anymore, we'll be a bit sad, but that's okay. If you decide you don't want Rust anymore, we'll be a bit sad, but that's okay.
Not every programming language is great for everyone. Just run the uninstall Not every programming language is great for everyone. We'll just run the
script: uninstall script:
```bash ```bash
$ sudo /usr/local/lib/rustlib/uninstall.sh $ sudo /usr/local/lib/rustlib/uninstall.sh
``` ```
If we used the Windows installer, just re-run the `.msi` and it will give us an If we used the Windows installer, we'll just re-run the `.msi` and it will give
uninstall option. us an uninstall option.
## That disclaimer we promised ## That disclaimer we promised
Some people, and somewhat rightfully so, get very upset when we tell them to Some people, and somewhat rightfully so, get very upset when we tell them to
`curl | sh`. Basically, when we do this, we are trusting that the good people `curl | sh`. Basically, when they do this, they are trusting that the good
who maintain Rust aren't going to hack our computer and do bad things. That's a people who maintain Rust aren't going to hack their computer and do bad things.
good instinct! If we're one of those people, please check out the documentation That's a good instinct! If you're one of those people, please check out the
on [building Rust from Source][from-source], or [the official binary documentation on [building Rust from Source][from-source], or [the official
downloads][install-page]. binary downloads][install-page].
[from-source]: https://github.com/rust-lang/rust#building-from-source [from-source]: https://github.com/rust-lang/rust#building-from-source
@ -62,7 +63,7 @@ downloads][install-page].
Oh, we should also mention the officially supported platforms: Oh, we should also mention the officially supported platforms:
* Windows (7, 8, Server 2008 R2) * Windows (7 or later, Server 2008 R2)
* Linux (2.6.18 or later, various distributions), x86 and x86-64 * Linux (2.6.18 or later, various distributions), x86 and x86-64
* OSX 10.7 (Lion) or later, x86 and x86-64 * OSX 10.7 (Lion) or later, x86 and x86-64
@ -73,7 +74,7 @@ testing.
Finally, a comment about Windows. Rust considers Windows to be a first-class Finally, a comment about Windows. Rust considers Windows to be a first-class
platform upon release, but if we're honest, the Windows experience isn't as platform upon release, but if we're honest, the Windows experience isn't as
integrated as the Linux/OS X experience is. We're working on it! If anything integrated as the Linux/OS X experience is. We're working on it! If anything
does not work, it is a bug. Please let us know if that happens. Each and every doesn't work, it is a bug. Please let us know if that happens. Each and every
commit is tested against Windows just like any other platform. commit is tested against Windows just like any other platform.
## After installation ## After installation