Commit Graph

3951 Commits

Author SHA1 Message Date
Steven Fackler
7c9daa8ff7 Remove RcMut
Rc<Mut<T>> should be used instead
2013-11-22 21:19:53 -08:00
Steven Fackler
0fade3a714 Introduce Mut<T> to libstd
Based off of blake2-ppc's work in #9429.
2013-11-22 21:19:53 -08:00
bors
09ed7913e4 auto merge of #10612 : pnkfelix/rust/remove-cut-and-pasted-rt-fixme, r=pcwalton
I cannot tell whether the original comment was unsure about the
arithmetic calculations, or if it was unsure about the assumptions
being made about the alignment of the current allocation pointer.

The arithmetic calculation looks fine to me, though.  This technique
is documented e.g. in Henry Warren's "Hacker's Delight" (section 3-1).

(I am sure one can find it elsewhere too, its not an obscure
property.)
2013-11-22 12:41:36 -08:00
Felix S. Klock II
861e6f5cd2 The original fixme #2699 was removed back in PR #6053.
I cannot tell whether the original comment was unsure about the
arithmetic calculations, or if it was unsure about the assumptions
being made about the alignment of the current allocation pointer.

The arithmetic calculation looks fine to me, though.  This technique
is documented e.g. in Henry Warren's "Hacker's Delight" (section 3-1).

(I am sure one can find it elsewhere too, its not an obscure
property.)
2013-11-22 18:00:21 +01:00
bors
d3cb24b1fe auto merge of #10610 : thestinger/rust/breakpoint, r=pnkfelix
This can be used to grab the attention of a debugger, and unlike
`abort` execution can be resumed.
2013-11-22 07:31:35 -08:00
Daniel Micay
bf61641e9f add a breakpoint intrinsic for debugging
This can be used to grab the attention of a debugger, and unlike
`abort` execution can be resumed.
2013-11-22 10:29:04 -05:00
bors
8d87e9da21 auto merge of #10582 : g3xzh/rust/master, r=cmr
More new benchmark tests. some of them are benchmarking `starts_with` and `ends_with`.
Let me know if I am missing something.
Thanks in advance.
2013-11-22 03:31:37 -08:00
g3xzh
80dff18641 Add more benchmark tests to vec.rs
New benchmark tests in vec.rs:
`push`, `starts_with_same_vector`, `starts_with_single_element`,
`starts_with_diff_one_element_end`, `ends_with_same_vector`,
`ends_with_single_element`, `ends_with_diff_one_element_beginning` and
`contains_last_element`
2013-11-22 13:24:16 +02:00
bors
747213a280 auto merge of #10588 : huonw/rust/un@mutilate-task_rng, r=alexcrichton
Replace with some unsafe code by storing a pointer into TLS-owned heap
data.
2013-11-21 21:51:26 -08:00
Huon Wilson
020126ef75 std::rand: move TaskRng off @mut.
Replace with some unsafe code by storing a pointer into TLS-owned heap
data.
2013-11-22 16:47:01 +11:00
Ziad Hatahet
248cb90dfa std::ptr::read_ptr now takes *T instead of *mut T
Closes #10579
2013-11-21 11:31:58 -08:00
bors
760942d7d2 auto merge of #10576 : thestinger/rust/gc, r=pcwalton
This isn't very useful yet, but it does replace most functionality of `@T`. The `Mut<T>` type will make it unnecessary to have a `GcMut<T>` so I haven't included one. Obviously it doesn't work for trait objects but that needs to be figured out for `Rc<T>` too.
2013-11-20 14:16:23 -08:00
Daniel Micay
543cae9a46 add an initial Gc<T> stub with the API 2013-11-19 23:52:43 -05:00
Steven Fackler
3e637d505e Remove NonCopyable::new
The issue that required it has been fixed.
2013-11-19 20:27:48 -08:00
Patrick Walton
1946265e1a libstd: Change all uses of &fn(A)->B over to |A|->B in libstd 2013-11-19 12:40:19 -08:00
bors
eef913b290 auto merge of #10495 : alexcrichton/rust/more-native-io, r=brson
This implements a fair amount of the unimpl() functionality in io::native
relating to filesystem operations. I've also modified all io::fs tests to run in
both a native and uv environment (so everything is actually tested).

There are a few bits of remaining functionality which I was unable to get
working:

* truncate on windows
* change_file_times on windows
* lstat on windows

I think that change_file_times may just need a better interface, but the other
two have large implementations in libuv which I didn't want to tackle trying to
copy. I found a `chsize` function to work for truncate on windows, but it
doesn't quite seem to be working out.
2013-11-19 10:56:42 -08:00
Alex Crichton
68d5510292 Implement more native file I/O
This implements a fair amount of the unimpl() functionality in io::native
relating to filesystem operations. I've also modified all io::fs tests to run in
both a native and uv environment (so everything is actually tested).

There are a two bits of remaining functionality which I was unable to get
working:

* change_file_times on windows
* lstat on windows

I think that change_file_times may just need a better interface, but lstat has a
large implementation in libuv which I didn't want to tackle trying to copy.
2013-11-19 09:59:21 -08:00
bors
d57765d8a9 auto merge of #10558 : alexcrichton/rust/faster-stdout, r=pcwalton,pcwalton
There are issues with reading stdin when it is actually attached to a pipe, but
I have run into no problems in writing to stdout/stderr when they are attached
to pipes.
2013-11-19 05:16:24 -08:00
bors
c4e28ae068 auto merge of #10542 : huonw/rust/open01, r=alexcrichton
Provide `Closed01` and `Open01` that generate directly from the
closed/open intervals from 0 to 1, in contrast to the plain impls for
f32 and f64 which generate the half-open [0,1).

Fixes #7755.
2013-11-19 00:26:27 -08:00
bors
f4c22f75d4 auto merge of #10561 : pcwalton/rust/procify, r=alexcrichton
r? @alexcrichton
2013-11-18 23:06:29 -08:00
Alex Crichton
508b7b996e Move runtime files to C instead of C++
Explicitly have the only C++ portion of the runtime be one file with exception
handling. All other runtime files must now live in C and be fully defined in C.
2013-11-18 21:45:58 -08:00
Alex Crichton
e8bf078802 Remove the C++ lock_and_signal type
A the same time this purges all runtime support needed for statically
initialized mutexes, moving all users over to the new Mutex type instead.
2013-11-18 20:06:40 -08:00
Alex Crichton
24eb1b445d Implement a native mutex type
This mutex is built on top of pthreads for unix and the related windows apis on
windows. This is a straight port of the lock_and_signal type from C++ to rust.
Almost all operations on the type are unsafe, and it's definitely not
recommended for general use.

Closes #9105
2013-11-18 20:06:39 -08:00
Patrick Walton
500a8f15c9 libstd: Change all ~fn()s to procs in the standard library.
This makes `Cell`s no longer necessary in most cases.
2013-11-18 18:27:30 -08:00
Alex Crichton
10b956a012 Allow piped stdout/stderr use uv_tty_t
There are issues with reading stdin when it is actually attached to a pipe, but
I have run into no problems in writing to stdout/stderr when they are attached
to pipes.
2013-11-18 16:29:41 -08:00
Brian Anderson
f4c222f7a3 rt: Namespace all C functions under rust_ 2013-11-18 16:17:43 -08:00
Huon Wilson
e6fb622af1 std::rand: wrappers for floats from [0,1] and (0,1).
Provide `Closed01` and `Open01` that generate directly from the
closed/open intervals from 0 to 1, in contrast to the plain impls for
f32 and f64 which generate the half-open [0,1).

Fixes #7755.
2013-11-18 23:12:01 +11:00
Andrei Formiga
1f27512b17 Fixed docs for advance() in Iterator trait 2013-11-17 23:45:29 -03:00
Andrei Formiga
2839805b9c Fixed uses of get() to unwrap() in doc examples in std::iter 2013-11-17 23:30:57 -03:00
bors
66df86ae98 auto merge of #10466 : alexcrichton/rust/issue-10334, r=cmr
These commits create a `Buffer` trait in the `io` module which represents an I/O reader which is internally buffered. This abstraction is used to reasonably implement `read_line` and `read_until` along with at least an ok implementation of `read_char` (although I certainly haven't benchmarked `read_char`).
2013-11-17 01:21:36 -08:00
bors
b0e1318164 auto merge of #10420 : sanxiyn/rust/path, r=cmr
Fix #10283.
2013-11-16 14:36:40 -08:00
Alex Crichton
01343d3d29 Implement read_char on the Buffer trait 2013-11-16 02:11:47 -08:00
Daniel Micay
fbad2e2ae9 remove cast::unsafe_copy
This is the same functionality as `ptr::read_ptr`.
2013-11-14 22:20:12 -05:00
bors
0d11935bf6 auto merge of #10428 : toffaletti/rust/try_lock, r=alexcrichton
I need try_lock for an algorithm I'm trying to implement in Rust.
2013-11-14 11:51:25 -08:00
klutzy
09cb7ecc67 test: Fix signal-exit-status on windows 2013-11-14 14:43:08 +09:00
bors
58b5c618cf auto merge of #10457 : alexcrichton/rust/native-io, r=brson
This commit re-organizes the io::native module slightly in order to have a
working implementation of rtio::IoFactory which uses native implementations. The
goal is to seamlessly multiplex among libuv/native implementations wherever
necessary.

Right now most of the native I/O is unimplemented, but we have existing bindings
for file descriptors and processes which have been hooked up. What this means is
that you can now invoke println!() from libstd with no local task, no local
scheduler, and even without libuv.

There's still plenty of work to do on the native I/O factory, but this is the
first steps into making it an official portion of the standard library. I don't
expect anyone to reach into io::native directly, but rather only std::io
primitives will be used. Each std::io interface seamlessly falls back onto the
native I/O implementation if the local scheduler doesn't have a libuv one
(hurray trait ojects!)
2013-11-13 19:46:18 -08:00
Alex Crichton
9bcf557589 Implement native::IoFactory
This commit re-organizes the io::native module slightly in order to have a
working implementation of rtio::IoFactory which uses native implementations. The
goal is to seamlessly multiplex among libuv/native implementations wherever
necessary.

Right now most of the native I/O is unimplemented, but we have existing bindings
for file descriptors and processes which have been hooked up. What this means is
that you can now invoke println!() from libstd with no local task, no local
scheduler, and even without libuv.

There's still plenty of work to do on the native I/O factory, but this is the
first steps into making it an official portion of the standard library. I don't
expect anyone to reach into io::native directly, but rather only std::io
primitives will be used. Each std::io interface seamlessly falls back onto the
native I/O implementation if the local scheduler doesn't have a libuv one
(hurray trait ojects!)
2013-11-13 18:34:59 -08:00
Jason Toffaletti
91de538c98 add rust_trylock_little_lock
Try to acquire lock and succeed only if lock is not already held.
Uses TryEnterCriticalSection or pthread_mutex_trylock.
2013-11-13 14:44:50 -08:00
bors
a79ed57beb auto merge of #10451 : zkamsler/rust/buf_writer, r=alexcrichton
I implemented BufWriter. I realize the use of conditions are on their way out for IO, but it does raise a condition if a write will not fit in the buffer for now.

I also replaced the seek code for MemWriter. It was adding the offset as a uint, which is unsound for negative offsets. It only happened to work because unsigned addition performs the same operation with two's complement, and sizeof(uint) <= sizeof(i64) so there was no (lack of) sign extension. I replaced this with computing an offset as an i64 and clamping to zero. I don't expect anyone will have use BufWriter with a byte buffer greater than 2^63 bytes any time soon.

@alexcrichton

Closes #10433
2013-11-13 12:21:28 -08:00
Alex Crichton
7bc092f109 Introduce an io::Buffer trait
This trait is meant to abstract whether a reader is actually implemented with an
underlying buffer. For all readers which are implemented as such, we can
efficiently implement things like read_char, read_line, read_until, etc. There
are two required methods for managing the internal buffer, and otherwise
read_line and friends can all become default methods.

Closes #10334
2013-11-13 11:36:13 -08:00
Zach Kamsler
c2c7a2497d Implemented BufWriter
Filled in the implementations of Writer and Seek for BufWriter. It
raises the io_error condition if a write cannot fit in the buffer.

The Seek implementation for MemWriter, which was incorrectly using
unsigned arithmatic to add signed offsets, has also been replaced.
2013-11-13 14:22:03 -05:00
Corey Richardson
67692b21b5 io: benchmarks for creation of the various Buffered objects 2013-11-12 21:51:15 -05:00
bors
f1a67bd4c0 auto merge of #10423 : alexcrichton/rust/move-io, r=pcwalton
I still plan on reorganizing the internals of the IO module a bit, but this is the major move which has been on the horizon for awhile.
2013-11-12 11:01:24 -08:00
bors
11b07847e6 auto merge of #10435 : jayanderson/rust/docs, r=huonw
This fills in some missing docs in the nums package. Let me know if this is on the right track for what's wanted for docs. I can probably fill in more in the future. Thanks.

(As a side note the precedence of the unary negative operator '-' tripped me up for a bit. Essentially I would expect `-25.0f32.sqrt()` to result in NaN instead of `-5.0`.)
2013-11-12 02:31:15 -08:00
Alex Crichton
49ee49296b Move std::rt::io to std::io 2013-11-11 20:44:07 -08:00
Jay Anderson
8a4be8080b Use constants instead of raw values. 2013-11-11 20:52:42 -07:00
bors
8b4683d79d auto merge of #10424 : alexcrichton/rust/optimize-buffered, r=brson
I was benchmarking rust-http recently, and I saw that 50% of its time was spent
creating buffered readers/writers. Albeit rust-http wasn't using
std::rt::io::buffered, but the same idea applies here. It's much cheaper to
malloc a large region and not initialize it than to set it all to 0. Buffered
readers/writers never use uninitialized data, and their internal buffers are
encapsulated, so any usage of uninitialized slots are an implementation bug in
the readers/writers.
2013-11-11 19:31:14 -08:00
Jay Anderson
deefb1f4b7 Got directions backwards in to_degrees and to_radians docs. 2013-11-11 18:56:48 -07:00
Jay Anderson
6c02e81c70 Add docs for traits Exponential, Hyperbolic, BitCount. 2013-11-11 18:49:48 -07:00
Jay Anderson
f4bedded8b Update docs for Fractional, Algebraic, Round, and Trigonometric traits. 2013-11-11 18:49:48 -07:00