1. 08 1月, 2015 6 次提交
    • A
      Test fixes and rebase conflicts · 0dc48b47
      Alex Crichton 提交于
      0dc48b47
    • F
      3fd6bfa8
    • A
      std: Tweak String implementations · 9851b4fb
      Alex Crichton 提交于
      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.
      9851b4fb
    • F
    • D
      Fix #[stable] coming before } instead of after · 801585d7
      Dabo Ross 提交于
      This changes a line that has `\n#[stable]}` to instead have `}\n#[stable]`
      801585d7
    • A
      std: Stabilize the std::hash module · 511f0b8a
      Alex Crichton 提交于
      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]
      511f0b8a
  2. 07 1月, 2015 3 次提交
    • N
      markers -> marker · 9f07d055
      Nick Cameron 提交于
      9f07d055
    • S
      core: split into fmt::Show and fmt::String · 44440e5c
      Sean McArthur 提交于
      fmt::Show is for debugging, and can and should be implemented for
      all public types. This trait is used with `{:?}` syntax. There still
      exists #[derive(Show)].
      
      fmt::String is for types that faithfully be represented as a String.
      Because of this, there is no way to derive fmt::String, all
      implementations must be purposeful. It is used by the default format
      syntax, `{}`.
      
      This will break most instances of `{}`, since that now requires the type
      to impl fmt::String. In most cases, replacing `{}` with `{:?}` is the
      correct fix. Types that were being printed specifically for users should
      receive a fmt::String implementation to fix this.
      
      Part of #20013
      
      [breaking-change]
      44440e5c
    • N
      Change `std::kinds` to `std::markers`; flatten `std::kinds::marker` · 50370970
      Nick Cameron 提交于
      [breaking-change]
      50370970
  3. 06 1月, 2015 2 次提交
  4. 04 1月, 2015 2 次提交
  5. 03 1月, 2015 2 次提交
  6. 02 1月, 2015 1 次提交
    • A
      std: Second pass stabilization for `boxed` · f2ccdfd8
      Alex Crichton 提交于
      This commit performs a second pass over the `std::boxed` module, taking the
      following actions:
      
      * `boxed` is now stable
      * `Box` is now stable
      * `BoxAny` is removed in favor of a direct `impl Box<Any>`
      * `Box::downcast` remains unstable while the name of the `downcast` family of
        methods is determined.
      
      This is a breaking change due to the removal of the `BoxAny` trait (note that
      the `downcast` method still exists), and existing consumers of `BoxAny` simply
      need to remove the import in their modules.
      
      [breaking-change]
      f2ccdfd8
  7. 31 12月, 2014 1 次提交
    • A
      Stabilize cmp · b94bcbf5
      Aaron Turon 提交于
      This patch marks `PartialEq`, `Eq`, `PartialOrd`, and `Ord` as
      `#[stable]`, as well as the majorify of manual implementaitons of these
      traits. The traits match the [reform
      RFC](https://github.com/rust-lang/rfcs/pull/439).
      
      Along the way, two changes are made:
      
      * The recently-added type parameters for `Ord` and `Eq` are
        removed. These were mistakenly added while adding them to `PartialOrd`
        and `PartialEq`, but they don't make sense given the laws that are
        required for (and use cases for) `Ord` and `Eq`.
      
      * More explicit laws are added for `PartialEq` and `PartialOrd`,
        connecting them to their associated mathematical concepts.
      
      In the future, many of the impls should be generalized; see
      since generalizing later is not a breaking change.
      
      [breaking-change]
      b94bcbf5
  8. 27 12月, 2014 3 次提交
  9. 20 12月, 2014 2 次提交
    • A
      Stabilize clone · 92ccc073
      Aaron Turon 提交于
      This patch marks `clone` stable, as well as the `Clone` trait, but
      leaves `clone_from` unstable. The latter will be decided by the beta.
      
      The patch also marks most manual implementations of `Clone` as stable,
      except where the APIs are otherwise deprecated or where there is
      uncertainty about providing `Clone`.
      92ccc073
    • B
      Implement Deref for Box · 39f24906
      Barosl Lee 提交于
      Fixes #18624.
      39f24906
  10. 16 12月, 2014 2 次提交
    • S
      Move hash module from collections to core · 24a8ef63
      Steven Fackler 提交于
      24a8ef63
    • A
      std: Second pass stabilization of `default` · 9021f61e
      Alex Crichton 提交于
      This commit performs a second pass stabilization of the `std::default` module.
      The module was already marked `#[stable]`, and the inheritance of `#[stable]`
      was removed since this attribute was applied. This commit adds the `#[stable]`
      attribute to the trait definition and one method name, along with all
      implementations found in the standard distribution.
      9021f61e
  11. 07 12月, 2014 1 次提交
  12. 06 12月, 2014 1 次提交
  13. 23 11月, 2014 1 次提交
  14. 13 11月, 2014 1 次提交
  15. 07 11月, 2014 1 次提交
  16. 06 11月, 2014 1 次提交
  17. 31 10月, 2014 1 次提交
  18. 29 10月, 2014 1 次提交
    • S
      Rename fail! to panic! · 7828c3dd
      Steve Klabnik 提交于
      https://github.com/rust-lang/rfcs/pull/221
      
      The current terminology of "task failure" often causes problems when
      writing or speaking about code. You often want to talk about the
      possibility of an operation that returns a Result "failing", but cannot
      because of the ambiguity with task failure. Instead, you have to speak
      of "the failing case" or "when the operation does not succeed" or other
      circumlocutions.
      
      Likewise, we use a "Failure" header in rustdoc to describe when
      operations may fail the task, but it would often be helpful to separate
      out a section describing the "Err-producing" case.
      
      We have been steadily moving away from task failure and toward Result as
      an error-handling mechanism, so we should optimize our terminology
      accordingly: Result-producing functions should be easy to describe.
      
      To update your code, rename any call to `fail!` to `panic!` instead.
      Assuming you have not created your own macro named `panic!`, this
      will work on UNIX based systems:
      
          grep -lZR 'fail!' . | xargs -0 -l sed -i -e 's/fail!/panic!/g'
      
      You can of course also do this by hand.
      
      [breaking-change]
      7828c3dd
  19. 27 9月, 2014 1 次提交
    • P
      librustc: Eliminate the `ref` syntax for unboxed closure capture clauses · 2257e231
      Patrick Walton 提交于
      in favor of `move`.
      
      This breaks code that used `move` as an identifier, because it is now a
      keyword. Change such identifiers to not use the keyword `move`.
      Additionally, this breaks code that was counting on by-value or
      by-reference capture semantics for unboxed closures (behind the feature
      gate). Change `ref |:|` to `|:|` and `|:|` to `move |:|`.
      
      Part of RFC #63; part of issue #12831.
      
      [breaking-change]
      2257e231
  20. 28 8月, 2014 1 次提交
  21. 19 8月, 2014 1 次提交
  22. 27 7月, 2014 1 次提交
    • A
      std: Stabilize unit, bool, ty, tuple, arc, any · e5da6a71
      Alex Crichton 提交于
      This commit applies stability attributes to the contents of these modules,
      summarized here:
      
      * The `unit` and `bool` modules have become #[unstable] as they are purely meant
        for documentation purposes and are candidates for removal.
      
      * The `ty` module has been deprecated, and the inner `Unsafe` type has been
        renamed to `UnsafeCell` and moved to the `cell` module. The `marker1` field
        has been removed as the compiler now always infers `UnsafeCell` to be
        invariant. The `new` method i stable, but the `value` field, `get` and
        `unwrap` methods are all unstable.
      
      * The `tuple` module has its name as stable, the naming of the `TupleN` traits
        as stable while the methods are all #[unstable]. The other impls in the module
        have appropriate stability for the corresponding trait.
      
      * The `arc` module has received the exact same treatment as the `rc` module
        previously did.
      
      * The `any` module has its name as stable. The `Any` trait is also stable, with
        a new private supertrait which now contains the `get_type_id` method. This is
        to make the method a private implementation detail rather than a public-facing
        detail.
      
        The two extension traits in the module are marked #[unstable] as they will not
        be necessary with DST. The `is` method is #[stable], the as_{mut,ref} methods
        have been renamed to downcast_{mut,ref} and are #[unstable].
      
        The extension trait `BoxAny` has been clarified as to why it is unstable as it
        will not be necessary with DST.
      
      This is a breaking change because the `marker1` field was removed from the
      `UnsafeCell` type. To deal with this change, you can simply delete the field and
      only specify the value of the `data` field in static initializers.
      
      [breaking-change]
      e5da6a71
  23. 18 7月, 2014 1 次提交
    • P
      librustc: Remove cross-borrowing of `Box<T>` to `&T` from the language, · de70d763
      Patrick Walton 提交于
      except where trait objects are involved.
      
      Part of issue #15349, though I'm leaving it open for trait objects.
      Cross borrowing for trait objects remains because it is needed until we
      have DST.
      
      This will break code like:
      
          fn foo(x: &int) { ... }
      
          let a = box 3i;
          foo(a);
      
      Change this code to:
      
          fn foo(x: &int) { ... }
      
          let a = box 3i;
          foo(&*a);
      
      [breaking-change]
      de70d763
  24. 14 7月, 2014 1 次提交
    • A
      Stabilization for `owned` (now `boxed`) and `cell` · e0ede9c6
      Aaron Turon 提交于
      This PR is the outcome of the library stabilization meeting for the
      `liballoc::owned` and `libcore::cell` modules.
      
      Aside from the stability attributes, there are a few breaking changes:
      
      * The `owned` modules is now named `boxed`, to better represent its
        contents. (`box` was unavailable, since it's a keyword.) This will
        help avoid the misconception that `Box` plays a special role wrt
        ownership.
      
      * The `AnyOwnExt` extension trait is renamed to `BoxAny`, and its `move`
        method is renamed to `downcast`, in both cases to improve clarity.
      
      * The recently-added `AnySendOwnExt` extension trait is removed; it was
        not being used and is unnecessary.
      
      [breaking-change]
      e0ede9c6
  25. 30 6月, 2014 2 次提交
    • S
      Implement RFC#28: Add PartialOrd::partial_cmp · 55cae0a0
      Steven Fackler 提交于
      I ended up altering the semantics of Json's PartialOrd implementation.
      It used to be the case that Null < Null, but I can't think of any reason
      for an ordering other than the default one so I just switched it over to
      using the derived implementation.
      
      This also fixes broken `PartialOrd` implementations for `Vec` and
      `TreeMap`.
      
      RFC: 0028-partial-cmp
      55cae0a0
    • S
      Extract tests from libcore to a separate crate · 1ed646ea
      Steven Fackler 提交于
      Libcore's test infrastructure is complicated by the fact that many lang
      items are defined in the crate. The current approach (realcore/realstd
      imports) is hacky and hard to work with (tests inside of core::cmp
      haven't been run for months!).
      
      Moving tests to a separate crate does mean that they can only test the
      public API of libcore, but I don't feel that that is too much of an
      issue. The only tests that I had to get rid of were some checking the
      various numeric formatters, but those are also exercised through normal
      format! calls in other tests.
      1ed646ea