Commit graph

5125 commits

Author SHA1 Message Date
Brian Anderson
f3fef9a649 std: Make atomics immutable. #11583
In Rust, the strongest guarantee that `&mut` provides is that the memory
pointed to is *not aliased*, whereas `&`'s guarantees are much weaker:
that the value can be aliased, and may be mutated under proper precautions
(interior mutability).

Our atomics though use `&mut` for mutation even while creating multiple
aliases, so this changes them to use 'interior mutability', mutating
through immutable references.
2014-03-20 09:44:29 -07:00
Alex Crichton
da3625161d Removing imports of std::vec_ng::Vec
It's now in the prelude.
2014-03-20 09:30:14 -07:00
Alex Crichton
0305ed5d22 std: Add Vec to the prelude
This is an incredibly common type, and it is expected to be used in many many
places. This type should be in the prelude.
2014-03-20 09:13:44 -07:00
bors
8cfef59cc0 auto merge of #13015 : tbu-/rust/pr_remove_immut, r=alexcrichton
Remove std::cast::transmute_immut_unsafe.
It can be done in safe code using `as *T`.
2014-03-20 07:06:45 -07:00
bors
8e285208d5 auto merge of #12686 : FlaPer87/rust/shared, r=nikomatsakis
`Share` implies that all *reachable* content is *threadsafe*.

Threadsafe is defined as "exposing no operation that permits a data race if multiple threads have access to a &T pointer simultaneously". (NB: the type system should guarantee that if you have access to memory via a &T pointer, the only other way to gain access to that memory is through another &T pointer)...

Fixes #11781
cc #12577 

What this PR will do
================

- [x] Add Share kind and
- [x]  Replace usages of Freeze with Share in bounds.
- [x] Add Unsafe<T> #12577
- [x] Forbid taking the address of a immutable static item with `Unsafe<T>` interior

What's left to do in a separate PR (after the snapshot)?
===========================================

- Remove `Freeze` completely
2014-03-20 05:51:48 -07:00
bors
95ee0a04fd auto merge of #12980 : cmr/rust/overhaul-stdio, r=thestinger
this comes from a discussion on IRC where the split between stdin and stdout
seemed unnatural, and the fact that reading on stdin won't flush stdout, which
is unlike every other language (including C's stdio).
2014-03-20 04:36:50 -07:00
Steven Fackler
cdab8a76f4 A couple of fixes to vec_ng docs 2014-03-20 05:44:25 -04:00
Flavio Percoco
598fc75c4d Make atomics interior Unsafe<T> 2014-03-20 10:17:29 +01:00
Flavio Percoco
8767c69339 Let ArcData use Unsafe<T> 2014-03-20 10:17:28 +01:00
Flavio Percoco
3848021fae Make Cell and RefCell use Unsafe<T> 2014-03-20 10:16:56 +01:00
Flavio Percoco
710f13f0ad Add Unsafe<T> type 2014-03-20 10:16:55 +01:00
Flavio Percoco
21d23ff25b Make Rc, Cell and RefCell NoShare 2014-03-20 10:16:55 +01:00
Flavio Percoco
37154fb8b9 Add a Share kind
Fixes #11781
2014-03-20 10:16:55 +01:00
Daniel Micay
14f656d1a7 rename std::vec_ng -> std::vec
Closes #12771
2014-03-20 04:25:32 -04:00
Daniel Micay
ce620320a2 rename std::vec -> std::slice
Closes #12702
2014-03-20 01:30:27 -04:00
Corey Richardson
8fee3f6f6e std: io: flush stdout on stdin read from tty 2014-03-19 23:23:32 -04:00
Tobias Bucher
9b588a9f94 Remove std::cast::transmute_immut_unsafe
It can be done in safe code using `as *T`.
2014-03-19 16:15:22 +01:00
bors
8063450e57 auto merge of #12982 : brson/rust/optiondocs, r=alexcrichton
Various improvements. There's a lot more that can be done.
2014-03-19 06:01:48 -07:00
bors
ff033357bf auto merge of #12955 : sfackler/rust/vec_ng-doc, r=alexcrichton
I also removed a couple of methods that were silly and added sort.
2014-03-19 01:41:43 -07:00
Steven Fackler
0f2d46f396 Docify std::vec_ng
I also removed a couple of methods that were silly and added sort.
2014-03-18 22:03:17 -07:00
bors
a39c294155 auto merge of #12954 : brson/rust/atomicdocs, r=alexcrichton
This adds lots of docs to the atomics module. Two of the examples
are using the future atomics API (relying on `Share`) and are ignored temporarily.
I discovered a bug in the way AtomicBool's fetch_nand method is
implemented and fixed it by using the correct value for `true`.
I also fixed the implementation of AcqRel fences (it was only doing
a release barrier), and made a "relaxed" fence a failure.
2014-03-18 21:16:46 -07:00
Brian Anderson
8fcb8dd065 std: Improve option docs 2014-03-18 18:22:33 -07:00
Alex Crichton
2a5e04c2a4 Test fixes from the rollup 2014-03-18 16:29:57 -07:00
Marvin Löbel
113596655a Made the clone_from implementation for ~T reuse the T itself if
possible by also calling `clone_from` on it.

In general, `Clone` implementors that overwrite `clone_from`
should try to to use it recursivly for substructures.
2014-03-18 16:29:57 -07:00
Alex Crichton
848f7b734e rustdoc: Implement cross-crate searching
A major discoverability issue with rustdoc is that all crates have their
documentation built in isolation, so it's difficult when looking at the
documentation for libstd to learn that there's a libcollections crate with a
HashMap in it.

This commit moves rustdoc a little closer to improving the multiple crate
experience. This unifies all search indexes for all crates into one file so all
pages share the same search index. This allows searching to work across crates
in the same documentation directory (as the standard distribution is currently
built).

This strategy involves updating a shared file amongst many rustdoc processes, so
I implemented a simple file locking API for handling synchronization for updates
to the shared files.

cc #12554
2014-03-18 13:51:29 -07:00
Matthew McPherrin
d717d613e3 Docsprint: Document ops module, primarily Deref. 2014-03-18 13:51:17 -07:00
Jonathan S
168cd3a2f5 Relaxed the memory ordering on the implementation of UnsafeArc 2014-03-18 13:49:45 -07:00
Ziad Hatahet
c297cff777 Documentation and formatting changes for option.rs. 2014-03-18 13:49:37 -07:00
Eunchong Yu
e627bce939 Add impl IntoStr for ::std::vec_ng::Vec<Ascii> 2014-03-18 13:49:16 -07:00
Corey Richardson
f9e0baa19a remove duplicate methods in impls 2014-03-18 13:47:42 -07:00
Jorge Aparicio
1f4c63049e Make method Vec::remove() public 2014-03-18 11:53:32 -05:00
Brian Anderson
749e527be6 std: Improve docs for atomics. Fix two bugs
This adds lots of docs to the atomics module. Two of the examples
are using the future atomics API and are ignored temporarily.
I discovered a bug in the way AtomicBool's fetch_nand method is
implemented and fixed it by using the correct value for `true`.
I also fixed the implementation of AcqRel fences (it was only doing
a release barrier), and made a "relaxed" fence a failure.
2014-03-17 18:27:54 -07:00
bors
79203b522b auto merge of #12957 : lkuper/rust/docsprint, r=alexcrichton 2014-03-17 08:01:56 -07:00
bors
50e3aa31e2 auto merge of #12951 : cadencemarseille/rust/issue-12943-remove-AtomicFlag, r=alexcrichton
fixes #12943
2014-03-17 05:17:02 -07:00
bors
b6d5b8f6ff auto merge of #12945 : cadencemarseille/rust/vec_ng-as_mut_ptr, r=alexcrichton 2014-03-17 00:21:59 -07:00
bors
eb68beec4b auto merge of #12944 : mcpherrinm/rust/master, r=alexcrichton 2014-03-16 22:31:55 -07:00
Lindsey Kuper
7da2074827 strdup_uniq doesn't have to be pub. 2014-03-16 19:54:36 -04:00
Matthew McPherrin
5026d114a0 Doc-sprint: Document endian conversion functions 2014-03-16 15:57:16 -07:00
Cadence Marseille
13d73e99d6 Remove AtomicFlag
fixes #12943
2014-03-16 18:54:10 -04:00
Cadence Marseille
5db7f7ed24 Add method Vec<T>::as_mut_ptr() 2014-03-16 17:20:44 -04:00
bors
9e89ffc60e auto merge of #12931 : aochagavia/rust/option-take_unwrap, r=cmr
Using pattern matching instead of is_some + unwrap
2014-03-16 14:11:26 -07:00
aochagavia
ea8da6ed97 Refactored take_unwrap (libstd/option.rs)
Using pattern matching instead of is_some + unwrap
2014-03-16 12:11:13 +01:00
bors
d73c899383 auto merge of #12929 : sfackler/rust/automatically-derived, r=cmr
This will enable rustdoc to treat them specially.

I also got rid of `std::cmp::cmp2`, which is isomorphic to the `TotalOrd` impl for 2-tuples and never used.
2014-03-16 03:21:21 -07:00
Alex Crichton
0015cab1fd Test fixes and rebase conflicts
This commit switches over the backtrace infrastructure from piggy-backing off
the RUST_LOG environment variable to using the RUST_BACKTRACE environment
variable (logging is now disabled in libstd).
2014-03-15 22:56:46 -07:00
Alex Crichton
a921dc4873 rustc: Remove compiler support for __log_level()
This commit removes all internal support for the previously used __log_level()
expression. The logging subsystem was previously modified to not rely on this
magical expression. This also removes the only other function to use the
module_data map in trans, decl_gc_metadata. It appears that this is an ancient
function from a GC only used long ago.

This does not remove the crate map entirely, as libgreen still uses it to hook
in to the event loop provided by libgreen.
2014-03-15 22:26:36 -07:00
Alex Crichton
cc6ec8df95 log: Introduce liblog, the old std::logging
This commit moves all logging out of the standard library into an external
crate. This crate is the new crate which is responsible for all logging macros
and logging implementation. A few reasons for this change are:

* The crate map has always been a bit of a code smell among rust programs. It
  has difficulty being loaded on almost all platforms, and it's used almost
  exclusively for logging and only logging. Removing the crate map is one of the
  end goals of this movement.

* The compiler has a fair bit of special support for logging. It has the
  __log_level() expression as well as generating a global word per module
  specifying the log level. This is unfairly favoring the built-in logging
  system, and is much better done purely in libraries instead of the compiler
  itself.

* Initialization of logging is much easier to do if there is no reliance on a
  magical crate map being available to set module log levels.

* If the logging library can be written outside of the standard library, there's
  no reason that it shouldn't be. It's likely that we're not going to build the
  highest quality logging library of all time, so third-party libraries should
  be able to provide just as high-quality logging systems as the default one
  provided in the rust distribution.

With a migration such as this, the change does not come for free. There are some
subtle changes in the behavior of liblog vs the previous logging macros:

* The core change of this migration is that there is no longer a physical
  log-level per module. This concept is still emulated (it is quite useful), but
  there is now only a global log level, not a local one. This global log level
  is a reflection of the maximum of all log levels specified. The previously
  generated logging code looked like:

    if specified_level <= __module_log_level() {
        println!(...)
    }

  The newly generated code looks like:

    if specified_level <= ::log::LOG_LEVEL {
        if ::log::module_enabled(module_path!()) {
            println!(...)
        }
    }

  Notably, the first layer of checking is still intended to be "super fast" in
  that it's just a load of a global word and a compare. The second layer of
  checking is executed to determine if the current module does indeed have
  logging turned on.

  This means that if any module has a debug log level turned on, all modules
  with debug log levels get a little bit slower (they all do more expensive
  dynamic checks to determine if they're turned on or not).

  Semantically, this migration brings no change in this respect, but
  runtime-wise, this will have a perf impact on some code.

* A `RUST_LOG=::help` directive will no longer print out a list of all modules
  that can be logged. This is because the crate map will no longer specify the
  log levels of all modules, so the list of modules is not known. Additionally,
  warnings can no longer be provided if a malformed logging directive was
  supplied.

The new "hello world" for logging looks like:

    #[phase(syntax, link)]
    extern crate log;

    fn main() {
        debug!("Hello, world!");
    }
2014-03-15 22:26:36 -07:00
Steven Fackler
2c372201d4 Remove std::cmp::cmp2.
It isn't used anywhere and `cmp2(a, b, c, d)` is identical to
`(a, b).cmp(&(c, d))`.
2014-03-15 21:04:56 -07:00
Luqman Aden
15b962a9b9 libstd: Fix a typo. s/target_os/target_arch/ 2014-03-15 18:45:26 -04:00
bors
fc7a112808 auto merge of #12896 : alexcrichton/rust/goodbye-extra, r=brson
This commit shreds all remnants of libextra from the compiler and standard
distribution. Two modules, c_vec/tempfile, were moved into libstd after some
cleanup, and the other modules were moved to separate crates as seen fit.

Closes #8784
Closes #12413
Closes #12576
2014-03-14 23:11:31 -07:00
bors
58fb492f9c auto merge of #12893 : alexcrichton/rust/cfg-not, r=luqmana
The two commits have the details of the two fixes
2014-03-14 18:26:30 -07:00