Commit Graph

56140 Commits

Author SHA1 Message Date
Jonathan Turner
559bfd68e3 Rollup merge of #35613 - matthew-piziak:array-docs-trait-justification, r=steveklabnik
provide additional justification for array interface design

Explain why Rust does not implement traits for large arrays.

Explain why most methods are implemented on slices rather than arrays.

Note: I'm dipping my toes in the water with a tiny PR. Especially looking for feedback on wording and style. Points of concern: appropriate level of top-level explanation; foreshadowing (is it appropriate to imply that we expect Rust's type system to eventually support size-generic arrays?); using `Foo` and `Bar` as type variables instead of e.g. `T` and `S`.

@peschkaj
2016-08-17 06:25:24 -07:00
Jonathan Turner
997a248c01 Rollup merge of #35610 - JessRudder:33637-doc-update-for-str-representaton, r=steveklabnik
Add note to docs for &str that example is to demo internals only

r? @steveklabnik

This adds a note below the &str representation example explaining that the example provided should not be used under normal circumstances..

Would it make sense to point people in the direction of the method(s) they should use instead?  I left it out in the interest of not complicating the documentation, but, there's definitely an argument to be made for adding a bit of guidance in there.
2016-08-17 06:25:24 -07:00
Jonathan Turner
b8859f6956 Rollup merge of #35595 - urschrei:associated_types_docfix, r=steveklabnik
Clarify type declaration language in Associated Types docs

A small fix for the Associated Types docs

r? @steveklabnik
2016-08-17 06:25:23 -07:00
Jonathan Turner
d3f55e1e86 Rollup merge of #35415 - silenuss:e0030-formatting, r=jonathandturner
Update compiler error 0030 to use new error format.

Part of #35233,
Addresses #35204

r? @jonathandturner
2016-08-17 06:25:23 -07:00
Jonathan Turner
e83bff90ff Rollup merge of #34370 - steveklabnik:keyword-ref-mention, r=Manishearth
A disclaimer about keywords.

Some people cite this list as "zomg Rust has so many keywords," so make
it clear that these aren't all used by the language today.
2016-08-17 06:25:22 -07:00
Niko Matsakis
baccdc01ae make record take a closure 2016-08-17 09:24:58 -04:00
Niko Matsakis
6b76932ba8 introduce Deref/DerefMut to model subtype rel
The idea is that ItemContentBuilder is a base-type of IndexBuilder.
2016-08-17 09:03:50 -04:00
Niko Matsakis
b2c7922d7f move free encode fns into methods of IndexBuilder 2016-08-17 09:03:50 -04:00
Niko Matsakis
92f269e665 put ecx into IndexBuilder so we don't have to pass 2016-08-17 08:03:50 -04:00
Niko Matsakis
25bb51d98f store ecx, not dep-graph 2016-08-17 07:51:12 -04:00
Niko Matsakis
85ac63e9ec rename CrateIndex to IndexBuilder 2016-08-17 07:51:12 -04:00
Niko Matsakis
b5fa8ab593 move CrateIndex into its own module 2016-08-17 07:39:11 -04:00
bors
6c0d66af69 Auto merge of #35236 - nrc:rustdoc-redirects, r=@alexcrichton
rustdoc: redirect URLs

cc #35020 which does this properly

r? @alexcrichton
2016-08-17 03:20:13 -07:00
bors
d6d0590469 Auto merge of #35605 - eddyb:substs, r=nikomatsakis
Remove the ParamSpace separation from formal and actual generics in rustc.

This is the first step towards enabling the typesystem implemented by `rustc` to be extended
(with generic modules, HKT associated types, generics over constants, etc.).

The current implementation splits all formal (`ty::Generics`) and actual (`Substs`) lifetime and type parameters (and even `where` clauses) into 3 "parameter spaces":
* `TypeSpace` for `enum`, `struct`, `trait` and `impl`
* `SelfSpace` for `Self` in a `trait`
* `FnSpace` for functions and methods

For example, in `<X as Trait<A, B>>::method::<T, U>`, the `Substs` are `[[A, B], [X], [T, U]]`.
The representation uses a single `Vec` with 2 indices where it's split into the 3 "parameter spaces".
Such a simplistic approach doesn't scale beyond the Rust 1.0 typesystem, and its existence was mainly motivated by keeping code manipulating generic parameters correct, across all possible situations.

Summary of changes:
* `ty::Generics` are uniformly stored and can be queried with `tcx.lookup_generics(def_id)`
 * the `typeck::collect` changes for this resulted in a function to lazily compute the `ty::Generics` for a local node, given only its `DefId` - this can be further generalized to other kinds of type information
* `ty::Generics` and `ty::GenericPredicates` now contain only their own parameters (or `where` clauses, respectively), and refer to their "parent", forming a linked list
 * right now most items have one level of nesting, only associated items and variants having two
 * in the future, if `<X as mod1<A>::mod2<B>::mod3::Trait<C>>::Assoc<Y>` is supported, it would be represented by item with the path `mod1::mod2::mod3::Trait::Assoc`, and 4 levels of generics: `mod1` with `[A]`, `mod2` with `[B]`, `Trait` with `[X, C]` and `Assoc` with `[Y]`
* `Substs` gets two new APIs for working with arbitrary items:
 * `Substs::for_item(def_id, mk_region, mk_type)` will construct `Substs` expected by the definition `def_id`, calling `mk_region` for lifetime parameters and `mk_type` for type parameters, and it's guaranteed to *always* return `Substs` compatible with `def_id`
 * `substs.rebase_onto(from_base_def_id, to_base_substs)` can be used if `substs` is for an item nested within `from_base_def_id` (e.g. an associated item), to replace the "outer parameters" with `to_base_substs` - for example, you can translate a method's `Substs` between a `trait` and an `impl` (in both directions) if you have the `DefId` of one and `Substs` for the other
* trait objects, without a `Self` in their `Substs`, use *solely* `ExistentialTraitRef` now, letting `TraitRef` assume it *always* has a `Self` present
* both `TraitRef` and `ExistentialTraitRef` get methods which do operations on their `Substs` which are valid only for traits (or trait objects, respectively)
* `Substs` loses its "parameter spaces" distinction, with effectively no code creating `Substs` in an ad-hoc manner, or inspecting them, without knowing what shape they have already

Future plans:
* combine both lifetimes and types in a single `Vec<Kind<'tcx>>` where `Kind` would be a tagged pointer that can be `Ty<'tcx>`, `&'tcx ty::Region` or, in the future, potentially-polymorphic constants
 * this would require some performance investigation, if it implies a lot of dynamic checks
* introduce an abstraction for `(T, Substs)`, where the `Substs` are even more hidden away from code
manipulating it; a precedent for this is `Instance` in trans, which has `T = DefId`; @nikomatsakis also referred to this, as "lazy substitution", when `T = Ty`
* rewrite type pretty-printing to fully take advantage of this to inject actual in the exact places of formal generic parameters in any paths
* extend the set of type-level information (e.g. beyond `ty::Generics`) that can be lazily queried during `typeck` and introduce a way to do those queries from code that can't refer to `typeck` directly
 * this is almost unrelated but is necessary for DAG-shaped recursion between constant evaluation and type-level information, i.e. for implementing generics over constants

r? @nikomatsakis
cc @rust-lang/compiler

cc @nrc Could get any perf numbers ahead of merging this?
2016-08-16 22:52:55 -07:00
Jacob
7675e4b514 Update E0009 to new format 2016-08-16 22:21:31 -07:00
Neil Williams
4254b31078 Update minimum CMake version in README
The minimum got bumped in the LLVM upgrade of #34743.
2016-08-16 21:30:17 -07:00
Nick Cameron
879637f7b0 Review changes 2016-08-17 16:12:37 +12:00
Eduard Burtescu
9453d9b8ad rustc: remove ParamSpace from Substs. 2016-08-17 06:32:00 +03:00
Eduard Burtescu
6f5e455c2d rustc: split GenericPredicates of a method from its parent predicates. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
3e74e5bffe rustc: split Generics of a method from its parent Generics. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
c1cfd58cbd rustc: remove SelfSpace from ParamSpace. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
4158673ad7 rustc: reduce Substs and Generics to a simple immutable API. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
bfdfa1ce1d rustc_typeck: use Substs::from_generics instead of manually building them. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
4b25f08512 rustc: move trait objects from TraitRef to ExistentialTraitRef. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
5ef6af09e3 rustc: move defaulting's use of &mut Substs from InferCtxt to typeck. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
c87063f07e rustc: avoid using subst::VecPerParamSpace::{empty,new} directly. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
77dc61b5c6 rustc: force all raw accesses to VecPerParamSpace through as_full_slice. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
b354ae95a2 rustc: move the SelfSpace before TypeSpace in Substs. 2016-08-17 05:50:57 +03:00
Eduard Burtescu
e314636b86 rustc: use Vec instead of VecPerParamSpace for ty::GenericPredicates. 2016-08-17 05:50:57 +03:00
bors
9376da6f77 Auto merge of #35559 - frewsxcv:slice-iter-as-ref, r=alexcrichton
Implement `AsRef<[T]>` for `std::slice::Iter`.

`AsRef` is designed for conversions that are "cheap" (as per
the API docs). It is the case that retrieving the underlying
data of `std::slice::Iter` is cheap. In my opinion, there's no
ambiguity about what slice data will be returned, otherwise,
I would be more cautious about implementing `AsRef`.
2016-08-16 19:44:10 -07:00
Eduard Burtescu
34f856e905 Update LLVM to include 4 backported commits by @majnemer. 2016-08-17 05:37:48 +03:00
Chris Stankus
f0ff2d32c8 E0403 update error format 2016-08-16 20:49:09 -05:00
Andrew Paseltiner
7e148cd062
Make vec::IntoIter covariant again
Closes #35721
2016-08-16 20:45:07 -04:00
bors
1bf5fa3269 Auto merge of #35538 - cgswords:libproc_macro, r=nrc
Kicking off libproc_macro

This PR introduces `libproc_macro`, which is currently quite bare-bones (just a few macro construction tools and an initial `quote!` macro).

This PR also introduces a few test cases for it, and an additional `shim` file (at `src/libsyntax/ext/proc_macro_shim.rs` to allow a facsimile usage of Macros 2.0 *today*!
2016-08-16 16:35:10 -07:00
Dustin Bensing
4cfdf634c1 Update E0005 Unit-Test 2016-08-17 00:40:08 +02:00
Nick Cameron
77ca7dd107 rustdoc: redirects from sane, namespaced URLs to Rustdoc's ridiculous ones
cc #35020 which does this properly
2016-08-17 10:30:39 +12:00
Nick Cameron
a41454bf65 rustdoc: add namespaces for items 2016-08-17 10:30:39 +12:00
Nick Cameron
7a7cd644cb rustdoc: refactoring and tidying up
pulled out of #35020
2016-08-17 10:30:39 +12:00
Jorge Aparicio
1cf9cafeb1 add mips-uclibc targets
These targets cover OpenWRT 15.05 devices, which use the soft float ABI
and the uclibc library. None of the other built-in mips targets covered
those devices (mips-gnu is hard float and glibc-based, mips-musl is
musl-based).

With this commit one can now build std for these devices using these
commands:

```
$ configure --enable-rustbuild --target=mips-unknown-linux-uclibc
$ make
```

cc #35673
2016-08-16 17:12:51 -05:00
Dustin Bensing
1fc18aab5d Update E0005 to use a label 2016-08-16 23:50:32 +02:00
Amanieu d'Antras
330b7f7359 Implement RFC 1649 2016-08-16 22:22:53 +01:00
bors
514d4cef24 Auto merge of #35354 - tomgarcia:covariant-drain, r=alexcrichton
Made vec_deque::Drain, hash_map::Drain, and hash_set::Drain covariant

Fixed the rest of the Drain iterators.
2016-08-16 13:26:15 -07:00
cgswords
98c8e0a05d Proc_macro is alive 2016-08-16 13:17:36 -07:00
Mikhail Modin
193b9ae86b update to new error format E0409 2016-08-16 22:13:09 +03:00
Knight
3caa451b9d Updated E0394 to new error message 2016-08-17 03:02:25 +08:00
Knight
d2e78956c3 Updated E0422 to new error message 2016-08-17 03:02:25 +08:00
Brian Anderson
16fc02569d Bump version to 1.13 2016-08-16 11:29:50 -07:00
bors
db7300d414 Auto merge of #35637 - japaric:no-builtins-lto, r=alexcrichton
exclude `#![no_builtins]` crates from LTO

this prevents intrinsics like `memcpy` from being mis-optimized to
infinite recursive calls when LTO is used.

fixes #31544
closes #35540

---

r? @alexcrichton
cc @Amanieu
2016-08-16 10:13:18 -07:00
Corey Farwell
dc22186efb Add basic unit test for std::slice::Iter::as_slice. 2016-08-16 11:20:43 -04:00
Corey Farwell
3808dc3560 Implement AsRef<[T]> for std::slice::Iter.
`AsRef` is designed for conversions that are "cheap" (as per
the API docs). It is the case that retrieving the underlying
data of `std::slice::Iter` is cheap. In my opinion, there's no
ambiguity about what slice data will be returned, otherwise,
I would be more cautious about implementing `AsRef`.
2016-08-16 11:14:52 -04:00