Aaron Turon
d8dfe1957b
Align with _mut conventions
...
As per [RFC
52](https://github.com/rust-lang/rfcs/blob/master/active/0052-ownership-variants.md ),
use `_mut` suffixes to mark mutable variants, and `into_iter` for moving
iterators.
[breaking-change]
2014-09-16 11:46:52 -07:00
bors
828e075abd
auto merge of #17266 : Gankro/rust/vec-move, r=alexcrichton
...
Seems to correctly report exact size, so it should claim to do so formally.
2014-09-16 17:06:00 +00:00
bors
3212d70302
auto merge of #17280 : thestinger/rust/heap, r=pcwalton
2014-09-16 04:56:01 +00:00
Daniel Micay
84b37374bf
heap: optimize EMPTY to avoid relocations
...
Sized deallocation makes it pointless to provide an address that never
overlaps with pointers returned by an allocator. Code can branch on the
capacity of the allocation instead of a comparison with this sentinel.
This improves the situation in #8859 , and the remaining issues are only
from the logging API, which should be disabled by default in optimized
release builds anyway along with debug assertions. The remaining issues
are part of #17081 .
Closes #8859
2014-09-15 16:48:20 -04:00
bors
8e2860407b
auto merge of #16887 : steveklabnik/rust/guide_iterators, r=alexcrichton
...
This isn't ready to merge yet.
The 'containers and iterators' guide is basically just a collection of stuff that should be in the module definitions. So I'm moving the guide to just an 'iterators' guide, and moved the info that was there into the right places.
So, is this a good path forward, and is all of the information still correct?
2014-09-15 15:11:12 +00:00
Alexis Beingessner
975569b380
impl ExactSize for vec::MoveItems
2014-09-14 23:25:08 -04:00
Tobias Bucher
2c7f6eee0c
Fixed map_in_place
tests after rustc upgrade
...
This replaces the now obsolete syntax `&[]` with `[].as_slice()`.
2014-09-14 21:35:49 +02:00
Tobias Bucher
7ccab3ae8a
Added missing }
from map_in_place
rebase
2014-09-14 21:35:49 +02:00
Tobias Bucher
79427f0bc0
Remove the unused Iterator
implementation of the private PartialVec
2014-09-14 21:35:49 +02:00
Tobias Bucher
b7e0969a49
Minimize the public interface and rename it to map_in_place
2014-09-14 21:35:48 +02:00
Tobias Bucher
5efa232160
Check that the min_align_of
the both types in a PartialVec
matches
...
This is important because the underlying allocator of the `Vec` passes that
information to the deallocator which needs the guarantee that it is the same
parameters that were also passed to the allocation function.
2014-09-14 21:35:48 +02:00
Tobias Bucher
23f2c78d21
Fix some of the issues mentioned in the PR on Github
...
This specifically includes:
- Fix of the tests
- Remove `transmute` between `Vec`s of different types
2014-09-14 21:35:48 +02:00
Tobias Bucher
af293372e4
PartialVec: Remove TODOs and rename unwrap
to into_vec
2014-09-14 21:35:48 +02:00
Tobias Bucher
dbc3cb3a54
Add support for in-place map for Vec
s of types with same size
...
This is implemented using a new struct `PartialVec` which implements the proper
drop semantics in case the conversion is interrupted by an unwind.
2014-09-14 21:35:48 +02:00
Steve Klabnik
84030fd05a
Move info into individual modules.
2014-09-13 15:05:56 -04:00
Julian Orth
d34992ecba
Add unwrap method to MoveItems
2014-08-31 17:27:49 +02:00
Niko Matsakis
1b487a8906
Implement generalized object and type parameter bounds ( Fixes #16462 )
2014-08-27 21:46:52 -04:00
P1start
f2aa88ca06
A few minor documentation fixes
2014-08-19 17:22:18 +12:00
Patrick Walton
67deb2e65e
libsyntax: Remove the use foo = bar
syntax from the language in favor
...
of `use bar as foo`.
Change all uses of `use foo = bar` to `use bar as foo`.
Implements RFC #47 .
Closes #16461 .
[breaking-change]
2014-08-18 09:19:10 -07:00
Patrick Walton
7f928d150e
librustc: Forbid external crates, imports, and/or items from being
...
declared with the same name in the same scope.
This breaks several common patterns. First are unused imports:
use foo::bar;
use baz::bar;
Change this code to the following:
use baz::bar;
Second, this patch breaks globs that import names that are shadowed by
subsequent imports. For example:
use foo::*; // including `bar`
use baz::bar;
Change this code to remove the glob:
use foo::{boo, quux};
use baz::bar;
Or qualify all uses of `bar`:
use foo::{boo, quux};
use baz;
... baz::bar ...
Finally, this patch breaks code that, at top level, explicitly imports
`std` and doesn't disable the prelude.
extern crate std;
Because the prelude imports `std` implicitly, there is no need to
explicitly import it; just remove such directives.
The old behavior can be opted into via the `import_shadowing` feature
gate. Use of this feature gate is discouraged.
This implements RFC #116 .
Closes #16464 .
[breaking-change]
2014-08-16 19:32:25 -07:00
Brian Anderson
12e851208d
collections: Deprecate Vec::tailn. Same as slice_from
2014-08-13 11:30:15 -07:00
Brian Anderson
033f28d436
core: Rename ImmutableSlice::unsafe_ref to unsafe_get
...
Deprecate the previous.
2014-08-13 11:30:14 -07:00
Brian Anderson
fbc93082ec
std: Rename slice::Vector to Slice
...
This required some contortions because importing both raw::Slice
and slice::Slice makes rustc crash.
Since `Slice` is in the prelude, this renaming is unlikely to
casue breakage.
[breaking-change]
2014-08-13 11:30:14 -07:00
Brian Anderson
4f5b6927e8
std: Rename various slice traits for consistency
...
ImmutableVector -> ImmutableSlice
ImmutableEqVector -> ImmutableEqSlice
ImmutableOrdVector -> ImmutableOrdSlice
MutableVector -> MutableSlice
MutableVectorAllocating -> MutableSliceAllocating
MutableCloneableVector -> MutableCloneableSlice
MutableOrdVector -> MutableOrdSlice
These are all in the prelude so most code will not break.
[breaking-change]
2014-08-13 11:30:14 -07:00
Aaron Turon
f77cabecbb
Deprecation fallout in libcollections
2014-08-12 13:35:56 -07:00
Nathan Froyd
0d974eecd3
fix grammar in Vec.retain's doc comment
2014-08-07 11:27:06 -04:00
Alexis Beingessner
d9b2e6b74f
fix underflow in vec swap_remove
...
fixes #16200
2014-08-02 14:50:29 -04:00
Patrick Walton
5b85c8cbe7
librustc: Forbid pattern bindings after @
s, for memory safety.
...
This is an alternative to upgrading the way rvalues are handled in the
borrow check. Making rvalues handled more like lvalues in the borrow
check caused numerous problems related to double mutable borrows and
rvalue scopes. Rather than come up with more borrow check rules to try
to solve these problems, I decided to just forbid pattern bindings after
`@`. This affected fewer than 10 lines of code in the compiler and
libraries.
This breaks code like:
match x {
y @ z => { ... }
}
match a {
b @ Some(c) => { ... }
}
Change this code to use nested `match` or `let` expressions. For
example:
match x {
y => {
let z = y;
...
}
}
match a {
Some(c) => {
let b = Some(c);
...
}
}
Closes #14587 .
[breaking-change]
2014-08-01 08:45:22 -07:00
Brian Anderson
71a75cc2ce
Just land already
2014-07-23 13:20:17 -07:00
Brian Anderson
63d1137d68
collections: Tweak docs for push
2014-07-23 13:20:17 -07:00
Brian Anderson
9db1d35687
collections: Deprecate shift/unshift
...
Use insert/remove instead.
2014-07-23 13:20:16 -07:00
Brian Anderson
7c61bb7213
collections: Move push/pop docs to MutableSeq
2014-07-23 13:20:16 -07:00
Brian Anderson
d36a8f3f9c
collections: Move push/pop to MutableSeq
...
Implement for Vec, DList, RingBuf. Add MutableSeq to the prelude.
Since the collections traits are in the prelude most consumers of
these methods will continue to work without change.
[breaking-change]
2014-07-23 13:20:10 -07:00
Jonas Hietala
8d54ec8f4b
doc: Normalize example style
...
Remove unnecessary `use std::vec::Vec`. Use ``` code blocks
with rust as default instead of spelling it out.
2014-07-22 14:06:45 +02:00
Jonas Hietala
eafcf6ba41
doc: Vec::from_raw_parts.
...
Also more explicit raw pointer handling in unsafe examples.
2014-07-22 14:06:45 +02:00
Jonas Hietala
4357da3560
doc: Fill vec documentation with examples.
...
Add more useful functions to main example.
2014-07-22 11:07:49 +02:00
Jonas Hietala
c004bebc9e
doc: Use vec![] instead of vec!() in Vec.
2014-07-22 10:33:26 +02:00
Alex Crichton
414862db3c
Test fixes from the rollup
...
Closes #15690 (Guide: improve error handling)
Closes #15729 (Guide: guessing game)
Closes #15751 (repair macro docs)
Closes #15766 (rustc: Print a smaller hash on -v)
Closes #15815 (Add unit test for rlibc)
Closes #15820 (Minor refactoring and features in rustc driver for embedders)
Closes #15822 (rustdoc: Add an --extern flag analagous to rustc's)
Closes #15824 (Document Deque trait and bitv.)
Closes #15832 (syntax: Join consecutive string literals in format strings together)
Closes #15837 (Update LLVM to include NullCheckElimination pass)
Closes #15841 (Rename to_str to to_string)
Closes #15847 (Purge #[!resolve_unexported] from the compiler)
Closes #15848 (privacy: Add publically-reexported foreign item to exported item set)
Closes #15849 (fix string in from_utf8_lossy_100_multibyte benchmark)
Closes #15850 (Get rid of few warnings in tests)
Closes #15852 (Clarify the std::vec::Vec::with_capacity docs)
2014-07-21 10:18:17 -07:00
P1start
37bb6ed302
Clarify the std::vec::Vec docs regarding capacity
2014-07-21 09:55:08 -07:00
bors
8a308b167f
auto merge of #15725 : aochagavia/rust/vec, r=alexcrichton
...
* Deprecated `to_owned` in favor of `to_vec`
* Deprecated `into_owned` in favor of `into_vec`
[breaking-change]
2014-07-18 03:46:23 +00:00
Adolfo Ochagavía
8107ef77f0
Rename functions in the CloneableVector trait
...
* Deprecated `to_owned` in favor of `to_vec`
* Deprecated `into_owned` in favor of `into_vec`
[breaking-change]
2014-07-17 16:35:48 +02:00
Nick Cameron
aa760a849e
deprecate Vec::get
2014-07-17 12:08:31 +12:00
Nick Cameron
b35d1a8368
Implement Index and IndexMut for Vec
2014-07-17 09:06:56 +12:00
bors
66e1f11ef4
auto merge of #15471 : erickt/rust/push_all, r=acrichto
...
llvm is currently not able to conver `Vec::extend` into a memcpy for `Copy` types, which results in methods like `Vec::push_all` to run twice as slow as it should be running. This patch takes the unsafe `Vec::clone` optimization to speed up all the operations that are cloning a slice into a `Vec`.
before:
```
test vec::tests::bench_clone_from_0000_0000 ... bench: 12 ns/iter (+/- 2)
test vec::tests::bench_clone_from_0000_0010 ... bench: 125 ns/iter (+/- 4) = 80 MB/s
test vec::tests::bench_clone_from_0000_0100 ... bench: 360 ns/iter (+/- 33) = 277 MB/s
test vec::tests::bench_clone_from_0000_1000 ... bench: 2601 ns/iter (+/- 175) = 384 MB/s
test vec::tests::bench_clone_from_0010_0000 ... bench: 12 ns/iter (+/- 2)
test vec::tests::bench_clone_from_0010_0010 ... bench: 125 ns/iter (+/- 10) = 80 MB/s
test vec::tests::bench_clone_from_0010_0100 ... bench: 361 ns/iter (+/- 28) = 277 MB/s
test vec::tests::bench_clone_from_0100_0010 ... bench: 131 ns/iter (+/- 13) = 76 MB/s
test vec::tests::bench_clone_from_0100_0100 ... bench: 360 ns/iter (+/- 9) = 277 MB/s
test vec::tests::bench_clone_from_0100_1000 ... bench: 2575 ns/iter (+/- 168) = 388 MB/s
test vec::tests::bench_clone_from_1000_0100 ... bench: 356 ns/iter (+/- 20) = 280 MB/s
test vec::tests::bench_clone_from_1000_1000 ... bench: 2605 ns/iter (+/- 167) = 383 MB/s
test vec::tests::bench_from_slice_0000 ... bench: 11 ns/iter (+/- 0)
test vec::tests::bench_from_slice_0010 ... bench: 115 ns/iter (+/- 5) = 86 MB/s
test vec::tests::bench_from_slice_0100 ... bench: 309 ns/iter (+/- 170) = 323 MB/s
test vec::tests::bench_from_slice_1000 ... bench: 2065 ns/iter (+/- 198) = 484 MB/s
test vec::tests::bench_push_all_0000_0000 ... bench: 7 ns/iter (+/- 0)
test vec::tests::bench_push_all_0000_0010 ... bench: 79 ns/iter (+/- 7) = 126 MB/s
test vec::tests::bench_push_all_0000_0100 ... bench: 342 ns/iter (+/- 18) = 292 MB/s
test vec::tests::bench_push_all_0000_1000 ... bench: 2873 ns/iter (+/- 75) = 348 MB/s
test vec::tests::bench_push_all_0010_0010 ... bench: 154 ns/iter (+/- 8) = 64 MB/s
test vec::tests::bench_push_all_0100_0100 ... bench: 518 ns/iter (+/- 18) = 193 MB/s
test vec::tests::bench_push_all_1000_1000 ... bench: 4490 ns/iter (+/- 223) = 222 MB/s
```
after:
```
test vec::tests::bench_clone_from_0000_0000 ... bench: 12 ns/iter (+/- 1)
test vec::tests::bench_clone_from_0000_0010 ... bench: 123 ns/iter (+/- 5) = 81 MB/s
test vec::tests::bench_clone_from_0000_0100 ... bench: 367 ns/iter (+/- 23) = 272 MB/s
test vec::tests::bench_clone_from_0000_1000 ... bench: 2618 ns/iter (+/- 252) = 381 MB/s
test vec::tests::bench_clone_from_0010_0000 ... bench: 12 ns/iter (+/- 1)
test vec::tests::bench_clone_from_0010_0010 ... bench: 124 ns/iter (+/- 7) = 80 MB/s
test vec::tests::bench_clone_from_0010_0100 ... bench: 369 ns/iter (+/- 34) = 271 MB/s
test vec::tests::bench_clone_from_0100_0010 ... bench: 123 ns/iter (+/- 6) = 81 MB/s
test vec::tests::bench_clone_from_0100_0100 ... bench: 371 ns/iter (+/- 25) = 269 MB/s
test vec::tests::bench_clone_from_0100_1000 ... bench: 2713 ns/iter (+/- 532) = 368 MB/s
test vec::tests::bench_clone_from_1000_0100 ... bench: 369 ns/iter (+/- 14) = 271 MB/s
test vec::tests::bench_clone_from_1000_1000 ... bench: 2611 ns/iter (+/- 194) = 382 MB/s
test vec::tests::bench_from_slice_0000 ... bench: 7 ns/iter (+/- 0)
test vec::tests::bench_from_slice_0010 ... bench: 108 ns/iter (+/- 4) = 92 MB/s
test vec::tests::bench_from_slice_0100 ... bench: 235 ns/iter (+/- 24) = 425 MB/s
test vec::tests::bench_from_slice_1000 ... bench: 1318 ns/iter (+/- 96) = 758 MB/s
test vec::tests::bench_push_all_0000_0000 ... bench: 7 ns/iter (+/- 0)
test vec::tests::bench_push_all_0000_0010 ... bench: 70 ns/iter (+/- 4) = 142 MB/s
test vec::tests::bench_push_all_0000_0100 ... bench: 176 ns/iter (+/- 16) = 568 MB/s
test vec::tests::bench_push_all_0000_1000 ... bench: 1125 ns/iter (+/- 94) = 888 MB/s
test vec::tests::bench_push_all_0010_0010 ... bench: 159 ns/iter (+/- 15) = 62 MB/s
test vec::tests::bench_push_all_0100_0100 ... bench: 363 ns/iter (+/- 12) = 275 MB/s
test vec::tests::bench_push_all_1000_1000 ... bench: 2860 ns/iter (+/- 415) = 349 MB/s
```
This also includes extra benchmarks for `Vec` and `MemWriter`.
2014-07-09 20:21:29 +00:00
Erick Tryzelaar
b4984a490b
collections: merge unsafe_push_all_clone and push_all
2014-07-07 09:45:00 -07:00
Erick Tryzelaar
e2d107c397
collections: minimize code that's in unsafe blocks
...
This changes Vec::from_slice to call unsafe_push_all_clone
directly to avoid doing an unnecessary reserve_additional call
2014-07-07 09:16:36 -07:00
Erick Tryzelaar
7d3899430b
collections: flesh out the Vec::clone_from benchmarks to cover reuse
2014-07-07 09:16:36 -07:00
Erick Tryzelaar
f1ea540e90
collections: Optimize Vec when cloning from a slice
...
llvm is currently not able to conver `Vec::extend` into a memcpy
for `Copy` types, which results in methods like `Vec::push_all`
to run twice as slow as it should be running. This patch takes
the unsafe `Vec::clone` optimization to speed up all the operations
that are cloning a slice into a `Vec`.
before:
test vec::tests::bench_clone_from_0000_0000 ... bench: 12 ns/iter (+/- 2)
test vec::tests::bench_clone_from_0000_0010 ... bench: 125 ns/iter (+/- 4) = 80 MB/s
test vec::tests::bench_clone_from_0000_0100 ... bench: 360 ns/iter (+/- 33) = 277 MB/s
test vec::tests::bench_clone_from_0000_1000 ... bench: 2601 ns/iter (+/- 175) = 384 MB/s
test vec::tests::bench_clone_from_0010_0000 ... bench: 12 ns/iter (+/- 2)
test vec::tests::bench_clone_from_0010_0010 ... bench: 125 ns/iter (+/- 10) = 80 MB/s
test vec::tests::bench_clone_from_0010_0100 ... bench: 361 ns/iter (+/- 28) = 277 MB/s
test vec::tests::bench_clone_from_0100_0010 ... bench: 131 ns/iter (+/- 13) = 76 MB/s
test vec::tests::bench_clone_from_0100_0100 ... bench: 360 ns/iter (+/- 9) = 277 MB/s
test vec::tests::bench_clone_from_0100_1000 ... bench: 2575 ns/iter (+/- 168) = 388 MB/s
test vec::tests::bench_clone_from_1000_0100 ... bench: 356 ns/iter (+/- 20) = 280 MB/s
test vec::tests::bench_clone_from_1000_1000 ... bench: 2605 ns/iter (+/- 167) = 383 MB/s
test vec::tests::bench_from_slice_0000 ... bench: 11 ns/iter (+/- 0)
test vec::tests::bench_from_slice_0010 ... bench: 115 ns/iter (+/- 5) = 86 MB/s
test vec::tests::bench_from_slice_0100 ... bench: 309 ns/iter (+/- 170) = 323 MB/s
test vec::tests::bench_from_slice_1000 ... bench: 2065 ns/iter (+/- 198) = 484 MB/s
test vec::tests::bench_push_all_0000_0000 ... bench: 7 ns/iter (+/- 0)
test vec::tests::bench_push_all_0000_0010 ... bench: 79 ns/iter (+/- 7) = 126 MB/s
test vec::tests::bench_push_all_0000_0100 ... bench: 342 ns/iter (+/- 18) = 292 MB/s
test vec::tests::bench_push_all_0000_1000 ... bench: 2873 ns/iter (+/- 75) = 348 MB/s
test vec::tests::bench_push_all_0010_0010 ... bench: 154 ns/iter (+/- 8) = 64 MB/s
test vec::tests::bench_push_all_0100_0100 ... bench: 518 ns/iter (+/- 18) = 193 MB/s
test vec::tests::bench_push_all_1000_1000 ... bench: 4490 ns/iter (+/- 223) = 222 MB/s
after:
test vec::tests::bench_clone_from_0000_0000 ... bench: 12 ns/iter (+/- 1)
test vec::tests::bench_clone_from_0000_0010 ... bench: 123 ns/iter (+/- 5) = 81 MB/s
test vec::tests::bench_clone_from_0000_0100 ... bench: 367 ns/iter (+/- 23) = 272 MB/s
test vec::tests::bench_clone_from_0000_1000 ... bench: 2618 ns/iter (+/- 252) = 381 MB/s
test vec::tests::bench_clone_from_0010_0000 ... bench: 12 ns/iter (+/- 1)
test vec::tests::bench_clone_from_0010_0010 ... bench: 124 ns/iter (+/- 7) = 80 MB/s
test vec::tests::bench_clone_from_0010_0100 ... bench: 369 ns/iter (+/- 34) = 271 MB/s
test vec::tests::bench_clone_from_0100_0010 ... bench: 123 ns/iter (+/- 6) = 81 MB/s
test vec::tests::bench_clone_from_0100_0100 ... bench: 371 ns/iter (+/- 25) = 269 MB/s
test vec::tests::bench_clone_from_0100_1000 ... bench: 2713 ns/iter (+/- 532) = 368 MB/s
test vec::tests::bench_clone_from_1000_0100 ... bench: 369 ns/iter (+/- 14) = 271 MB/s
test vec::tests::bench_clone_from_1000_1000 ... bench: 2611 ns/iter (+/- 194) = 382 MB/s
test vec::tests::bench_from_slice_0000 ... bench: 7 ns/iter (+/- 0)
test vec::tests::bench_from_slice_0010 ... bench: 108 ns/iter (+/- 4) = 92 MB/s
test vec::tests::bench_from_slice_0100 ... bench: 235 ns/iter (+/- 24) = 425 MB/s
test vec::tests::bench_from_slice_1000 ... bench: 1318 ns/iter (+/- 96) = 758 MB/s
test vec::tests::bench_push_all_0000_0000 ... bench: 7 ns/iter (+/- 0)
test vec::tests::bench_push_all_0000_0010 ... bench: 70 ns/iter (+/- 4) = 142 MB/s
test vec::tests::bench_push_all_0000_0100 ... bench: 176 ns/iter (+/- 16) = 568 MB/s
test vec::tests::bench_push_all_0000_1000 ... bench: 1125 ns/iter (+/- 94) = 888 MB/s
test vec::tests::bench_push_all_0010_0010 ... bench: 159 ns/iter (+/- 15) = 62 MB/s
test vec::tests::bench_push_all_0100_0100 ... bench: 363 ns/iter (+/- 12) = 275 MB/s
test vec::tests::bench_push_all_1000_1000 ... bench: 2860 ns/iter (+/- 415) = 349 MB/s
2014-07-05 23:11:18 -07:00
Erick Tryzelaar
065b98d577
collections: flesh out Vec benchmarks
2014-07-05 23:07:28 -07:00
Luqman Aden
e9e5ea2f90
libcore: Fix Items iterator for zero sized types.
2014-07-05 02:49:03 -07:00