Commit Graph

17163 Commits

Author SHA1 Message Date
Seo Sanghyeon
ba1f3c9b1f Convert to C string inside WriteOutputFile 2013-04-22 20:17:25 +09:00
bors
3830040a89 auto merge of #5887 : jdm/rust/stackbounds, r=brson
This is needed to allow GC to work in SpiderMonkey.
2013-04-21 17:33:52 -07:00
Josh Matthews
5cc6a0bf32 rt: Make the C stack segment accessible to runtime users. 2013-04-21 22:41:43 +02:00
bors
6a31525c50 auto merge of #5990 : bjz/rust/rem-quot, r=catamorphism
This renaming, proposed in the [Numeric Bikeshed](https://github.com/mozilla/rust/wiki/Bikeshed-Numeric-Traits#rename-modulo-into-rem-or-remainder-in-traits-and-docs), will allow us to implement div and and modulo methods that follow the conventional mathematical definitions for negative numbers without altering the definitions of the operators (and confusing systems programmers). Here is a useful answer on StackOverflow that explains the difference between `div`/`mod` and `quot`/`rem` in Haskell: (When is the difference between quotRem and divMod useful?)[http://stackoverflow.com/a/339823/679485].

This is part of the numeric trait reforms tracked in issue #4819.
2013-04-21 12:54:51 -07:00
bors
535244cde4 auto merge of #5987 : huonw/rust/generic-random, r=catamorphism
With this patch `rand::random` can be used to generate anything that implements `Rand`.
2013-04-21 12:00:52 -07:00
bors
8942099614 auto merge of #5989 : Thiez/rust/fixbench, r=catamorphism
Partial fix for #5985
shootout-fasta-redux.rs was calling fwrite with u64 arguments that should have been size_t, which broke on 32-bit systems. I replaced the casts to u64 by casts to size_t.

r?
2013-04-21 11:12:53 -07:00
Brendan Zabarauskas
01eb5e8ad3 Rename Div operator trait to Quot and Modulo operator trait to Rem 2013-04-22 01:58:53 +10:00
Huon Wilson
aa763cdb23 libcore: make rand::random return a generic value implementing Rand. 2013-04-21 22:14:34 +10:00
Matthijs Hofstra
91d1d00367 Changed shootout-fasta-redux to use size_t when calling fwrite, removed XFAIL 2013-04-21 13:35:43 +02:00
bors
2104cd69d4 auto merge of #5986 : brson/rust/bench, r=brson 2013-04-20 23:51:51 -07:00
Brian Anderson
59caef02ed xfail two benchmarks that are failing on the bots 2013-04-20 23:49:42 -07:00
bors
0e017ab4e0 auto merge of #5979 : Thiez/rust/no_reinterpret_cast, r=catamorphism
As the name suggests this replaces many instances of cast::reinterpret_cast by cast::transmute. It's essentially the boring part of fixing #5163, the remaining reinterpret_casts should be more tricky to remove (unless I missed a boring case).

r? @catamorphism
2013-04-20 14:24:51 -07:00
bors
f0afe23dce auto merge of #5978 : alexcrichton/rust/issue-5954, r=catamorphism
Closes #5954
2013-04-20 13:33:51 -07:00
Matthijs Hofstra
51a68eb9b1 Replaced many instances of reinterpret_cast with transmute 2013-04-20 22:05:50 +02:00
Alex Crichton
3c2a44b60f Don't warn about unsafe functions which don't need to be unsafe 2013-04-20 15:52:05 -04:00
bors
ae3b8690c1 auto merge of #5975 : huonw/rust/rustc-intrinsics-fixed-stack, r=pcwalton
This implements the fixed_stack_segment for items with the rust-intrinsic abi, and then uses it to make f32 and f64 use intrinsics where appropriate, but without overflowing stacks and killing canaries (cf. #5686 and #5697). Hopefully.

@pcwalton, the fixed_stack_segment implementation involved mirroring its implementation in `base.rs` in `trans_closure`, but without adding the `set_no_inline` (reasoning: that would defeat the purpose of intrinsics), which is possibly incorrect.

I'm a little hazy about how the underlying structure works, so I've annotated the 4 that have caused problems so far, but there's no guarantee that the other intrinsics are entirely well-behaved.

Anyway, it has good results (the following are just summing the result of each function for 1 up to 100 million):

```
$ ./intrinsics-perf.sh f32
func   new   old   speedup
sin    0.80  2.75  3.44
cos    0.80  2.76  3.45
sqrt   0.56  2.73  4.88
ln     1.01  2.94  2.91
log10  0.97  2.90  2.99
log2   1.01  2.95  2.92
exp    0.90  2.85  3.17
exp2   0.92  2.87  3.12
pow    6.95  8.57  1.23

   geometric mean: 2.97

$ ./intrinsics-perf.sh f64
func   new   old   speedup
sin    12.08  14.06  1.16
cos    12.04  13.67  1.14
sqrt   0.49  2.73  5.57
ln     4.11  5.59  1.36
log10  5.09  6.54  1.28
log2   2.78  5.10  1.83
exp    2.00  3.97  1.99
exp2   1.71  3.71  2.17
pow    5.90  7.51  1.27

   geometric mean: 1.72
```

So about 3x faster on average for f32, and 1.7x for f64. This isn't exactly apples to apples though, since this patch also adds #[inline(always)] to all the function definitions too, which possibly gives a speedup.

(fwiw, GitHub is showing 93c0888 after d9c54f8 (since I cherry-picked the latter from #5697), but git's order is the other way.)
2013-04-20 11:57:50 -07:00
Huon Wilson
c5baeb1db3 testsuite: update tests to not use math intrinsics directly 2013-04-21 01:40:48 +10:00
Huon Wilson
d9c54f8387 librustc: use LLVM intrinsics for several floating point operations.
Achieves at least 5x speed up for some functions!

Also, reorganise the delegation code so that the delegated function wrappers
have the #[inline(always)] annotation, and reduce the repetition of
delegate!(..).
2013-04-21 01:40:48 +10:00
Huon Wilson
93c0888b6c librustc: implement and use fixed_stack_segment attribute for intrinsics. 2013-04-21 01:40:48 +10:00
bors
2b09267b76 auto merge of #5973 : huonw/rust/core-iterator-scan-consumers, r=thestinger
@thestinger r?

~~The 2 `_unlimited` functions are marked `unsafe` since they may not terminate.~~

The `state` fields of the `Unfoldr` and `Scan` iterators are public, since being able to access the final state after the iteration has finished seems reasonable/possibly useful.

~~Lastly, I converted the tests to use `.to_vec`, which halves the amount of code for them, but it means that a `.transform(|x| *x)` call is required on each iterator.~~ 

(removed the 2 commits with `to_vec` and `foldl`.)
2013-04-20 04:27:48 -07:00
Huon Wilson
a0c2949e7c libcore: add a ScanIterator, a generalisation of MapIterator to have internal state. 2013-04-20 19:18:52 +10:00
bors
f2b0ef147a auto merge of #5970 : huonw/rust/core-sys-size_of-val, r=pcwalton
This allows one to write
```rust
let x = function_with_complicated_return_type();
let size = size_of_val(&x);
```
instead of 
```rust
let x = function_with_complicated_return_type();
let size = size_of::<ComplicatedReturnType<Foo, Bar>>();
```
2013-04-20 01:57:48 -07:00
bors
4ff701b7db auto merge of #5965 : alexcrichton/rust/issue-4364, r=pcwalton
This closes #4364. I came into rust after modes had begun to be phased out, so I'm not exactly sure what they all did. My strategy was basically to turn on the compilation warnings and then when everything compiles and passes all the tests it's all good.

In most cases, I just dropped the mode, but in others I converted things to use `&` pointers when otherwise a move would happen.

This depends on #5963. When running the tests, everything passed except for a few compile-fail tests. These tests leaked memory, causing the task to abort differently. By suppressing the ICE from #5963, no leaks happen and the tests all pass. I would have looked into where the leaks were coming from, but I wasn't sure where or how to debug them (I found `RUSTRT_TRACK_ALLOCATIONS`, but it wasn't all that useful).
2013-04-20 01:00:49 -07:00
bors
028dc589d1 auto merge of #5963 : alexcrichton/rust/fix-ice, r=pcwalton
I ran across this when working on some other changes, and it looked like it wasn't too hard to "fix". I'm not very familiar with this code, but it looks like if an error was already generated there's no need to generate and ICE as well when parts of the program can just be ignored for more incorrectness.
2013-04-20 00:00:50 -07:00
bors
ce4f73a243 auto merge of #5945 : graydon/rust/fix-unicode-tables, r=pcwalton
This switches the unicode functions in core to use static character-range tables and a binary search helper rather than open-coded switch statements. It adds about 50k of read only data to the libcore binary but cuts out a similar amount of compiled IR. Would have done it this way in the first place but we didn't have structured statics for a long time.
2013-04-19 23:03:52 -07:00
bors
e67f1c0fd2 auto merge of #5968 : gifnksm/rust/windowed, r=brson
vec::windowed fails if given window size is greater than vector length + 1.

```rust
for vec::windowed(7, &[1,2,3,4,5,6]) |vs| { fail!(); } // => do nothing
for vec::windowed(8, &[1,2,3,4,5,6]) |vs| { fail!(); } // => assertion failure in vec::slice
```
2013-04-19 22:12:52 -07:00
Huon Wilson
5c2e9b29f1 libcore: wrappers for size/align_of to act on values without needing explicit ::<type> annotations 2013-04-20 15:05:36 +10:00
bors
047ba2642f auto merge of #5964 : danluu/rust/debug_tutorial_foo, r=brson
Sorry, my change for #5916 wasn't correct -- it only worked by coincidence. This should actually work for any file name.
2013-04-19 21:21:52 -07:00
Alex Crichton
cd982ad3f7 std: clean up tests (mostly unused unsafe blocks) 2013-04-19 23:23:23 -04:00
Alex Crichton
98dfeb173f core: clean up tests (mostly unused unsafe blocks) 2013-04-19 23:23:23 -04:00
Alex Crichton
c97bee2696 Assorted fixes from de-modeing rustc/syntax (rusti, rustdoc, fuzzer, rustpkg) 2013-04-19 23:23:23 -04:00
Alex Crichton
1e4a439f7f rustc: de-mode + fallout from libsyntax changes 2013-04-19 23:23:23 -04:00
Alex Crichton
3c7aea3a6a syntax: de-mode and prepare for de-modeing rustc 2013-04-19 23:21:52 -04:00
Alex Crichton
be9f4ef65f Fix an ICE when dereferencing types which cannot be dereferenced 2013-04-19 23:21:52 -04:00
Alex Crichton
93e13e0eee Fix an ICE when dereferencing types which cannot be dereferenced 2013-04-19 23:20:44 -04:00
bors
8b3c09a103 auto merge of #5962 : pcwalton/rust/shootout, r=pcwalton
r? @brson
2013-04-19 19:24:52 -07:00
Patrick Walton
d2b644842a test: xfail some benchmarks that require external libraries or inputs 2013-04-19 19:21:53 -07:00
gifnksm
a1a9326c6d libcore: Fix assertion failure in vec::windowe.
vec::windowed fails if given window size is greater than vector length + 1.
2013-04-20 11:15:25 +09:00
Dan Luu
69f6ac5d31 Fix debug! usage in tutorial 2013-04-19 19:17:34 -04:00
bors
6510fd9254 auto merge of #5960 : brson/rust/io, r=pcwalton
r?

This pull request is a grab bag of work on the new scheduler.

The most important commit here is where I [outline](https://github.com/brson/rust/blob/io/src/libcore/rt/io/mod.rs) a fairly complete I/O API, based on `Reader` and `Writer` types, as in the current `core::io` module. I've organized this version into a number of modules with declarations for Files, TCP, UDP, Unix sockets, blocking/non-blocking implementations, memory buffers, compression adapters. I'm trying to get this into shape to present on the mailing list.

This branch also wires up `spawn` to the new scheduler, and simplifies the core scheduler operations.
2013-04-19 15:57:50 -07:00
Patrick Walton
dcea717208 librustc: Fix botched merge. rs=merge 2013-04-19 15:57:31 -07:00
Brian Anderson
7270fadfcc core::rt: Rename Closeable to Close, Seekable to Seek, blocking to native 2013-04-19 14:58:21 -07:00
bors
bffe23b0cf auto merge of #5961 : brson/rust/valgrind, r=brson
I can't reproduce the one on the bots, but this might fix it
2013-04-19 14:18:48 -07:00
Brian Anderson
69eb218ffc Try to suppress valgrind errors
I can't reproduce the one on the bots, but this might fix it
2013-04-19 14:14:07 -07:00
Brian Anderson
e782e1f371 Tidy 2013-04-19 12:05:19 -07:00
Brian Anderson
b57611d10c core::rt: Simplify some scheduler operations 2013-04-19 12:05:19 -07:00
Brian Anderson
eddd817bf0 core::rt: Add another context switching operation to the scheduler
`switch_running_tasks_and_then` does a context switch to another
task then immediatly runs a closure.
2013-04-19 12:05:18 -07:00
Brian Anderson
d261bb32d9 core: More tweaks to the thread-local scheduler interface 2013-04-19 12:05:18 -07:00
Brian Anderson
15ece0c23e core: Wire up spawn to the new scheduler
It will check which scheduler it is running under and create the
correct type of task as appropriate. Most options aren't supported
but basic spawning works.
2013-04-19 12:05:18 -07:00
Brian Anderson
6773b63671 core: Don't use managed boxes in TaskBuilder 2013-04-19 12:05:18 -07:00