Commit Graph

3493 Commits

Author SHA1 Message Date
Lawrence Woodman
e5a846e90e Correct formatting use of tab instead of spaces 2016-01-03 08:15:24 +00:00
Steve Klabnik
a73df6bf24 Rollup merge of #30620 - salty-horse:an_mut, r=brson
As discussed in issue #30568.
2015-12-30 09:24:24 -05:00
Steve Klabnik
f37e69ebb0 Rollup merge of #30502 - Luke-Nukem:master, r=steveklabnik
Rewrite of a paragraph in in the `match` section.

The colon `:` should be used only when the sentence preceeding it is a
complete sentence. If this is not the case, then a `;` should be used;
this denotes that the following fragment is a part of the previous
fragment.

I got a new bike; it has two wheels. (Similar to I got a new bike, it has two wheels)
The ice cream truck has great flavours; blueberry, blackberry, berryberry.

Writing a complete sentence:
- with a list under it
- You can join two sentences with it: Much like this.

r? @steveklabnik
2015-12-30 09:24:24 -05:00
Ori Avtalion
e8e649239c book: Replace "an &mut" with "a mut". Fixes #30568 2015-12-29 23:13:23 +02:00
Steve Klabnik
ccaa7e5146 Rollup merge of #30405 - durka:patch-12, r=steveklabnik
Fixes #30217.
2015-12-29 15:55:09 -05:00
Steve Klabnik
0c6c34de87 Remove "Learn Rust" from TRPL.
Some history:

While getting Rust to 1.0, it was a struggle to keep the book in a
working state. I had always wanted a certain kind of TOC, but couldn't
quite get it there.

At the 11th hour, I wrote up "Rust inside other langauges" and "Dining
Philosophers" in an attempt to get the book in the direction I wanted to
go. They were fine, but not my best work. I wanted to further expand
this section, but it's just never going to end up happening. We're doing
the second draft of the book now, and these sections are basically gone
already.

Here's the issues with these two sections, and removing them just fixes
it all:

// Philosophers

There was always controversy over which ones were chosen, and why. This
is kind of a perpetual bikeshed, but it comes up every once in a while.

The implementation was originally supposed to show off channels, but
never did, due to time constraints. Months later, I still haven't
re-written it to use them.

People get different results and assume that means they're wrong, rather
than the non-determinism inherent in concurrency. Platform differences
aggrivate this, as does the exact amount of sleeping and printing.

// Rust Inside Other Languages

This section is wonderful, and shows off a strength of Rust. However,
it's not clear what qualifies a language to be in this section. And I'm
not sure how tracking a ton of other languages is gonna work, into the
future; we can't test _anything_ in this section, so it's prone to
bitrot.

By removing this section, and making the Guessing Game an initial
tutorial, we will move this version of the book closer to the future
version, and just eliminate all of these questions.

In addition, this also solves the 'split-brained'-ness of having two
paths, which has endlessly confused people in the past.

I'm sad to see these sections go, but I think it's for the best.

Fixes #30471
Fixes #30163
Fixes #30162
Fixes #25488
Fixes #30345
Fixes #28713
Fixes #28915

And probably others. This lengthy list alone is enough to show that
these should have been removed.

RIP.
2015-12-29 10:58:31 -05:00
bors
ded10f4313 Auto merge of #30575 - jswalden:error-handling-typo, r=apasel422
Didn't build/test the change, but if that one-character fix isn't correct, I'll eat my hat.  :-)  Found this reading the book over the last week or two since Mozlando -- much enjoying the book so far.
2015-12-27 19:50:09 +00:00
Jeff Walden
68c0f024cf Change the typo 'that' to 'than' in the book error-handling chapter. 2015-12-27 00:24:45 -06:00
Steffen
9af75d2bec llvm: Add support for vectorcall (X86_VectorCall) convention 2015-12-26 21:40:40 +01:00
Ori Avtalion
d6d949a62a book: Fix typo 2015-12-26 22:29:02 +02:00
Manish Goregaokar
288a7e52ee Rollup merge of #30545 - bluss:operator-overload, r=steveklabnik
book: Some operator fixes for the syntax index

- Correct the names of the comparison traits (PartialOrd)
- Mention only the traits that overload the operator (PartialOrd,
  PartialEq), not operator-unrelated traits (Ord, Eq).
- Add `!=` operator.
2015-12-25 18:39:56 +05:30
Ulrik Sverdrup
1b438314a0 book: Some operator fixes for the syntax index
- Correct the names of the comparison traits (PartialOrd)
- Mention only the traits that overload the operator (PartialOrd,
  PartialEq), not operator-unrelated traits (Ord, Eq).
- Add `!=` operator.
2015-12-24 00:41:10 +01:00
Steve Klabnik
944b337c95 Rollup merge of #30543 - brson:doc, r=steveklabnik
The website will [shortly](https://github.com/rust-lang/rust-www/pull/241) provide the main documentation landing page as well as the [FAQ](https://github.com/rust-lang/rust-www/issues/202). All of the content here will be there.

This strips out everything and makes the index *just* an index into the in-tree content. My only real qualm with this is that this will become the content on doc.rust-lang.org (a sweet URL), while the main documentation page will be www.rust-lang.org/documentation.html.

r? @steveklabnik
2015-12-23 18:09:12 -05:00
Steve Klabnik
cc2731222b Rollup merge of #30473 - nwin:patch-2, r=steveklabnik
Clarify the difference between compiler-panic and libcore-panic.
2015-12-23 18:09:11 -05:00
Steve Klabnik
884021b79a Rollup merge of #30461 - lnmx:doc-typo, r=steveklabnik 2015-12-23 18:09:11 -05:00
Brian Anderson
9e99a27907 Strip the documentation index down to the essentials.
The main documentation page is now www.rust-lang.org/documentation.html
2015-12-23 14:15:13 -08:00
Brian Anderson
6c65cc1f8f Remove links to out-of-tree docs 2015-12-23 14:04:43 -08:00
Brian Anderson
2f3c472d10 Remove the FAQs in favor of the website 2015-12-23 14:03:45 -08:00
bors
da4a21e91a Auto merge of #30400 - fbergr:master, r=steveklabnik
See: https://github.com/rust-lang/rust/issues/30397

r? @steveklabnik
2015-12-21 06:02:13 +00:00
Luke Jones
1522350ecc Revert to colon. The text is introducing a list. 2015-12-21 16:24:17 +13:00
Luke Jones
1bb131cdca Update patterns.md 2015-12-21 16:20:56 +13:00
Luke Jones
fc4bb5f770 Correct line wrap 2015-12-21 16:20:20 +13:00
Luke Jones
981ac6d332 Rewrite paragraph in 'match' to be more concise and readable. Start
correcting use of ':' in sentences.
The colon `:` should be used only when the sentence preceeding it is a
complete sentence. If this is not the case, then a `;` should be used;
this denotes that the following fragment is a part of the previous
fragment.
2015-12-21 09:53:07 +13:00
nwin
aacdfb8a2a Update no-stdlib.md
Clarify the difference between compiler-panic and libcore-panic.
2015-12-19 09:19:05 +01:00
bors
440ef8b154 Auto merge of #30184 - petrochenkov:ascr, r=nikomatsakis
This PR is a rebase of the original PR by @eddyb https://github.com/rust-lang/rust/pull/21836 with some unrebasable parts manually reapplied, feature gate added + type equality restriction added as described below.

This implementation is partial because the type equality restriction is applied to all type ascription expressions and not only those in lvalue contexts. Thus, all difficulties with detection of these contexts and translation of coercions having effect in runtime are avoided.
So, you can't write things with coercions like `let slice = &[1, 2, 3]: &[u8];`. It obviously makes type ascription less useful than it should be, but it's still much more useful than not having type ascription at all.
In particular, things like `let v = something.iter().collect(): Vec<_>;` and `let u = t.into(): U;` work as expected and I'm pretty happy with these improvements alone.

Part of https://github.com/rust-lang/rust/issues/23416
2015-12-19 02:45:15 +00:00
bors
ef91cdb140 Auto merge of #29973 - petrochenkov:privinpub, r=nikomatsakis
Some notes:
This patch enforces the rules from [RFC 136](https://github.com/rust-lang/rfcs/blob/master/text/0136-no-privates-in-public.md) and makes "private in public" a module-level concept and not crate-level. Only `pub` annotations are used by the new algorithm, crate-level exported node set produced by `EmbargoVisitor` is not used. The error messages are tweaked accordingly and don't use the word "exported" to avoid confusing people (https://github.com/rust-lang/rust/issues/29668).

The old algorithm tried to be extra smart with impls, but it mostly led to unpredictable behavior and bugs like https://github.com/rust-lang/rust/issues/28325.
The new algorithm tries to be as simple as possible - an impl is considered public iff its type is public and its trait is public (if presents).
A type or trait is considered public if all its components are public, [complications](https://internals.rust-lang.org/t/limits-of-type-inference-smartness/2919) with private types leaking to other crates/modules through trait impls and type inference are deliberately ignored so far.

The new algorithm is not recursive and uses the nice new facility `Crate::visit_all_items`!

Obsolete pre-1.0 feature `visible_private_types` is removed.

This is a [breaking-change].
The two main vectors of breakage are type aliases (https://github.com/rust-lang/rust/issues/28450) and impls (https://github.com/rust-lang/rust/issues/28325).
I need some statistics from a crater run (cc @alexcrichton) to decide on the breakage mitigation strategy.
UPDATE: All the new errors are reported as warnings controlled by a lint `private_in_public` and lint group `future_incompatible`, but the intent is to make them hard errors eventually.

Closes https://github.com/rust-lang/rust/issues/28325
Closes https://github.com/rust-lang/rust/issues/28450
Closes https://github.com/rust-lang/rust/issues/29524
Closes https://github.com/rust-lang/rust/issues/29627
Closes https://github.com/rust-lang/rust/issues/29668
Closes https://github.com/rust-lang/rust/issues/30055

r? @nikomatsakis
2015-12-18 18:54:52 +00:00
Vadim Petrochenkov
95fdaf2375 Require exact type equality + add tests
+ Rebase fixes
2015-12-18 20:00:19 +03:00
lnmx
49dc357e3e doc: minor format fixes in book/error-handling 2015-12-18 10:27:39 -05:00
Manish Goregaokar
4f8b32c96f Rollup merge of #30447 - Xmasreturns:Docu, r=steveklabnik
Added sentences for description of code and changed x in the example to an int
2015-12-18 20:02:14 +05:30
Manish Goregaokar
158a1bdd7d Rollup merge of #30406 - durka:patch-13, r=sanxiyn
The previous example had no chance of compiling in either form, due to the restrictive follow set for `ty`. This one has the desired behavior: http://is.gd/kYdw4g (well, I don't exactly desire this behavior at all, but it's true at least :p )
2015-12-18 16:47:38 +05:30
Vadim Petrochenkov
f3f27a5c64 Rewrite VisiblePrivateTypesVisitor 2015-12-18 04:12:31 +03:00
Xmasreturns
2a23e4a5b0 Clarified shadowing example
Added some additional descriptive sentences and changed x to an int in
the example
2015-12-17 14:31:31 -08:00
Steve Klabnik
8cd237427c Rollup merge of #30439 - swooster:swooster-nomicon-patch-1, r=steveklabnik
The Rustonomicon's Lifetimes chapter uses the idiom "big ask", which is obscure compared to "tall order" (check [Google ngrams](https://books.google.com/ngrams/graph?content=big+ask%2C+tall+order&year_start=1800)). Also, it's easily mistaken for a typo; either "a big task" or "a big thing to ask" could plausibly work there.

r? @steveklabnik
2015-12-17 14:47:14 -05:00
Steve Klabnik
7963529b6b Rollup merge of #30404 - Shiney:ImprovedStackHeap, r=steveklabnik
…entation clearer

I could not use colors as suggested for #29854 because Github doesn't support these in markdown, however this solution may be better for color-blind readers.
2015-12-17 14:47:13 -05:00
Steve Wooster
fc862182c9 Change "big ask" to "tall order" in Rustonomicon.
The Rustonomicon's Lifetimes chapter uses the idiom "big ask", which is obscure compared to "tall order" (check Google ngrams). Also, it's easily mistaken for a typo; either "a big task" or "a big thing to ask" could plausibly work there.
2015-12-17 09:40:02 -08:00
Shiney
62fa40f87a Used bold and italic in the markdown to make the stack and heap documentation clearer 2015-12-16 20:54:02 +00:00
bors
ac2c5ff024 Auto merge of #30206 - petrochenkov:newdepr, r=brson
Closes https://github.com/rust-lang/rust/issues/29935

The attributes `deprecated` and `rustc_deprecated` are completely independent in this implementation and it leads to some noticeable code duplication. Representing `deprecated` as
```
Stability {
    level: Stable { since: "" },
    feature: "",
    depr: Some(Deprecation),
}
```
or, contrariwise, splitting rustc_deprecation from stability makes most of the duplication go away.
I can do this refactoring, but before doing it I must be sure, that further divergence of `deprecated` and `rustc_deprecated` is certainly not a goal.

cc @llogiq
2015-12-16 08:15:23 +00:00
Alex Burka
d91b256fe5 change macro ambiguity example from ty to ident
The previous example had no chance of compiling in either form, due to the restrictive follow set for `ty`. This one has the desired behavior: http://is.gd/kYdw4g (well, I don't exactly desire this behavior at all, but it's true at least :p )
2015-12-15 20:48:25 -05:00
Alex Burka
74c384bc8e remove claim that $crate is a single identifier
Fixes #30217.
2015-12-15 20:26:10 -05:00
fbergr
b9005dd472 Book: Fix link anchor in Syntax Index 2015-12-15 21:47:21 +02:00
bors
5a1045699d Auto merge of #30332 - bluss:nomicon-variance, r=gankro
Update nomicon for variance typo & contravariance

Fixes #28704
Fixes #28100
2015-12-13 11:44:39 +00:00
bors
5de242f1b2 Auto merge of #30329 - salty-horse:punctuation, r=steveklabnik
Missing period at the end of a sentence.
2015-12-13 09:57:35 +00:00
bors
35b6461b6e Auto merge of #30310 - mbrubeck:doc-vec-bounds, r=steveklabnik
r? @steveklabnik

Currently neither the API docs nor the book clearly explain that out-of-bounds array indexing causes a panic.  Since this is fairly important and seems to surprise a number of new Rust programmers, I think it's worth adding to both places.  (But if you think it would be better to put this info in the API docs only, that's fine too.)

Some specific things I'd like feedback on:

* The new text here talks about panicking, which hasn't been formally introduced at this point in chapter 5 (though it has been mentioned in previous sections too).
* Similarly the `Vec::get` example uses `Option<T>` which hasn't been fully introduced yet.  Should we leave out this example?
2015-12-13 01:53:06 +00:00
bors
1ddaf8bdf4 Auto merge of #30309 - alexcrichton:more-tier-two, r=steveklabnik
We've got lots of new automation set up in the past few months, so these
platforms are now all tier 2 as we're building artifacts and gating on them.
2015-12-12 23:50:03 +00:00
Vadim Petrochenkov
e3ed7b0501 Implement #[deprecated] attribute (RFC 1270) 2015-12-12 19:39:37 +03:00
Ulrik Sverdrup
2a30f0ea41 nomicon: Mention contravariance 2015-12-12 06:14:06 +01:00
Ulrik Sverdrup
a0101624ad nomicon: Fix variance in example
&'b mut B was described incorrectly (just in this example, is correct in
the actual text).
2015-12-11 18:24:10 +01:00
Ori Avtalion
bb3360adde book: Add missing punctuation 2015-12-11 18:18:13 +02:00
Matt Brubeck
5b9dd6a016 Document bounds checking in the book 2015-12-11 06:18:18 -08:00
Alex Crichton
453375b4d2 book: Update Tier 2 platforms
We've got lots of new automation set up in the past few months, so these
platforms are now all tier 2 as we're building artifacts and gating on them.
2015-12-10 11:50:20 -08:00
bors
ee597a8ee1 Auto merge of #30292 - Xmasreturns:patch-3, r=steveklabnik
Updated structs.md in the book
2015-12-10 04:54:03 +00:00
Xmasreturns
2adba31682 Fixes from review
Traits -> Field labels
Revert a change to convention
2015-12-09 13:25:53 -08:00
Xmasreturns
6bbe6759a5 Grammar and slight ordering changes 2015-12-09 11:37:57 -08:00
Xmasreturns
99fdf3414f Grammar changes for readability 2015-12-09 10:07:02 -08:00
Steve Klabnik
1f0f7d6fba Rollup merge of #30273 - Xmasreturns:patch-1, r=steveklabnik
Changes to readability and some clarifications for beginners
2015-12-09 00:01:17 -05:00
Steve Klabnik
ac2cb1fb7d Rollup merge of #30224 - matklad:super-docs, r=steveklabnik
Make clear that `super` may be included in the path several times.

r? @steveklabnik
2015-12-09 00:01:17 -05:00
Xmasreturns
88c407c74f Update traits.md 2015-12-08 14:56:42 -08:00
Xmasreturns
f5a4383b21 Update traits.md
Changes to readability and some clarifications for beginners
2015-12-08 14:38:55 -08:00
Steve Klabnik
de39b2cada Re-order the sections in TRPL
This ordering was significantly more confusing.
2015-12-08 15:14:56 -05:00
bors
85b031b3bc Auto merge of #30234 - vyp:doc-typo, r=apasel422 2015-12-06 13:23:43 +00:00
xd1le
85a90a3c20 doc(book/error-handling): fix typo 2015-12-06 20:32:49 +11:00
bors
078aff8928 Auto merge of #30221 - thyrgle:concurrency_doc, r=alexcrichton
The example code in the Channels subsection of the rust book give warnings about

    unused result which must be used, #[warn(unused_must_use)] on by default

Added a small pattern match to resolve those warnings.
2015-12-06 08:50:49 +00:00
bors
c4b16384f1 Auto merge of #30187 - alexcrichton:stabilize-1.6, r=aturon
This commit is the standard API stabilization commit for the 1.6 release cycle.
The list of issues and APIs below have all been through their cycle-long FCP and
the libs team decisions are listed below

Stabilized APIs

* `Read::read_exact`
* `ErrorKind::UnexpectedEof` (renamed from `UnexpectedEOF`)
* libcore -- this was a bit of a nuanced stabilization, the crate itself is now
  marked as `#[stable]` and the methods appearing via traits for primitives like
  `char` and `str` are now also marked as stable. Note that the extension traits
  themeselves are marked as unstable as they're imported via the prelude. The
  `try!` macro was also moved from the standard library into libcore to have the
  same interface. Otherwise the functions all have copied stability from the
  standard library now.
* `fs::DirBuilder`
* `fs::DirBuilder::new`
* `fs::DirBuilder::recursive`
* `fs::DirBuilder::create`
* `os::unix::fs::DirBuilderExt`
* `os::unix::fs::DirBuilderExt::mode`
* `vec::Drain`
* `vec::Vec::drain`
* `string::Drain`
* `string::String::drain`
* `vec_deque::Drain`
* `vec_deque::VecDeque::drain`
* `collections::hash_map::Drain`
* `collections::hash_map::HashMap::drain`
* `collections::hash_set::Drain`
* `collections::hash_set::HashSet::drain`
* `collections::binary_heap::Drain`
* `collections::binary_heap::BinaryHeap::drain`
* `Vec::extend_from_slice` (renamed from `push_all`)
* `Mutex::get_mut`
* `Mutex::into_inner`
* `RwLock::get_mut`
* `RwLock::into_inner`
* `Iterator::min_by_key` (renamed from `min_by`)
* `Iterator::max_by_key` (renamed from `max_by`)

Deprecated APIs

* `ErrorKind::UnexpectedEOF` (renamed to `UnexpectedEof`)
* `OsString::from_bytes`
* `OsStr::to_cstring`
* `OsStr::to_bytes`
* `fs::walk_dir` and `fs::WalkDir`
* `path::Components::peek`
* `slice::bytes::MutableByteVector`
* `slice::bytes::copy_memory`
* `Vec::push_all` (renamed to `extend_from_slice`)
* `Duration::span`
* `IpAddr`
* `SocketAddr::ip`
* `Read::tee`
* `io::Tee`
* `Write::broadcast`
* `io::Broadcast`
* `Iterator::min_by` (renamed to `min_by_key`)
* `Iterator::max_by` (renamed to `max_by_key`)
* `net::lookup_addr`

New APIs (still unstable)

* `<[T]>::sort_by_key` (added to mirror `min_by_key`)

Closes #27585
Closes #27704
Closes #27707
Closes #27710
Closes #27711
Closes #27727
Closes #27740
Closes #27744
Closes #27799
Closes #27801
cc #27801 (doesn't close as `Chars` is still unstable)
Closes #28968
2015-12-06 04:12:54 +00:00
Alex Crichton
464cdff102 std: Stabilize APIs for the 1.6 release
This commit is the standard API stabilization commit for the 1.6 release cycle.
The list of issues and APIs below have all been through their cycle-long FCP and
the libs team decisions are listed below

Stabilized APIs

* `Read::read_exact`
* `ErrorKind::UnexpectedEof` (renamed from `UnexpectedEOF`)
* libcore -- this was a bit of a nuanced stabilization, the crate itself is now
  marked as `#[stable]` and the methods appearing via traits for primitives like
  `char` and `str` are now also marked as stable. Note that the extension traits
  themeselves are marked as unstable as they're imported via the prelude. The
  `try!` macro was also moved from the standard library into libcore to have the
  same interface. Otherwise the functions all have copied stability from the
  standard library now.
* The `#![no_std]` attribute
* `fs::DirBuilder`
* `fs::DirBuilder::new`
* `fs::DirBuilder::recursive`
* `fs::DirBuilder::create`
* `os::unix::fs::DirBuilderExt`
* `os::unix::fs::DirBuilderExt::mode`
* `vec::Drain`
* `vec::Vec::drain`
* `string::Drain`
* `string::String::drain`
* `vec_deque::Drain`
* `vec_deque::VecDeque::drain`
* `collections::hash_map::Drain`
* `collections::hash_map::HashMap::drain`
* `collections::hash_set::Drain`
* `collections::hash_set::HashSet::drain`
* `collections::binary_heap::Drain`
* `collections::binary_heap::BinaryHeap::drain`
* `Vec::extend_from_slice` (renamed from `push_all`)
* `Mutex::get_mut`
* `Mutex::into_inner`
* `RwLock::get_mut`
* `RwLock::into_inner`
* `Iterator::min_by_key` (renamed from `min_by`)
* `Iterator::max_by_key` (renamed from `max_by`)

Deprecated APIs

* `ErrorKind::UnexpectedEOF` (renamed to `UnexpectedEof`)
* `OsString::from_bytes`
* `OsStr::to_cstring`
* `OsStr::to_bytes`
* `fs::walk_dir` and `fs::WalkDir`
* `path::Components::peek`
* `slice::bytes::MutableByteVector`
* `slice::bytes::copy_memory`
* `Vec::push_all` (renamed to `extend_from_slice`)
* `Duration::span`
* `IpAddr`
* `SocketAddr::ip`
* `Read::tee`
* `io::Tee`
* `Write::broadcast`
* `io::Broadcast`
* `Iterator::min_by` (renamed to `min_by_key`)
* `Iterator::max_by` (renamed to `max_by_key`)
* `net::lookup_addr`

New APIs (still unstable)

* `<[T]>::sort_by_key` (added to mirror `min_by_key`)

Closes #27585
Closes #27704
Closes #27707
Closes #27710
Closes #27711
Closes #27727
Closes #27740
Closes #27744
Closes #27799
Closes #27801
cc #27801 (doesn't close as `Chars` is still unstable)
Closes #28968
2015-12-05 15:09:44 -08:00
Christopher Sumnicht
bfb7361540 Uses unwrap instead of pattern matching 2015-12-05 15:01:05 -08:00
Aleksey Kladov
c8b7e24b14 DOCS: update reference about paths 2015-12-05 21:55:34 +03:00
Christopher Sumnicht
658f91a0cc Resolved warnings about unused result 2015-12-05 03:17:18 -08:00
Jake Worth
2217cf1af2 Fix typo 2015-12-04 12:32:36 -05:00
bors
77ed39cfe3 Auto merge of #29850 - Kimundi:attributes_that_make_a_statement, r=pnkfelix
See https://github.com/rust-lang/rfcs/pull/16 and https://github.com/rust-lang/rust/issues/15701

- Added syntax support for attributes on expressions and all syntax nodes in statement position.
- Extended `#[cfg]` folder to allow removal of statements, and
of expressions in optional positions like expression lists and trailing
block expressions.
- Extended lint checker to recognize lint levels on expressions and
locals.
- As per RFC, attributes are not yet accepted on `if` expressions.

Examples:
  ```rust
let x = y;
{
        ...
}
assert_eq!((1, #[cfg(unset)] 2, 3), (1, 3));

let FOO = 0;
```

Implementation wise, there are a few rough corners and open questions:
- The parser work ended up a bit ugly.
- The pretty printer change was based mostly on guessing.
- Similar to the `if` case, there are some places in the grammar where a new `Expr` node starts,
  but where it seemed weird to accept attributes and hence the parser doesn't. This includes:
  - const expressions in patterns
  - in the middle of an postfix operator chain (that is, after `.`, before indexing, before calls)
  - on range expressions, since `#[attr] x .. y` parses as  `(#[attr] x) .. y`, which is inconsistent with
    `#[attr] .. y` which would parse as `#[attr] (.. y)`
- Attributes are added as additional `Option<Box<Vec<Attribute>>>` fields in expressions and locals.
- Memory impact has not been measured yet.
- A cfg-away trailing expression in a block does not currently promote the previous `StmtExpr` in a block to a new trailing expr. That is to say, this won't work:
```rust
let x = {
    #[cfg(foo)]
    Foo { data: x }
    #[cfg(not(foo))]
    Foo { data: y }
};
```
- One-element tuples can have their inner expression removed to become Unit, but just Parenthesis can't. Eg, `(#[cfg(unset)] x,) == ()` but `(#[cfg(unset)] x) == error`. This seemed reasonable to me since tuples and unit are type constructors, but could probably be argued either way.
- Attributes on macro nodes are currently unconditionally dropped during macro expansion, which seemed fine since macro disappear at that point?
- Attributes on `ast::ExprParens` will be prepend-ed to the inner expression in the hir folder.
- The work on pretty printer tests for this did trigger, but not fix errors regarding macros:
  - expression `foo![]` prints as `foo!()`
  - expression `foo!{}` prints as `foo!()`
  - statement `foo![];` prints as `foo!();`
  - statement `foo!{};` prints as `foo!();`
  - statement `foo!{}` triggers a `None` unwrap ICE.
2015-12-04 08:46:29 +00:00
Mika Attila
87b865c83c Link to lazy_static crate in Design FAQ
Replace the old link pointing to an out-of-date gist with a
link to the lazy_static crate on crates.io.

We also don't need to state the author, as the crates.io page
shows the authors and owners.
2015-12-03 20:11:29 +01:00
bors
a2f58f3644 Auto merge of #30169 - shepmaster:for-loop-into-iterator, r=steveklabnik 2015-12-03 04:34:43 +00:00
Jake Goulding
06e4b709c3 Clarify that a for loop uses IntoIterator 2015-12-02 14:48:10 -05:00
bors
01bd93d310 Auto merge of #30161 - JIghtuse:master, r=steveklabnik 2015-12-02 15:06:37 +00:00
Boris Egorov
63bb3e66ee book: Provide link to tuple structs in type aliases chapter 2015-12-02 10:47:53 +06:00
Steve Klabnik
9823511b2a Rollup merge of #30154 - salty-horse:guessing_panic, r=steveklabnik
The text mentions ```return```, but what's actually happening is a ```panic!```.
2015-12-01 19:01:42 -05:00
Steve Klabnik
63015e8dc0 Rollup merge of #30153 - durka:patch-11, r=steveklabnik
I think this fixes #30137. I basically just repeated some details that were scattered around other places in this document, and emphasized that you probably don't want an `extern crate` or `mod` statement to end up inside a function.
2015-12-01 19:01:42 -05:00
Steve Klabnik
da095eecc7 Rollup merge of #30144 - pjungwir:clarify-semver-rules, r=steveklabnik
The documentation shows this:

    [dependencies]

    rand="0.3.0"

and says it allows any version compatible with 0.3.0, but then it says, "If we wanted to use only 0.3.0 exactly, we could use `=0.3.0`." That is very easy to misunderstand, so hopefully this PR will help others not to be as confused as me. :-)
2015-12-01 19:01:41 -05:00
Steve Klabnik
5e4adf96cf Rollup merge of #30134 - salty-horse:patch-1, r=steveklabnik
random/secret guess -> secret number.
2015-12-01 19:01:41 -05:00
Ori Avtalion
fa0009136d book: Change mention of unused return to panic! 2015-12-02 01:34:08 +02:00
Alex Burka
ca07c2ec21 trpl: explain how to inhibit rustdoc's auto-main
I think this fixes #30137. I basically just repeated some details that were scattered around other places in this document, and emphasized that you probably don't want an `extern crate` or `mod` statement to end up inside a function.
2015-12-01 18:18:19 -05:00
Paul A. Jungwirth
dfa0cbcb3e Clarify ambiguity about how to ask Cargo for a specific version 2015-12-01 10:03:46 -08:00
Ori Avtalion
4a35a732b7 Fix wording in Guessing Game 2015-12-01 11:59:04 +02:00
Daniel Keep
a34274c8ea trpl: additions & fixes for syntax index.
* `const`: Add reference to raw pointers
* Change `expr!(...)` etc. examples to use `ident` instead.
  *Technically*, it should be `pat`, but that's not how it works in
  practice.
* `|`: add reference to closure syntax.
* Closure syntax entry.
* Indexing and slicing entries.
2015-12-01 19:39:52 +11:00
Steve Klabnik
06df5d8042 Rollup merge of #30122 - steveklabnik:last_trpl_fix, r=Manishearth
Along with https://github.com/rust-lang/rust/pull/30121, this should fix the last fallout from https://github.com/rust-lang/rust/pull/29932
2015-11-30 18:02:22 -05:00
Steve Klabnik
30221eaedf Rollup merge of #30115 - nilcons-contrib:fix-book-stack, r=steveklabnik
The `f` argument will reference the actual value in the `d` box, not the box in the `bar`'s stack frame.

I am just learning Rust, so I don't know how to explain this well, but just from `f`'s type it is clear that it will be a pointer to an `i32`, not a pointer to a pointer. Some `println!("{:p}", ...)`'s can easily confirm this.

I would actually suggest to remove/simplify this part of the example. This is a subtle issue that can easily confuse people at the early stages of familiarizing with the language. (As I got confused by it. :))
2015-11-30 18:02:21 -05:00
Steve Klabnik
5000bd25d9 Rollup merge of #30114 - sourcefrog:doc-casts2, r=Manishearth 2015-11-30 18:02:21 -05:00
Steve Klabnik
e4ab0398ff Rollup merge of #30108 - bhargavrpatel:master, r=steveklabnik 2015-11-30 18:02:21 -05:00
Steve Klabnik
4bdb60cc34 Fix path to TRPL in doc README 2015-11-30 15:00:30 -05:00
Martin Pool
b00b32cdaa Correct grammar
Thanks @Manishearth
2015-11-30 10:16:36 -08:00
Martin Pool
f183d7a26e Additional text and examples around casting 2015-11-30 08:02:18 -08:00
Mihaly Barasz
7728742a44 Fix pointer value in the 'complex example'
The `f` argument will reference the actual value in the `d` box, not the
box in the `bar`'s stack frame.
2015-11-30 16:51:38 +01:00
Martin Pool
4a63d9fa2c Remove broken explicit coercion example 2015-11-30 07:42:14 -08:00
Bhargav Patel
7a93a3a821 Change verbiage in Stack & Heap page
Made a small change in the sentence. It seemed confusing to read the word "actual" twice in the sentence; I removed it completely.
2015-11-29 22:18:13 -05:00
bors
15ad1d199b Auto merge of #30088 - sourcefrog:doc-casts, r=steveklabnik
Based on the description in 219eca11b0/src/librustc_typeck/check/cast.rs (L11) and https://doc.rust-lang.org/nightly/nomicon/casts.html
2015-11-29 21:10:36 +00:00
Martin Pool
797d5433c9 Rephrased description of casting 2015-11-29 12:00:07 -08:00
Martin Pool
34e6995aa3 Add information about numeric casts, from the nomicon 2015-11-29 11:54:29 -08:00
bors
3db9bee903 Auto merge of #30059 - androm3da:master, r=bluss 2015-11-29 16:30:15 +00:00
bors
0b3424321c Auto merge of #29651 - tshepang:misc, r=steveklabnik 2015-11-28 18:09:07 +00:00
xd1le
fb5f3faa6b doc(book/ffi): remove duplicate link reference `[libc]' 2015-11-28 16:58:39 +11:00
Martin Pool
d6952121e0 Attempted documentation of coercions
Trying to summarize here only the cases that will make sense at the
level of the rust book
2015-11-27 17:35:12 -08:00