Commit graph

4712 commits

Author SHA1 Message Date
Daniel Micay
e118555ce6 remove headers from unique vectors 2013-07-15 23:57:27 -04:00
bors
9d7e01bb39 auto merge of #7802 : catamorphism/rust/issue-6128, r=catamorphism 2013-07-15 11:16:25 -07:00
Tim Chevalier
600e40f503 testsuite: Add xfailed test case for #6128 2013-07-15 11:12:56 -07:00
blake2-ppc
6999b5332f cmp: Use default methods in trait Eq, require only Eq::eq 2013-07-15 13:24:35 +02:00
Alex Crichton
9fd2ac7428 Make TLS keys actually take up space
If the TLS key is 0-sized, then the linux linker is apparently smart enough to
put everything at the same pointer. OSX on the other hand, will reserve some
space for all of them. To get around this, the TLS key now actuall consumes
space to ensure that it gets a unique pointer
2013-07-14 10:15:07 -07:00
Alex Crichton
e3211fa1f1 Purge the last remnants of the old TLS api
Closes #3273
2013-07-14 09:29:12 -07:00
Steven Fackler
0e882f2bbd Un-broke benchmarks 2013-07-13 20:30:05 -07:00
Steven Fackler
6b37b5bab7 Split mutable methods out of Set and Map
Fixes most of #4989. I didn't add Persistent{Set,Map} since the only
persistent data structure is fun_treemap and its functionality is
currently too limited to build a trait out of.
2013-07-13 19:44:36 -07:00
bors
403cdd84a4 auto merge of #7765 : blake2-ppc/rust/ord-default-methods, r=huonw
Rust will allow to supply default methods for all four methods, but we
don't have any nice error reporting for the case where at least one
method must be implemented, but it's arbitrary which.

So in this case, we require `lt`, but allow implementing the others if needed.
2013-07-13 06:01:31 -07:00
bors
d582eeb1ec auto merge of #7734 : alexcrichton/rust/issue-3395, r=sanxiyn
Also ends up fixing one case in libstd. 

Closes #3395
2013-07-12 21:40:36 -07:00
blake2-ppc
36f20423c3 cmp: Use default methods in trait Ord, only require Ord::lt
It will be simpler to implement only one method for Ord, while we also
allow implementing all four Ord methods for semantics or performance
reasons.

We only supply three default methods (and not four), because don't have
any nice error reporting for the case where at least one method must be
implemented, but it's arbitrary which.
2013-07-13 06:23:38 +02:00
bors
1ee54a8617 auto merge of #7725 : msullivan/rust/default-methods, r=pcwalton
r?
2013-07-12 17:28:28 -07:00
bors
96453eb5c5 auto merge of #7736 : thestinger/rust/doc, r=thestinger
2b96408 r=sanxiyn

documents conversion, size hints and double-ended iterators and adds
more of the traits to the prelude
2013-07-12 13:34:29 -07:00
bors
ad708139fe auto merge of #7706 : sanxiyn/rust/qualification-lint, r=pcwalton
Fix #2551.

Lint is off by default because I didn't bother to fix all of std and extra.
2013-07-12 05:46:42 -07:00
bors
f67935257b auto merge of #7696 : glinscott/rust/utf8_perf, r=cmr
Moves multibyte code to it's own function to make char_range_at
easier to inline, and faster for single and multibyte chars.

Benchmarked reading example.json 100 times, 1.18s before, 1.08s
after.

Also, optimize str::is_utf8 for the single and multibyte case
Before:
is_utf8_ascii:          272.355162 ms
is_utf8_multibyte:      167.337334 ms

After:
is_utf8_ascii:          218.088049 ms
is_utf8_multibyte:      134.836722 ms
2013-07-12 03:46:41 -07:00
bors
d56c9762a3 auto merge of #7705 : sanxiyn/rust/simd-op, r=cmr
Fix #3499.

This is the other half of #5841 that was left out when I revised it to #6214.
2013-07-12 01:49:45 -07:00
bors
09394774df auto merge of #7695 : cmr/rust/assert_eq_msg, r=pnkfelix
This changes it from 

```
left: true does not equal right: false
```

to

```
assertion failed: `(left == right) && (right == left)` (left: `true`, right: `false`)
```
2013-07-11 23:43:45 -07:00
Daniel Micay
2b96408600 extend the iterator tutorial
documents conversion, size hints and double-ended iterators and adds
more of the traits to the prelude
2013-07-12 01:53:50 -04:00
bors
07183ea6e7 auto merge of #7677 : alexcrichton/rust/tls-gc, r=pcwalton
cc #6004 and #3273

This is a rewrite of TLS to get towards not requiring `@` when using task local storage. Most of the rewrite is straightforward, although there are two caveats:

1. Changing `local_set` to not require `@` is blocked on #7673
2. The code in `local_pop` is some of the most unsafe code I've written. A second set of eyes should definitely scrutinize it...

The public-facing interface currently hasn't changed, although it will have to change because `local_data::get` cannot return `Option<T>`, nor can it return `Option<&T>` (the lifetime isn't known). This will have to be changed to be given a closure which yield `&T` (or as an Option). I didn't do this part of the api rewrite in this pull request as I figured that it could wait until when `@` is fully removed.

This also doesn't deal with the issue of using something other than functions as keys, but I'm looking into using static slices (as mentioned in the issues).
2013-07-11 19:52:37 -07:00
Alex Crichton
2cd9d7bc88 Expand ctypes warnings to warn about *int/*uint
Also ends up fixing one case in libstd
2013-07-11 19:45:25 -07:00
Alex Crichton
a15c1b4464 Fix tests 2013-07-11 18:57:19 -07:00
bors
4478ded57c auto merge of #7623 : graydon/rust/codegen-compiletests, r=pcwalton
This is some initial sketch-work for #7461 though it will depend on #7459 to be useful for anything. For the time being, just infrastructure.
2013-07-11 15:55:45 -07:00
Michael Sullivan
3fa5203273 Take default methods out from behind the flag. 2013-07-11 15:51:10 -07:00
Michael Sullivan
186f6faf1e Get cross crate static default methods working. Closes #7569. 2013-07-11 15:51:10 -07:00
Michael Sullivan
a8e4301a5d Fix the handling of type params on generic static methods. Closes #7571. 2013-07-11 15:51:09 -07:00
Graydon Hoare
fbc5bb4c0a wire up makefile to run codegen tests and add one to start 2013-07-11 13:15:52 -07:00
Gary Linscott
8926b31088 Add is_utf8 bench tests
Before:
is_utf8_ascii:          272.355162 ms
is_utf8_multibyte:      167.337334 ms

After:
is_utf8_ascii:          218.088049 ms
is_utf8_multibyte:      134.836722 ms
2013-07-11 15:02:12 -04:00
bors
9fce8c918a auto merge of #7652 : blake2-ppc/rust/dlist, r=huonw
This is a new doubly-linked list using owned nodes. In the forward direction, the list is linked with owned pointers, and the backwards direction is linked with &'static Node pointers.

This intends to replace the previous extra::DList that was using managed nodes and also featured freestanding nodes.  The new List does not give access to the nodes, but means to implement all relevant linked-list methods.
 
The list supports pop_back, push_back, pop_front, push_front, front, back, iter, mut_iter, +more iterators,  append, insert_ordered, and merge.

* Add a trait Deque for double ended sequences.

* Both List and Deque implement this trait. Rename Deque to ArrayDeque.

*The text has been updated to summarize resolved items*

## RFC Topics

### Resolved

* Should be in extra
* Representation for the backlinks

### Container Method Names and Trait Names and Type Names

* Location and name of trait `extra::collection::Deque`?
* Name of the ring buffer `extra::deque::ArrayDeque` ?
* Name of the doubly linked list `extra::dlist::List` ?

For container methods I think we have two options:

* Align with the existing methods on the vector. That would be `.push()`, `.pop()`, `.shift()`, `.unshift()`.
* Use the API described in https://github.com/mozilla/rust/wiki/Containers   Obviously that's the way List is written right now.

Should we use `pop_front() -> Option<T>` or `pop_front() -> T` ?

### Benchmarks

Some basic bench numbers for List vs. Vec, Deque and *old DList*

This List implementation's performance is dominated by the allocation of Nodes required when pushing. 

Iterate (by-ref) collection of 128 elements

    test test_bench::bench_iter ... bench: 198 ns/iter (+/- 0)
    test test_bench::bench_iter_mut ... bench: 294 ns/iter (+/- 0)
    test test_bench::bench_iter_rev ... bench: 198 ns/iter (+/- 0)
    test test_bench::bench_iter_mut_rev ... bench: 198 ns/iter (+/- 3)

    test test_bench::bench_iter_vec ... bench: 101 ns/iter (+/- 0)
    test test_bench::bench_iter_deque ... bench: 581 ns/iter (+/- 0)
    test test_bench::bench_iter_dlist ... bench: 9262 ns/iter (+/- 273)

Sequence of `.push(elt)`, `.pop()` or equivalent at the tail end

    test test_bench::bench_push_back_pop_back ... bench: 72 ns/iter (+/- 0)

    test test_bench::bench_push_back_pop_back_vec ... bench: 5 ns/iter (+/- 0)
    test test_bench::bench_push_back_pop_back_deque ... bench: 15 ns/iter (+/- 0)
    test test_bench::bench_push_back_pop_back_dlist ... bench: 234 ns/iter (+/- 0)
2013-07-11 11:31:41 -07:00
Gary Linscott
5aee5a11e3 Optimize is_utf8
Manually unroll the multibyte loops, and optimize for the single
byte chars.
2013-07-11 14:23:15 -04:00
bors
278ed50e0a auto merge of #7455 : nikomatsakis/rust/issue-7336-constrain-closure-lifetimes, r=pnkfelix
Constrain maximum lifetime of stack closures that capture variables to be limited by the innermost repeating scope.

Fixes #7336.

r? whomever.
2013-07-11 09:34:40 -07:00
blake2-ppc
7052371e39 extra: Rename deque::Deque to ringbuf::RingBuf and impl trait Deque
Let RingBuf have a logical name for a concrete type, and Deque is
used for the Deque trait (implemented by RingBuf and dlist).
2013-07-11 15:54:35 +02:00
Seo Sanghyeon
f20c78c984 Add a compile-fail test for qualification lint 2013-07-11 12:54:06 +09:00
bors
e7040e8a24 auto merge of #7698 : nikomatsakis/rust/issue-2951-type-parameter-names, r=cmr
Fixes #2951
2013-07-10 14:37:39 -07:00
Niko Matsakis
4412df20ae Add an identifier to TypeParameterDefs and use it to pretty print type parameters 2013-07-10 14:42:53 -04:00
Corey Richardson
26f0a55f76 fix test 2013-07-10 13:14:31 -04:00
Seo Sanghyeon
2bc06b40ba Implement SIMD arithmetics 2013-07-10 23:35:59 +09:00
bors
8fa09736ef auto merge of #7658 : excepttheweasel/rust/mut_default_param_list_issue_7483, r=pcwalton 2013-07-10 03:25:28 -07:00
bors
41dcec2fe1 auto merge of #7265 : brson/rust/io-upstream, r=brson
r? @graydon, @nikomatsakis, @pcwalton, or @catamorphism

Sorry this is so huge, but it's been accumulating for about a month. There's lots of stuff here, mostly oriented toward enabling multithreaded scheduling and improving compatibility between the old and new runtimes. Adds task pinning so that we can create the 'platform thread' in servo.

[Here](e1555f9b56/src/libstd/rt/mod.rs (L201)) is the current runtime setup code.

About half of this has already been reviewed.
2013-07-09 18:28:46 -07:00
bors
137d1fb210 auto merge of #7657 : thestinger/rust/rollup, r=thestinger
d3be8ab r=brson
05eb3cf r=thestinger
c80f4e1 r=huonw
8c27af1 r=huonw
0eee0b6 r=cmr
ea2756a r=thestinger
2013-07-09 15:13:40 -07:00
Alex Crichton
31114acdd7 Require extern "Rust" fn main() exactly 2013-07-09 16:56:16 -04:00
Daniel Micay
b727b9efd7 rm silly compile-fail test
it's a test to make sure a feature is *not* implemented, but it is now
implemented
2013-07-09 16:56:16 -04:00
bors
e388a80c23 auto merge of #7117 : jensnockert/rust/freestanding, r=cmr
The free-standing functions in f32, f64, i8, i16, i32, i64, u8, u16,
u32, u64, float, int, and uint are replaced with generic functions in
num instead.

This means that instead of having to know everywhere what the type is, like

~~~
f64::sin(x)
~~~

You can simply write code that uses the type-generic versions in num instead, this works for all types that implement the corresponding trait in num.

~~~
num::sin(x)
~~~

Note 1: If you were previously using any of those functions, just replace them
with the corresponding function with the same name in num.

Note 2: If you were using a function that corresponds to an operator, use the
operator instead.

Note 3: This is just https://github.com/mozilla/rust/pull/7090 reopened against master.
2013-07-09 13:34:50 -07:00
Niko Matsakis
3b8c5a1a37 Constrain maximum lifetime of stack closures that capture variables to
be limited by the innermost repeating scope.

Fixes #7336.
2013-07-09 10:38:26 -04:00
John Barker
56d1987575 Don't use static default method
- also removed redundant assignment to is_mutbl
 - updated copyright
2013-07-09 10:21:25 -04:00
John Barker
eaaf3f67ab Always eat up mut when parsing general args, fixes #7483 2013-07-09 09:03:16 -04:00
bors
a48ca3290d auto merge of #7262 : nikomatsakis/rust/ref-bindings-in-irrefut-patterns, r=catamorphism
Correct treatment of irrefutable patterns. The old code was wrong in many, many ways. `ref` bindings didn't work, it sometimes copied when it should have moved, the borrow checker didn't even look at such patterns at all, we weren't consistent about preventing values with destructors from being pulled apart, etc.

Fixes #3224.
Fixes #3225.
Fixes #3255.
Fixes #6225.
Fixes #6386.

r? @catamorphism
2013-07-08 18:49:46 -07:00
Brian Anderson
fae3336769 Merge remote-tracking branch 'mozilla/master'
Conflicts:
	src/libextra/test.rs
	src/libstd/rt/global_heap.rs
	src/libstd/unstable/lang.rs
	src/libstd/vec.rs
2013-07-08 16:29:54 -07:00
Jens Nockert
2ed1cfc912 And I forgot to run the benchmarks after rebasing 2013-07-08 20:22:19 +02:00
Niko Matsakis
b5fc4ae918 Correct match-drop-strs-issue-4541 when used in check-fast 2013-07-08 13:55:11 -04:00
Niko Matsakis
979d3a54f9 Correct merge failures 2013-07-08 13:55:11 -04:00