1. 03 2月, 2015 2 次提交
  2. 31 1月, 2015 1 次提交
    • A
      std: Stabilize the std::fmt module · 62273575
      Alex Crichton 提交于
      This commit performs a final stabilization pass over the std::fmt module,
      marking all necessary APIs as stable. One of the more interesting aspects of
      this module is that it exposes a good deal of its runtime representation to the
      outside world in order for `format_args!` to be able to construct the format
      strings. Instead of hacking the compiler to assume that these items are stable,
      this commit instead lays out a story for the stabilization and evolution of
      these APIs.
      
      There are three primary details used by the `format_args!` macro:
      
      1. `Arguments` - an opaque package of a "compiled format string". This structure
         is passed around and the `write` function is the source of truth for
         transforming a compiled format string into a string at runtime. This must be
         able to be constructed in stable code.
      
      2. `Argument` - an opaque structure representing an argument to a format string.
         This is *almost* a trait object as it's just a pointer/function pair, but due
         to the function originating from one of many traits, it's not actually a
         trait object. Like `Arguments`, this must be constructed from stable code.
      
      3. `fmt::rt` - this module contains the runtime type definitions primarily for
         the `rt::Argument` structure. Whenever an argument is formatted with
         nonstandard flags, a corresponding `rt::Argument` is generated describing how
         the argument is being formatted. This can be used to construct an
         `Arguments`.
      
      The primary interface to `std::fmt` is the `Arguments` structure, and as such
      this type name is stabilize as-is today. It is expected for libraries to pass
      around an `Arguments` structure to represent a pending formatted computation.
      
      The remaining portions are largely "cruft" which would rather not be stabilized,
      but due to the stability checks they must be. As a result, almost all pieces
      have been renamed to represent that they are "version 1" of the formatting
      representation. The theory is that at a later date if we change the
      representation of these types we can add new definitions called "version 2" and
      corresponding constructors for `Arguments`.
      
      One of the other remaining large questions about the fmt module were how the
      pending I/O reform would affect the signatures of methods in the module. Due to
      [RFC 526][rfc], however, the writers of fmt are now incompatible with the
      writers of io, so this question has largely been solved. As a result the
      interfaces are largely stabilized as-is today.
      
      [rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0526-fmt-text-writer.md
      
      Specifically, the following changes were made:
      
      * The contents of `fmt::rt` were all moved under `fmt::rt::v1`
      * `fmt::rt` is stable
      * `fmt::rt::v1` is stable
      * `Error` is stable
      * `Writer` is stable
      * `Writer::write_str` is stable
      * `Writer::write_fmt` is stable
      * `Formatter` is stable
      * `Argument` has been renamed to `ArgumentV1` and is stable
      * `ArgumentV1::new` is stable
      * `ArgumentV1::from_uint` is stable
      * `Arguments::new_v1` is stable (renamed from `new`)
      * `Arguments::new_v1_formatted` is stable (renamed from `with_placeholders`)
      * All formatting traits are now stable, as well as the `fmt` method.
      * `fmt::write` is stable
      * `fmt::format` is stable
      * `Formatter::pad_integral` is stable
      * `Formatter::pad` is stable
      * `Formatter::write_str` is stable
      * `Formatter::write_fmt` is stable
      * Some assorted top level items which were only used by `format_args!` were
        removed in favor of static functions on `ArgumentV1` as well.
      * The formatting-flag-accessing methods remain unstable
      
      Within the contents of the `fmt::rt::v1` module, the following actions were
      taken:
      
      * Reexports of all enum variants were removed
      * All prefixes on enum variants were removed
      * A few miscellaneous enum variants were renamed
      * Otherwise all structs, fields, and variants were marked stable.
      
      In addition to these actions in the `std::fmt` module, many implementations of
      `Show` and `String` were stabilized as well.
      
      In some other modules:
      
      * `ToString` is now stable
      * `ToString::to_string` is now stable
      * `Vec` no longer implements `fmt::Writer` (this has moved to `String`)
      
      This is a breaking change due to all of the changes to the `fmt::rt` module, but
      this likely will not have much impact on existing programs.
      
      Closes #20661
      [breaking-change]
      62273575
  3. 30 1月, 2015 3 次提交
  4. 29 1月, 2015 3 次提交
  5. 24 1月, 2015 2 次提交
  6. 22 1月, 2015 2 次提交
  7. 21 1月, 2015 1 次提交
    • A
      std: Rename Show/String to Debug/Display · 3cb9fa26
      Alex Crichton 提交于
      This commit is an implementation of [RFC 565][rfc] which is a stabilization of
      the `std::fmt` module and the implementations of various formatting traits.
      Specifically, the following changes were performed:
      
      [rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0565-show-string-guidelines.md
      
      * The `Show` trait is now deprecated, it was renamed to `Debug`
      * The `String` trait is now deprecated, it was renamed to `Display`
      * Many `Debug` and `Display` implementations were audited in accordance with the
        RFC and audited implementations now have the `#[stable]` attribute
        * Integers and floats no longer print a suffix
        * Smart pointers no longer print details that they are a smart pointer
        * Paths with `Debug` are now quoted and escape characters
      * The `unwrap` methods on `Result` now require `Display` instead of `Debug`
      * The `Error` trait no longer has a `detail` method and now requires that
        `Display` must be implemented. With the loss of `String`, this has moved into
        libcore.
      * `impl<E: Error> FromError<E> for Box<Error>` now exists
      * `derive(Show)` has been renamed to `derive(Debug)`. This is not currently
        warned about due to warnings being emitted on stage1+
      
      While backwards compatibility is attempted to be maintained with a blanket
      implementation of `Display` for the old `String` trait (and the same for
      `Show`/`Debug`) this is still a breaking change due to primitives no longer
      implementing `String` as well as modifications such as `unwrap` and the `Error`
      trait. Most code is fairly straightforward to update with a rename or tweaks of
      method calls.
      
      [breaking-change]
      Closes #21436
      3cb9fa26
  8. 20 1月, 2015 1 次提交
  9. 17 1月, 2015 1 次提交
    • S
      Revert stability for Bitv and BitvSet · 873ae555
      Simonas Kazlauskas 提交于
      The collections were promoted to stable by mistake and do not match RFC 509.
      This reverts the stability back to unstable.
      
      [breaking-change] since previously stable API became unstable.
      
      Fixes #21193
      873ae555
  10. 13 1月, 2015 1 次提交
  11. 09 1月, 2015 1 次提交
  12. 08 1月, 2015 2 次提交
    • J
      use slicing sugar · 517f1cc6
      Jorge Aparicio 提交于
      517f1cc6
    • 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
  13. 07 1月, 2015 3 次提交
    • A
      More test fixes · a6400082
      Alex Crichton 提交于
      a6400082
    • 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
      Replace full slice notation with index calls · f7ff37e4
      Nick Cameron 提交于
      f7ff37e4
  14. 06 1月, 2015 1 次提交
  15. 04 1月, 2015 4 次提交
    • A
      Remove deprecated functionality · 7d8d06f8
      Alex Crichton 提交于
      This removes a large array of deprecated functionality, regardless of how
      recently it was deprecated. The purpose of this commit is to clean out the
      standard libraries and compiler for the upcoming alpha release.
      
      Some notable compiler changes were to enable warnings for all now-deprecated
      command line arguments (previously the deprecated versions were silently
      accepted) as well as removing deriving(Zero) entirely (the trait was removed).
      
      The distribution no longer contains the libtime or libregex_macros crates. Both
      of these have been deprecated for some time and are available externally.
      7d8d06f8
    • J
      sed -i -s 's/#\[deriving(/#\[derive(/g' **/*.rs · 351409a6
      Jorge Aparicio 提交于
      351409a6
    • J
      sed -i -s 's/\bmod,/self,/g' **/*.rs · 56dcbd17
      Jorge Aparicio 提交于
      56dcbd17
    • J
      collections: fix fallout · 32dd592d
      Jorge Aparicio 提交于
      32dd592d
  16. 03 1月, 2015 3 次提交
    • J
      collections: fix fallout · 6b116bed
      Jorge Aparicio 提交于
      6b116bed
    • A
      Rollup test fixes and rebase conflicts · e921e3f0
      Alex Crichton 提交于
      e921e3f0
    • A
      std: Stabilize the prelude module · 56290a00
      Alex Crichton 提交于
      This commit is an implementation of [RFC 503][rfc] which is a stabilization
      story for the prelude. Most of the RFC was directly applied, removing reexports.
      Some reexports are kept around, however:
      
      * `range` remains until range syntax has landed to reduce churn.
      * `Path` and `GenericPath` remain until path reform lands. This is done to
        prevent many imports of `GenericPath` which will soon be removed.
      * All `io` traits remain until I/O reform lands so imports can be rewritten all
        at once to `std::io::prelude::*`.
      
      This is a breaking change because many prelude reexports have been removed, and
      the RFC can be consulted for the exact list of removed reexports, as well as to
      find the locations of where to import them.
      
      [rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0503-prelude-stabilization.md
      [breaking-change]
      
      Closes #20068
      56290a00
  17. 01 1月, 2015 1 次提交
  18. 31 12月, 2014 2 次提交
    • A
      Fallout from stabilization · 6abfac08
      Aaron Turon 提交于
      6abfac08
    • 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
  19. 30 12月, 2014 3 次提交
    • H
      Implement `Clone` for a large number of iterators & other adaptors. · b7832ed0
      Huon Wilson 提交于
      It's useful to be able to save state.
      b7832ed0
    • A
      std: Second pass stabilization for `comm` · bc83a009
      Alex Crichton 提交于
      This commit is a second pass stabilization for the `std::comm` module,
      performing the following actions:
      
      * The entire `std::comm` module was moved under `std::sync::mpsc`. This movement
        reflects that channels are just yet another synchronization primitive, and
        they don't necessarily deserve a special place outside of the other
        concurrency primitives that the standard library offers.
      * The `send` and `recv` methods have all been removed.
      * The `send_opt` and `recv_opt` methods have been renamed to `send` and `recv`.
        This means that all send/receive operations return a `Result` now indicating
        whether the operation was successful or not.
      * The error type of `send` is now a `SendError` to implement a custom error
        message and allow for `unwrap()`. The error type contains an `into_inner`
        method to extract the value.
      * The error type of `recv` is now `RecvError` for the same reasons as `send`.
      * The `TryRecvError` and `TrySendError` types have had public reexports removed
        of their variants and the variant names have been tweaked with enum
        namespacing rules.
      * The `Messages` iterator is renamed to `Iter`
      
      This functionality is now all `#[stable]`:
      
      * `Sender`
      * `SyncSender`
      * `Receiver`
      * `std::sync::mpsc`
      * `channel`
      * `sync_channel`
      * `Iter`
      * `Sender::send`
      * `Sender::clone`
      * `SyncSender::send`
      * `SyncSender::try_send`
      * `SyncSender::clone`
      * `Receiver::recv`
      * `Receiver::try_recv`
      * `Receiver::iter`
      * `SendError`
      * `RecvError`
      * `TrySendError::{mod, Full, Disconnected}`
      * `TryRecvError::{mod, Empty, Disconnected}`
      * `SendError::into_inner`
      * `TrySendError::into_inner`
      
      This is a breaking change due to the modification of where this module is
      located, as well as the changing of the semantics of `send` and `recv`. Most
      programs just need to rename imports of `std::comm` to `std::sync::mpsc` and
      add calls to `unwrap` after a send or a receive operation.
      
      [breaking-change]
      bc83a009
    • A
      std: Stabilize the prelude module · c32d03f4
      Alex Crichton 提交于
      This commit is an implementation of [RFC 503][rfc] which is a stabilization
      story for the prelude. Most of the RFC was directly applied, removing reexports.
      Some reexports are kept around, however:
      
      * `range` remains until range syntax has landed to reduce churn.
      * `Path` and `GenericPath` remain until path reform lands. This is done to
        prevent many imports of `GenericPath` which will soon be removed.
      * All `io` traits remain until I/O reform lands so imports can be rewritten all
        at once to `std::io::prelude::*`.
      
      This is a breaking change because many prelude reexports have been removed, and
      the RFC can be consulted for the exact list of removed reexports, as well as to
      find the locations of where to import them.
      
      [rfc]: https://github.com/rust-lang/rfcs/blob/master/text/0503-prelude-stabilization.md
      [breaking-change]
      
      Closes #20068
      c32d03f4
  20. 25 12月, 2014 1 次提交
  21. 23 12月, 2014 2 次提交