Commit Graph

32621 Commits

Author SHA1 Message Date
bors
9a68da7401 auto merge of #17517 : pczarn/rust/hashmap-lifetimes, r=alexcrichton
Fixes #17500
2014-09-27 18:57:46 +00:00
bors
ef112fe185 auto merge of #17334 : Gankro/rust/btree-vec, r=huonw
Replaces BTree with BTreeMap and BTreeSet, which are completely new implementations.
BTreeMap's internal Node representation is particularly inefficient at the moment to
make this first implementation easy to reason about and fairly safe. Both collections
are also currently missing some of the tooling specific to sorted collections, which
is planned as future work pending reform of these APIs. General implementation issues
are discussed with TODOs internally

[breaking-change]

Still waiting on compilation/test/bench stuff locally, but the edit-distance on any errors should be very small at this point. This is ready to be reviewed.
2014-09-27 16:17:50 +00:00
Alexis Beingessner
b6edc59413 complete btree rewrite
Replaces BTree with BTreeMap and BTreeSet, which are completely new implementations.
BTreeMap's internal Node representation is particularly inefficient at the moment to
make this first implementation easy to reason about and fairly safe. Both collections
are also currently missing some of the tooling specific to sorted collections, which
is planned as future work pending reform of these APIs. General implementation issues
are discussed with TODOs internally

Perf results on x86_64 Linux:

test treemap::bench::find_rand_100                         ... bench:        76 ns/iter (+/- 4)
test treemap::bench::find_rand_10_000                      ... bench:       163 ns/iter (+/- 6)
test treemap::bench::find_seq_100                          ... bench:        77 ns/iter (+/- 3)
test treemap::bench::find_seq_10_000                       ... bench:       115 ns/iter (+/- 1)
test treemap::bench::insert_rand_100                       ... bench:       111 ns/iter (+/- 1)
test treemap::bench::insert_rand_10_000                    ... bench:       996 ns/iter (+/- 18)
test treemap::bench::insert_seq_100                        ... bench:       486 ns/iter (+/- 20)
test treemap::bench::insert_seq_10_000                     ... bench:       800 ns/iter (+/- 15)

test btree::map::bench::find_rand_100                      ... bench:        74 ns/iter (+/- 4)
test btree::map::bench::find_rand_10_000                   ... bench:       153 ns/iter (+/- 5)
test btree::map::bench::find_seq_100                       ... bench:        82 ns/iter (+/- 1)
test btree::map::bench::find_seq_10_000                    ... bench:       108 ns/iter (+/- 0)
test btree::map::bench::insert_rand_100                    ... bench:       220 ns/iter (+/- 1)
test btree::map::bench::insert_rand_10_000                 ... bench:       620 ns/iter (+/- 16)
test btree::map::bench::insert_seq_100                     ... bench:       411 ns/iter (+/- 12)
test btree::map::bench::insert_seq_10_000                  ... bench:       534 ns/iter (+/- 14)

BTreeMap still has a lot of room for optimization, but it's already beating out TreeMap on most access patterns.

[breaking-change]
2014-09-27 10:25:46 -04:00
bors
34dfa45718 auto merge of #17511 : MatejLach/rust/iter_guide_typo, r=alexcrichton
The sentence "The new iterator `filter()` produces returns only the elements that that closure returned `true` for:"  can be structured as:

"The new iterator `filter()` produces only the elements that that closure returned `true` for:"

or as:

"The new iterator `filter()` returns only the elements that that closure returned `true` for:"

however, not both. 

I went with "produces", since it then talks about returning true and having "return" so close together doesn't sound nice. 
r @steveklabnik ?
2014-09-27 13:52:54 +00:00
bors
e04e081fa7 auto merge of #17515 : mbrubeck/rust/patch-1, r=alexcrichton
r? @steveklabnik
2014-09-27 10:07:54 +00:00
bors
6cde5c340d auto merge of #17512 : nodakai/rust/fix-ptr-guide, r=alexcrichton
Fix rust-lang/rust#17255

This is such a trivial change.  Devs: perhaps you might want to omit to run `make check` on Travis.
2014-09-27 07:43:24 +00:00
bors
606bf110bc auto merge of #17469 : sfackler/rust/into-result, r=aturon
This is the inverse of `Result::ok` and helps to bridge `Option` and
`Result` based APIs.
2014-09-27 04:02:58 +00:00
bors
43d7d7c15e auto merge of #17506 : sfackler/rust/cfg-attr, r=alexcrichton
cc #17490 

Reopening of #16230
2014-09-27 01:37:53 +00:00
bors
d64b4103d6 auto merge of #17464 : pcwalton/rust/inherent-methods-on-equal-footing, r=nikomatsakis
over inherent methods accessible via more autoderefs.

This simplifies the trait matching algorithm. It breaks code like:

    impl Foo {
        fn foo(self) {
            // before this change, this will be called
        }
    }

    impl<'a,'b,'c> Trait for &'a &'b &'c Foo {
        fn foo(self) {
            // after this change, this will be called
        }
    }

    fn main() {
        let x = &(&(&Foo));
        x.foo();
    }

To explicitly indicate that you wish to call the inherent method, perform
explicit dereferences. For example:

    fn main() {
        let x = &(&(&Foo));
        (***x).foo();
    }

Part of #17282.

[breaking-change]

r? @nikomatsakis
2014-09-26 21:47:47 +00:00
Patrick Walton
21df9c805f librustc: Give trait methods accessible via fewer autoderefs priority
over inherent methods accessible via more autoderefs.

This simplifies the trait matching algorithm. It breaks code like:

    impl Foo {
        fn foo(self) {
            // before this change, this will be called
        }
    }

    impl<'a,'b,'c> Trait for &'a &'b &'c Foo {
        fn foo(self) {
            // after this change, this will be called
        }
    }

    fn main() {
        let x = &(&(&Foo));
        x.foo();
    }

To explicitly indicate that you wish to call the inherent method, perform
explicit dereferences. For example:

    fn main() {
        let x = &(&(&Foo));
        (***x).foo();
    }

Part of #17282.

[breaking-change]
2014-09-26 13:02:47 -07:00
Steven Fackler
0c8878d042 Add Option::{ok_or, ok_or_else}
These are the inverses of `Result::ok` and help to bridge `Option` and
`Result` based APIs.
2014-09-26 09:11:53 -07:00
bors
5d653c17a6 auto merge of #17494 : aturon/rust/stabilize-mutable-slices, r=alexcrichton
This commit is another in the series of vector slice API stabilization. The focus here is the *mutable* slice API.

Largely, this API inherits the stability attributes [previously assigned](rust-lang#16332) to the analogous methods on immutable slides. It also adds comments to a few `unstable` attributes that were previously missing them.

In addition, the commit adds several `_mut` variants of APIs that were missing:

- `init_mut`
- `head_mut`
- `tail_mut`
- `splitn_mut`
- `rsplitn_mut`

Some of the unsafe APIs -- `unsafe_set`, `init_elem`, and `copy_memory` -- were deprecated in favor of working through `as_mut_ptr`, to simplify the API surface.

Due to deprecations, this is a:

[breaking-change]
2014-09-26 11:44:01 +00:00
bors
aed9cc1539 auto merge of #17549 : brson/rust/morewinfail, r=alexcrichton
32-bit builds pass the full 'make check' on the bots after this.
2014-09-26 05:57:49 +00:00
Brian Anderson
6f5f2be392 Ignore two I/O tests that are failing on the win32 bot 2014-09-25 20:49:15 -07:00
bors
e31680ac2d auto merge of #17504 : danburkert/rust/tuple-serialization, r=alexcrichton
The tuple serialization logic should be using the tuple-specific emit function.  This fixes part of #17158.  The JSON encoder already proxies to `emit_seq_elt` when `emit_tuple_arg` is called, so this should have an effect.
2014-09-26 03:32:46 +00:00
Aaron Turon
c59ef666a5 Add tests for new _mut variants 2014-09-25 17:46:03 -07:00
Aaron Turon
af3cfcc9ea Fallout from deprecation 2014-09-25 17:46:03 -07:00
Aaron Turon
4f509a1e47 Stabilize mutable slice API
This commit is another in the series of vector slice API
stabilization. The focus here is the *mutable* slice API.

Largely, this API inherits the stability attributes [previously
assigned](https://github.com/rust-lang/rust/pull/16332) to the analogous
methods on immutable slides. It also adds comments to a few `unstable`
attributes that were previously missing them.

In addition, the commit adds several `_mut` variants of APIs that were
missing:

- `init_mut`
- `head_mut`
- `tail_mut`
- `splitn_mut`
- `rsplitn_mut`

Some of the unsafe APIs -- `unsafe_set`, `init_elem`, and `copy_memory`
-- were deprecated in favor of working through `as_mut_ptr`, to simplify
the API surface.

Due to deprecations, this is a:

[breaking-change]
2014-09-25 17:46:03 -07:00
bors
bb66281b26 auto merge of #17495 : alexcrichton/rust/snapshots, r=pcwalton
cc @nick29581
2014-09-26 00:27:45 +00:00
bors
2550243b41 auto merge of #17466 : nikomatsakis/rust/oibt, r=pcwalton
Moves the vast majority of builtin bound checking out of type contents and into the trait system.

This is a preliminary step for a lot of follow-on work:

- opt-in builtin types, obviously
- generalized where clauses, because TypeContents has this notion that a type parameter has a single set of builtin kinds, but with where clauses it depends on context
- generalized coherence, because this adds support for recursive trait selection

Unfortunately I wasn't able to completely remove Type Contents from the front-end checking in this PR. It's still used by EUV to decide what gets moved and what doesn't.

r? @pcwalton
2014-09-25 19:02:44 +00:00
Niko Matsakis
6473909a1b Fix various places that were affected by adding core as dep of libc 2014-09-25 13:59:24 -04:00
bors
3be6a2fba8 auto merge of #17482 : hoeppnertill/rust/master, r=alexcrichton
Intended to prevent each user to write his own partial_min/max, possibly differing in slight details. @sfackler encouraged to PR this on IRC.

(Let's hope this works... First PR.)
2014-09-25 17:17:43 +00:00
bors
3f8da69618 auto merge of #17455 : steveklabnik/rust/document_default, r=alexcrichton
Given that the `Default` module is now stable, it might as well get good docs.
2014-09-25 15:32:49 +00:00
Matej Lach
9ca399f14e Correct tense 2014-09-25 16:13:20 +01:00
bors
58413c09cd auto merge of #17498 : coyotebush/rust/iter-doc, r=huonw
OrdIterator: the doc says that values must implement `PartialOrd`, while the implementation is only for `Ord` values. It looks like this initially got out of sync in 4e1c215. Removed the doc sentence entirely since it seems redundant.

MultiplicativeIterator: Fixed weird sentence.
2014-09-25 13:47:46 +00:00
Till Hoeppner
29c2d3df52 Add partial_min/max to libcore/cmp
Add partial_min/max to libcore/cmp

Match against None and mark as experimental

Shortened documentation.

Removed whitespace
2014-09-25 14:12:03 +02:00
bors
375fe17218 auto merge of #17497 : nodakai/rust/libnative-misc-fixes, r=alexcrichton
libnative/io: datasync() wrongly called fsync().
liblibc and libnative: send() should use const buffers.
2014-09-25 12:02:52 +00:00
Niko Matsakis
ca8e563bb7 Remove as much of TypeContents as I can -- unfortunately, it is still
used by EUV to compute whether a given type moves-by-default.
2014-09-25 07:09:13 -04:00
Niko Matsakis
3694f42b8c Move checking of whether fields are Sized or not into wf / trait code. 2014-09-25 07:09:13 -04:00
Niko Matsakis
e924357554 Remove the last redundant check from kindck, and then remove the pass as well. 2014-09-25 07:09:13 -04:00
Niko Matsakis
2ec305d1bc Move checks for closure bounds out of kind.rs 2014-09-25 07:09:08 -04:00
Niko Matsakis
034f69ec4b Remove redundant local variable checks. 2014-09-25 07:08:36 -04:00
Niko Matsakis
62e5dc929c Remove checks that are already being done during typeck 2014-09-25 07:07:51 -04:00
Niko Matsakis
7119974f82 Move unsafe destructor check from kind.rs into wf.rs 2014-09-25 07:06:28 -04:00
Niko Matsakis
c31623b0e4 Integrate caching of results. Measurements show approx 90% hit rate. 2014-09-25 07:06:27 -04:00
Niko Matsakis
effb3636cc Integrate builtin bounds fully into the trait checker 2014-09-25 07:06:27 -04:00
bors
d299bafb31 auto merge of #17492 : alexcrichton/rust/issue-16274, r=aturon
Details in the commits.
2014-09-25 07:12:37 +00:00
bors
9ff308137a auto merge of #17428 : fhahn/rust/issue-16114-rename-begin-unwind-2, r=alexcrichton
This is a PR for #16114 and includes to following things:

* Rename `begin_unwind` lang item to `fail_fmt`
*  Rename `core::failure::begin_unwind` to `fail_impl`
* Rename `fail_` lang item to `fail`
2014-09-25 05:17:31 +00:00
bors
5e13d3aa00 auto merge of #17378 : Gankro/rust/hashmap-entry, r=aturon
Deprecates the `find_or_*` family of "internal mutation" methods on `HashMap` in
favour of the "external mutation" Entry API as part of RFC 60. Part of #17320,
but this still needs to be done on the rest of the maps. However they don't have
any internal mutation methods defined, so they can be done without deprecating
or breaking anything. Work on `BTree` is part of the complete rewrite in #17334.

The implemented API deviates from the API described in the RFC in two key places:

* `VacantEntry.set` yields a mutable reference to the inserted element to avoid code
duplication where complex logic needs to be done *regardless* of whether the entry
was vacant or not.
* `OccupiedEntry.into_mut` was added so that it is possible to return a reference
into the map beyond the lifetime of the Entry itself, providing functional parity
to `VacantEntry.set`.

This allows the full find_or_insert functionality to be implemented using this API.
A PR will be submitted to the RFC to amend this.

[breaking-change]
2014-09-25 03:32:36 +00:00
Alexis Beingessner
fe8a413fc0 handling fallout from entry api 2014-09-24 21:53:58 -04:00
Alexis Beingessner
8e58f3088b implement entry API for HashMap
Deprecates the `find_or_*` family of "internal mutation" methods on `HashMap` in
favour of the "external mutation" Entry API as part of RFC 60. Part of #17320,
although this still needs to be done on the rest of the maps, they don't have
any internal mutation methods defined, so they can be done without deprecating
or breaking anything. Work on `BTree`'s is part of the complete rewrite in #17334.

The implemented API deviates from the API described in the RFC in two key places:

* `VacantEntry.set` yields a mutable reference to the inserted element to avoid code
duplication where complex logic needs to be done *regardless* of whether the entry
was vacant or not.
* `OccupiedEntry.into_mut` was added so that it is possible to return a reference
into the map beyond the lifetime of the Entry itself, providing functional parity
to `VacantEntry.set`.

This allows the full find_or_insert functionality to be implemented using this API.
A PR will be submitted to the RFC to amend this.

[breaking-change]
2014-09-24 21:53:57 -04:00
Steve Klabnik
03b96d1ab6 Beef up Default documentation 2014-09-24 20:35:33 -04:00
Florian Hahn
c8b767dd3d Rename begin_unwind_string to fail_str, refs #16114 2014-09-25 01:09:14 +02:00
Florian Hahn
1c7d253ca3 Rename fail_ lang item to fail, closes #16114 2014-09-25 01:09:09 +02:00
Florian Hahn
45f4081e61 Rename core::failure::begin_unwind to fail_impl, refs #16114 2014-09-24 23:44:00 +02:00
Florian Hahn
9a01da9460 Rename begin_unwind lang item to fail_fmt, refs #16114 2014-09-24 23:44:00 +02:00
bors
4d69696ff6 auto merge of #17410 : jakub-/rust/dead-code, r=alexcrichton 2014-09-24 20:35:52 +00:00
Jakub Wieczorek
fd52224e78 Remove dead code from librustc 2014-09-24 21:03:55 +02:00
Jakub Wieczorek
5bcc154dff Remove unused enum variants 2014-09-24 21:03:55 +02:00
Jakub Wieczorek
3530e4a647 Use more descriptive names in dead code messages 2014-09-24 21:03:55 +02:00