Commit Graph

36914 Commits

Author SHA1 Message Date
Alex Crichton
9851b4fbbf std: Tweak String implementations
This commit performs a pass over the implementations of the new `String` trait
in the formatting module. Some implementations were removed as a conservative
move pending an upcoming convention about `String` implementations, and some
were added in order to retain consistency across the libraries. Specifically:

* All "smart pointers" implement `String` now, adding missing implementations
  for `Arc` and `Rc`.
* The `Vec<T>` and `[T]` types no longer implement `String`.
* The `*const T` and `*mut T` type no longer implement `String`.
* The `()` type no longer implements `String`.
* The `Path` type's `Show` implementation does not surround itself with `Path
  {}` (a minor tweak).

All implementations of `String` in this PR were also marked `#[stable]` to
indicate that the types will continue to implement the `String` trait regardless
of what it looks like.
2015-01-07 15:24:21 -08:00
Huon Wilson
3c1ca175d1 Require that types cannot implement both Drop and Copy.
Opt-in built-in traits allowed one to explicitly implement both `Drop`
and `Copy` for a type. This can theoretically make some sense, but the
current implementation means it is codegened totally incorrectly which
can lead to memory unsafety, so this feature is disabled for now.

Fixes #20126.
2015-01-08 10:07:07 +11:00
Jorge Aparicio
517f1cc63c use slicing sugar 2015-01-07 17:35:56 -05:00
Felix S. Klock II
82af2a1847 Add Box::new method. Prereq for feature-gating box <expr> itself. 2015-01-07 23:25:31 +01:00
Nick Cameron
63a9bd5e0a Fix precedence for ranges.
Technically this is a

[breaking-change]

but it probably shouldn't affect your code.

Closes #20256
2015-01-08 11:25:00 +13:00
Nick Cameron
e15f043248 Show, String, Eq impls for Ranges 2015-01-08 11:21:04 +13:00
Jorge Aparicio
6e2bfe4ae8 register new snapshots 2015-01-07 17:15:06 -05:00
Brian Anderson
4a041170d1 mk: Remove RUST_NDEBUG and RUST_DEBUG defines. Unused 2015-01-07 13:33:22 -08:00
Alex Crichton
209c701bf9 std: Stablize the macros module
This commit performs a pass over the `std::macros` module, applying stability
attributes where necessary. In particular, this audits macros for patterns such
as:

* Standard use of forward-to-format-args via `$($arg:tt)*` (or `+`)
* Prevent macro-defined identifiers from leaking into expression arguments as
  hygiene is not perfectly implemented.
* Wherever possible, `$crate` is used now.

Specifically, the following actions were taken:

* The `std::macros` module itself is no longer public.
* The `panic!` macro is stable
* The `assert!` macro is stable
* The `assert_eq!` macro is stable
* The `debug_assert!` macro is stable
* The `debug_assert_eq!` macro is stable
* The `unreachable!` macro is stable after removing the extra forms to bring the
  definition in line with the `unimplemented!` macro.
* The `try!` macro is stable
* The `vec!` macro is stable

[breaking-change]
2015-01-07 12:56:16 -08:00
Thiago Pontes
9fcf097648 fix typo in the ownership guide 2015-01-07 18:42:15 -02:00
Dabo Ross
801585d75a Fix #[stable] coming before } instead of after
This changes a line that has `\n#[stable]}` to instead have `}\n#[stable]`
2015-01-07 20:41:54 +00:00
Alex Crichton
511f0b8a3d std: Stabilize the std::hash module
This commit aims to prepare the `std::hash` module for alpha by formalizing its
current interface whileholding off on adding `#[stable]` to the new APIs.  The
current usage with the `HashMap` and `HashSet` types is also reconciled by
separating out composable parts of the design. The primary goal of this slight
redesign is to separate the concepts of a hasher's state from a hashing
algorithm itself.

The primary change of this commit is to separate the `Hasher` trait into a
`Hasher` and a `HashState` trait. Conceptually the old `Hasher` trait was
actually just a factory for various states, but hashing had very little control
over how these states were used. Additionally the old `Hasher` trait was
actually fairly unrelated to hashing.

This commit redesigns the existing `Hasher` trait to match what the notion of a
`Hasher` normally implies with the following definition:

    trait Hasher {
        type Output;
        fn reset(&mut self);
        fn finish(&self) -> Output;
    }

This `Hasher` trait emphasizes that hashing algorithms may produce outputs other
than a `u64`, so the output type is made generic. Other than that, however, very
little is assumed about a particular hasher. It is left up to implementors to
provide specific methods or trait implementations to feed data into a hasher.

The corresponding `Hash` trait becomes:

    trait Hash<H: Hasher> {
        fn hash(&self, &mut H);
    }

The old default of `SipState` was removed from this trait as it's not something
that we're willing to stabilize until the end of time, but the type parameter is
always required to implement `Hasher`. Note that the type parameter `H` remains
on the trait to enable multidispatch for specialization of hashing for
particular hashers.

Note that `Writer` is not mentioned in either of `Hash` or `Hasher`, it is
simply used as part `derive` and the implementations for all primitive types.

With these definitions, the old `Hasher` trait is realized as a new `HashState`
trait in the `collections::hash_state` module as an unstable addition for
now. The current definition looks like:

    trait HashState {
        type Hasher: Hasher;
        fn hasher(&self) -> Hasher;
    }

The purpose of this trait is to emphasize that the one piece of functionality
for implementors is that new instances of `Hasher` can be created.  This
conceptually represents the two keys from which more instances of a
`SipHasher` can be created, and a `HashState` is what's stored in a
`HashMap`, not a `Hasher`.

Implementors of custom hash algorithms should implement the `Hasher` trait, and
only hash algorithms intended for use in hash maps need to implement or worry
about the `HashState` trait.

The entire module and `HashState` infrastructure remains `#[unstable]` due to it
being recently redesigned, but some other stability decision made for the
`std::hash` module are:

* The `Writer` trait remains `#[experimental]` as it's intended to be replaced
  with an `io::Writer` (more details soon).
* The top-level `hash` function is `#[unstable]` as it is intended to be generic
  over the hashing algorithm instead of hardwired to `SipHasher`
* The inner `sip` module is now private as its one export, `SipHasher` is
  reexported in the `hash` module.

And finally, a few changes were made to the default parameters on `HashMap`.

* The `RandomSipHasher` default type parameter was renamed to `RandomState`.
  This renaming emphasizes that it is not a hasher, but rather just state to
  generate hashers. It also moves away from the name "sip" as it may not always
  be implemented as `SipHasher`. This type lives in the
  `std::collections::hash_map` module as `#[unstable]`

* The associated `Hasher` type of `RandomState` is creatively called...
  `Hasher`! This concrete structure lives next to `RandomState` as an
  implemenation of the "default hashing algorithm" used for a `HashMap`. Under
  the hood this is currently implemented as `SipHasher`, but it draws an
  explicit interface for now and allows us to modify the implementation over
  time if necessary.

There are many breaking changes outlined above, and as a result this commit is
a:

[breaking-change]
2015-01-07 12:18:08 -08:00
Aaron Turon
321d9ddff2 Update references to old snapshot 2015-01-07 12:14:59 -08:00
Nick Cameron
dd3e89aaf2 Rename target_word_size to target_pointer_width
Closes #20421

[breaking-change]
2015-01-08 09:07:55 +13:00
Aaron Turon
7deb9abd1b Add isize, usize modules, deprecate int, uint modules
This PR introduces `isize` and `usize` modules to `core` and `std`, and
deprecates the existing `int` and `uint` modules. The rustdoc primitive
type links now point to these new modules.

Due to deprecation this is a:

[breaking-change]
2015-01-07 11:40:11 -08:00
Jared Roesch
120a52034d Reject all uses of non-typaram bounds 2015-01-07 11:27:36 -08:00
John Ericson
b1b4bc90b8 Fix warning in liballoc about unused constant MIN_ALIGN when cfg(feature = external_*) 2015-01-07 19:22:22 +00:00
John Ericson
ea9d5c9653 liballoc's "extern_funcs" impl mod had a duplicate and missing item 2015-01-07 19:19:01 +00:00
John Ericson
2b84e44b07 Shorten cfg line lengths in liballoc 2015-01-07 19:19:01 +00:00
John Ericson
efaa43ade5 liballoc's "external_funcs" and "external_crate" are now features
This allows the vanilla libary to built for kernel use with Cargo.
2015-01-07 19:19:00 +00:00
John Ericson
f67a7227b7 liballoc does not need liblibc under certain configurations 2015-01-07 19:18:59 +00:00
Niko Matsakis
a70428aa09 Add regression test for #20582. Fixes #20582. 2015-01-07 14:07:58 -05:00
Niko Matsakis
448ddad877 Better debug output in decl_rust_fn. The lack of output here has
caused me quite a bit of hair-pulling.
2015-01-07 14:07:58 -05:00
Niko Matsakis
aec62af742 Solve rather subtle bug in replace_late_bound_regions -- we were passing the debruijn index in so that callees could construct late-bound regions at the right depth, but then the result was cached. When the cached result was used, it might be at the wrong depth. So now we don't pass the result in and instead simply adjust the depth to match the current nesting level as we go. 2015-01-07 14:07:58 -05:00
Niko Matsakis
cf136cd350 Use the erase_regions helper within trans in deference to
`ty_fold::erase_regions`; also erase regions whenever we normalize
associated types.
2015-01-07 14:07:58 -05:00
Niko Matsakis
bdc1bfd8f1 Rename common::normalize to common::erase_regions 2015-01-07 14:07:58 -05:00
Niko Matsakis
6300a97216 Remove assertion that substitutions are erased. It'd be nice if they
always were but it's dang annoying to weed out all the places that
fail to meet the assertion, and it doesn't really hurt things if we don't
always get it right.
2015-01-07 13:59:02 -05:00
Niko Matsakis
064cf553c7 Normalize associated types in various parts of adt 2015-01-07 13:58:27 -05:00
Alex Crichton
b53e9f17d3 Register new snapshots 2015-01-07 10:27:52 -08:00
Barosl Lee
29ff43bbbb Fix rustdoc fallout from #20092
Due to the CSS changes done by the previous patch to make the line
numbers clickable (#20092), the sidebar became unclickable. This commit
reverts the changes and adopts an alternative approach.
2015-01-08 03:10:02 +09:00
Alex Crichton
99b39cc98e test: Move some tests to scoped instead of spawn
These tests have all been failing spuroiusly on Windows from time to time, and
one suspicion is that the shilc thread outliving the main thread somehow causes
the problem. Switch all the tests over to using Thread::scoped instead of
Thread::spawn to see if it helps the issue.

cc #19120
2015-01-07 10:06:27 -08:00
bors
9f1ead8fad auto merge of #20655 : nikomatsakis/rust/carl-ice, r=aturon
Remember to check the name of the associated type being projected when searching the environment. Fixes #20651.
2015-01-07 17:45:11 +00:00
Niko Matsakis
ea441e16b4 Remember to check the name of the associated type being projected when searching the environment. Fixes #20651. 2015-01-07 11:24:50 -05:00
bors
2a8cb678e6 Merge pull request #20689 from huonw/editor-_size
Update editor syntax files for isize/usize.

Reviewed-by: nikomatsakis
2015-01-07 15:35:34 +00:00
bors
f7105bfade Merge pull request #20682 from sfackler/fix-impls
Fix JS error

Reviewed-by: alexcrichton
2015-01-07 15:35:33 +00:00
bors
847bb37515 Merge pull request #20679 from geekcraik/master
unused variable 'i'

Reviewed-by: sfackler
2015-01-07 15:35:31 +00:00
bors
eb02f2d7e5 Merge pull request #20675 from jbcrail/fix-test-comments
Fix misspelled comments in tests.

Reviewed-by: steveklabnik
2015-01-07 15:35:30 +00:00
bors
c0216c8945 Merge pull request #20674 from jbcrail/fix-misspelled-comments
Fix misspelled comments.

Reviewed-by: steveklabnik
2015-01-07 15:35:30 +00:00
bors
7377c0b1a9 Merge pull request #20672 from vrana/patch-3
Fix a typo in guide

Reviewed-by: steveklabnik
2015-01-07 15:35:28 +00:00
bors
5064c8d9dc Merge pull request #20670 from vrana/patch-2
Fix type annotation in guide

Reviewed-by: steveklabnik
2015-01-07 15:35:27 +00:00
bors
2e2a2cdb59 Merge pull request #20669 from vrana/patch-1
Use a better word in the guide

Reviewed-by: steveklabnik
2015-01-07 15:35:26 +00:00
Corey Farwell
4f801c433f Bump copyright year in doc footer 2015-01-07 09:23:31 -05:00
FakeKane
da83e4d98a oboe removed 2015-01-07 09:09:37 -05:00
bors
dfd557bd73 auto merge of #20606 : alexcrichton/rust/stabilize-libc, r=brson
This commit prepares the liblibc library to be moved to crates.io. Unlike the
log, serialize, term, etc crates, the source for this crate will *not* be
duplicated out-of-tree. Instead a new rust-lang/libc repository will be created
with a submodule to this repository and it will use the source directly.

In order to compile within the stable ecosystem of Rust, this crate cannot link
to libcore, and it also needs some tweaks for the other attributes that it has.
As a result this commit tweaks the source of the crate to link to libcore when
built in tree but link to libstd when built via cargo.

Note that the rust-lang/libc crate isn't quite prepared just yet, there's a
Cargo bug or two that I'd like to iron out before publishing it. This is simply
preparing the in-tree source.
2015-01-07 12:25:15 +00:00
Huon Wilson
6c7291ece4 Update editor syntax files for isize/usize.
Yay, syntax highlighting.
2015-01-07 20:19:58 +11:00
Alex Crichton
01ce6efd85 libc: Prepare for movement to crates.io
This commit prepares the liblibc library to be moved to crates.io. Unlike the
log, serialize, term, etc crates, the source for this crate will *not* be
duplicated out-of-tree. Instead a new rust-lang/libc repository will be created
with a submodule to this repository and it will use the source directly.

In order to compile within the stable ecosystem of Rust, this crate cannot link
to libcore, and it also needs some tweaks for the other attributes that it has.
As a result this commit tweaks the source of the crate to link to libcore when
built in tree but link to libstd when built via cargo.

Note that the rust-lang/libc crate isn't quite prepared just yet, there's a
Cargo bug or two that I'd like to iron out before publishing it. This is simply
preparing the in-tree source.
2015-01-07 00:43:49 -08:00
bors
a3a16e9610 auto merge of #20620 : brson/rust/relnotes, r=huonw
A whole lot happened this cycle. I tried to highlight the best stuff. Please review and note important stuff I'm missing or foolish mistakes.
2015-01-07 08:32:46 +00:00
Brian Anderson
9d8de1f42c Sync -> Send 2015-01-06 22:16:34 -08:00
Brian Anderson
ef6126a495 Merge pull request #25 from aturon/relnotes-updates
Add int discussion, tweak wording
2015-01-06 22:15:10 -08:00
bors
9e4e524e0e auto merge of #20677 : alexcrichton/rust/rollup, r=alexcrichton 2015-01-07 05:31:23 +00:00