]> git.lizzy.rs Git - rust.git/blobdiff - RELEASES.txt
auto merge of #13923 : Rufflewind/rust/patch-2, r=thestinger
[rust.git] / RELEASES.txt
index 9aea24dd22d886214ba2df08c339103a05f3f206..ee437b658e1a3071f25bf333e97715cd373c05fa 100644 (file)
@@ -1,3 +1,334 @@
+Version 0.10 (April 2014)
+-------------------------
+
+  * ~1500 changes, numerous bugfixes
+
+  * Language
+    * A new RFC process is now in place for modifying the language.
+    * Patterns with `@`-pointers have been removed from the language.
+    * Patterns with unique vectors (`~[T]`) have been removed from the
+      language.
+    * Patterns with unique strings (`~str`) have been removed from the
+      language.
+    * `@str` has been removed from the language.
+    * `@[T]` has been removed from the language.
+    * `@self` has been removed from the language.
+    * `@Trait` has been removed from the language.
+    * Headers on `~` allocations which contain `@` boxes inside the type for
+      reference counting have been removed.
+    * The semantics around the lifetimes of temporary expressions have changed,
+      see #3511 and #11585 for more information.
+    * Cross-crate syntax extensions are now possible, but feature gated. See
+      #11151 for more information. This includes both `macro_rules!` macros as
+      well as syntax extensions such as `format!`.
+    * New lint modes have been added, and older ones have been turned on to be
+      warn-by-default.
+      * Unnecessary parentheses
+      * Uppercase statics
+      * Camel Case types
+      * Uppercase variables
+      * Publicly visible private types
+      * `#[deriving]` with raw pointers
+    * Unsafe functions can no longer be coerced to closures.
+    * Various obscure macros such as `log_syntax!` are now behind feature gates.
+    * The `#[simd]` attribute is now behind a feature gate.
+    * Visibility is no longer allowed on `extern crate` statements, and
+      unnecessary visibility (`priv`) is no longer allowed on `use` statements.
+    * Trailing commas are now allowed in argument lists and tuple patterns.
+    * The `do` keyword has been removed, it is now a reserved keyword.
+    * Default type parameters have been implemented, but are feature gated.
+    * Borrowed variables through captures in closures are now considered soundly.
+    * `extern mod` is now `extern crate`
+    * The `Freeze` trait has been removed.
+    * The `Share` trait has been added for types that can be shared among
+      threads.
+    * Labels in macros are now hygienic.
+    * Expression/statement macro invocations can be delimited with `{}` now.
+    * Treatment of types allowed in `static mut` locations has been tweaked.
+    * The `*` and `.` operators are now overloadable through the `Deref` and
+      `DerefMut` traits.
+    * `~Trait` and `proc` no longer have `Send` bounds by default.
+    * Partial type hints are now supported with the `_` type marker.
+    * An `Unsafe` type was introduced for interior mutability. It is now
+      considered undefined to transmute from `&T` to `&mut T` without using the
+      `Unsafe` type.
+    * The #[linkage] attribute was implemented for extern statics/functions.
+    * The inner attribute syntax has changed from `#[foo];` to `#![foo]`.
+    * `Pod` was renamed to `Copy`.
+
+  * Libraries
+    * The `libextra` library has been removed. It has now been decomposed into
+      component libraries with smaller and more focused nuggets of
+      functionality. The full list of libraries can be found on the
+      documentation index page.
+    * std: `std::condition` has been removed. All I/O errors are now propagated
+      through the `Result` type. In order to assist with error handling, a
+      `try!` macro for unwrapping errors with an early return and a lint for
+      unused results has been added. See #12039 for more information.
+    * std: The `vec` module has been renamed to `slice`.
+    * std: A new vector type, `Vec<T>`, has been added in preparation for DST.
+      This will become the only growable vector in the future.
+    * std: `std::io` now has more public-reexports. Types such as `BufferedReader`
+      are now found at `std::io::BufferedReader` instead of
+      `std::io::buffered::BufferedReader`.
+    * std: `print` and `println` are no longer in the prelude, the `print!` and
+      `println!` macros are intended to be used instead.
+    * std: `Rc` now has a `Weak` pointer for breaking cycles, and it no longer
+      attempts to statically prevent cycles.
+    * std: The standard distribution is adopting the policy of pushing failure
+      to the user rather than failing in libraries. Many functions (such as
+      `slice::last()`) now return `Option<T>` instead of `T` + failing.
+    * std: `fmt::Default` has been renamed to `fmt::Show`, and it now has a new
+      deriving mode: `#[deriving(Show)]`.
+    * std: `ToStr` is now implemented for all types implementing `Show`.
+    * std: The formatting trait methods now take `&self` instead of `&T`
+    * std: The `invert()` method on iterators has been renamed to `rev()`
+    * std: `std::num` has seen a reduction in the genericity of its traits,
+      consolidating functionality into a few core traits.
+    * std: Backtraces are now printed on task failure if the environment
+      variable `RUST_BACKTRACE` is present.
+    * std: Naming conventions for iterators have been standardized. More details
+      can be found on the wiki's style guide.
+    * std: `eof()` has been removed from the `Reader` trait. Specific types may
+      still implement the function.
+    * std: Networking types are now cloneable to allow simultaneous reads/writes.
+    * std: `assert_approx_eq!` has been removed
+    * std: The `e` and `E` formatting specifiers for floats have been added to
+      print them in exponential notation.
+    * std: The `Times` trait has been removed
+    * std: Indications of variance and opting out of builtin bounds is done
+      through marker types in `std::kinds::marker` now
+    * std: `hash` has been rewritten, `IterBytes` has been removed, and
+      `#[deriving(Hash)]` is now possible.
+    * std: `SharedChan` has been removed, `Sender` is now cloneable.
+    * std: `Chan` and `Port` were renamed to `Sender` and `Receiver`.
+    * std: `Chan::new` is now `channel()`.
+    * std: A new synchronous channel type has been implemented.
+    * std: A `select!` macro is now provided for selecting over `Receiver`s.
+    * std: `hashmap` and `trie` have been moved to `libcollections`
+    * std: `run` has been rolled into `io::process`
+    * std: `assert_eq!` now uses `{}` instead of `{:?}`
+    * std: The equality and comparison traits have seen some reorganization.
+    * std: `rand` has moved to `librand`.
+    * std: `to_{lower,upper}case` has been implemented for `char`.
+    * std: Logging has been moved to `liblog`.
+    * collections: `HashMap` has been rewritten for higher performance and less
+      memory usage.
+    * native: The default runtime is now `libnative`. If `libgreen` is desired,
+      it can be booted manually. The runtime guide has more information and
+      examples.
+    * native: All I/O functionality except signals has been implemented.
+    * green: Task spawning with `libgreen` has been optimized with stack caching
+      and various trimming of code.
+    * green: Tasks spawned by `libgreen` now have an unmapped guard page.
+    * sync: The `extra::sync` module has been updated to modern rust (and moved
+      to the `sync` library), tweaking and improving various interfaces while
+      dropping redundant functionality.
+    * sync: A new `Barrier` type has been added to the `sync` library.
+    * sync: An efficient mutex for native and green tasks has been implemented.
+    * serialize: The `base64` module has seen some improvement. It treats
+      newlines better, has non-string error values, and has seen general
+      cleanup.
+    * fourcc: A `fourcc!` macro was introduced
+    * hexfloat: A `hexfloat!` macro was implemented for specifying floats via a
+      hexadecimal literal.
+
+  * Tooling
+    * `rustpkg` has been deprecated and removed from the main repository. Its
+      replacement, `cargo`, is under development.
+    * Nightly builds of rust are now available
+    * The memory usage of rustc has been improved many times throughout this
+      release cycle.
+    * The build process supports disabling rpath support for the rustc binary
+      itself.
+    * Code generation has improved in some cases, giving more information to the
+      LLVM optimization passes to enable more extensive optimizations.
+    * Debuginfo compatibility with lldb on OSX has been restored.
+    * The master branch is now gated on an android bot, making building for
+      android much more reliable.
+    * Output flags have been centralized into one `--emit` flag.
+    * Crate type flags have been centralized into one `--crate-type` flag.
+    * Codegen flags have been consolidated behind a `-C` flag.
+    * Linking against outdated crates now has improved error messages.
+    * Error messages with lifetimes will often suggest how to annotate the
+      function to fix the error.
+    * Many more types are documented in the standard library, and new guides
+      were written.
+    * Many `rustdoc` improvements:
+      * code blocks are syntax highlighted.
+      * render standalone markdown files.
+      * the --test flag tests all code blocks by default.
+      * exported macros are displayed.
+      * reexported types have their documentation inlined at the location of the
+        first reexport.
+      * search works across crates that have been rendered to the same output
+        directory.
+
+Version 0.9 (January 2014)
+--------------------------
+
+   * ~1800 changes, numerous bugfixes
+
+   * Language
+      * The `float` type has been removed. Use `f32` or `f64` instead.
+      * A new facility for enabling experimental features (feature gating) has
+        been added, using the crate-level `#[feature(foo)]` attribute.
+      * Managed boxes (@) are now behind a feature gate
+        (`#[feature(managed_boxes)]`) in preperation for future removal. Use the
+        standard library's `Gc` or `Rc` types instead.
+      * `@mut` has been removed. Use `std::cell::{Cell, RefCell}` instead.
+      * Jumping back to the top of a loop is now done with `continue` instead of
+        `loop`.
+      * Strings can no longer be mutated through index assignment.
+      * Raw strings can be created via the basic `r"foo"` syntax or with matched
+        hash delimiters, as in `r###"foo"###`.
+      * `~fn` is now written `proc (args) -> retval { ... }` and may only be
+        called once.
+      * The `&fn` type is now written `|args| -> ret` to match the literal form.
+      * `@fn`s have been removed.
+      * `do` only works with procs in order to make it obvious what the cost
+        of `do` is.
+      * Single-element tuple-like structs can no longer be dereferenced to
+        obtain the inner value. A more comprehensive solution for overloading
+        the dereference operator will be provided in the future.
+      * The `#[link(...)]` attribute has been replaced with
+        `#[crate_id = "name#vers"]`.
+      * Empty `impl`s must be terminated with empty braces and may not be
+        terminated with a semicolon.
+      * Keywords are no longer allowed as lifetime names; the `self` lifetime
+        no longer has any special meaning.
+      * The old `fmt!` string formatting macro has been removed.
+      * `printf!` and `printfln!` (old-style formatting) removed in favor of
+        `print!` and `println!`.
+      * `mut` works in patterns now, as in `let (mut x, y) = (1, 2);`.
+      * The `extern mod foo (name = "bar")` syntax has been removed. Use
+        `extern mod foo = "bar"` instead.
+      * New reserved keywords: `alignof`, `offsetof`, `sizeof`.
+      * Macros can have attributes.
+      * Macros can expand to items with attributes.
+      * Macros can expand to multiple items.
+      * The `asm!` macro is feature-gated (`#[feature(asm)]`).
+      * Comments may be nested.
+      * Values automatically coerce to trait objects they implement, without
+        an explicit `as`.
+      * Enum discriminants are no longer an entire word but as small as needed to
+        contain all the variants. The `repr` attribute can be used to override
+        the discriminant size, as in `#[repr(int)]` for integer-sized, and
+        `#[repr(C)]` to match C enums.
+      * Non-string literals are not allowed in attributes (they never worked).
+      * The FFI now supports variadic functions.
+      * Octal numeric literals, as in `0o7777`.
+      * The `concat!` syntax extension performs compile-time string concatenation.
+      * The `#[fixed_stack_segment]` and `#[rust_stack]` attributes have been
+        removed as Rust no longer uses segmented stacks.
+      * Non-ascii identifiers are feature-gated (`#[feature(non_ascii_idents)]`).
+      * Ignoring all fields of an enum variant or tuple-struct is done with `..`,
+        not `*`; ignoring remaining fields of a struct is also done with `..`,
+        not `_`; ignoring a slice of a vector is done with `..`, not `.._`.
+      * `rustc` supports the "win64" calling convention via `extern "win64"`.
+      * `rustc` supports the "system" calling convention, which defaults to the
+        preferred convention for the target platform, "stdcall" on 32-bit Windows,
+        "C" elsewhere.
+      * The `type_overflow` lint (default: warn) checks literals for overflow.
+      * The `unsafe_block` lint (default: allow) checks for usage of `unsafe`.
+      * The `attribute_usage` lint (default: warn) warns about unknown
+        attributes.
+      * The `unknown_features` lint (default: warn) warns about unknown
+        feature gates.
+      * The `dead_code` lint (default: warn) checks for dead code.
+      * Rust libraries can be linked statically to one another
+      * `#[link_args]` is behind the `link_args` feature gate.
+      * Native libraries are now linked with `#[link(name = "foo")]`
+      * Native libraries can be statically linked to a rust crate
+        (`#[link(name = "foo", kind = "static")]`).
+      * Native OS X frameworks are now officially supported
+        (`#[link(name = "foo", kind = "framework")]`).
+      * The `#[thread_local]` attribute creates thread-local (not task-local)
+        variables. Currently behind the `thread_local` feature gate.
+      * The `return` keyword may be used in closures.
+      * Types that can be copied via a memcpy implement the `Pod` kind.
+      * The `cfg` attribute can now be used on struct fields and enum variants.
+
+   * Libraries
+      * std: The `option` and `result` API's have been overhauled to make them
+        simpler, more consistent, and more composable.
+      * std: The entire `std::io` module has been replaced with one that is
+        more comprehensive and that properly interfaces with the underlying
+        scheduler. File, TCP, UDP, Unix sockets, pipes, and timers are all
+        implemented.
+      * std: `io::util` contains a number of useful implementations of
+        `Reader` and `Writer`, including `NullReader`, `NullWriter`,
+        `ZeroReader`, `TeeReader`.
+      * std: The reference counted pointer type `extra::rc` moved into std.
+      * std: The `Gc` type in the `gc` module will replace `@` (it is currently
+        just a wrapper around it).
+      * std: The `Either` type has been removed.
+      * std: `fmt::Default` can be implemented for any type to provide default
+        formatting to the `format!` macro, as in `format!("{}", myfoo)`.
+      * std: The `rand` API continues to be tweaked.
+      * std: The `rust_begin_unwind` function, useful for insterting breakpoints
+        on failure in gdb, is now named `rust_fail`.
+      * std: The `each_key` and `each_value` methods on `HashMap` have been
+        replaced by the `keys` and `values` iterators.
+      * std: Functions dealing with type size and alignment have moved from the
+        `sys` module to the `mem` module.
+      * std: The `path` module was written and API changed.
+      * std: `str::from_utf8` has been changed to cast instead of allocate.
+      * std: `starts_with` and `ends_with` methods added to vectors via the
+        `ImmutableEqVector` trait, which is in the prelude.
+      * std: Vectors can be indexed with the `get_opt` method, which returns `None`
+        if the index is out of bounds.
+      * std: Task failure no longer propagates between tasks, as the model was
+        complex, expensive, and incompatible with thread-based tasks.
+      * std: The `Any` type can be used for dynamic typing.
+      * std: `~Any` can be passed to the `fail!` macro and retrieved via
+        `task::try`.
+      * std: Methods that produce iterators generally do not have an `_iter`
+        suffix now.
+      * std: `cell::Cell` and `cell::RefCell` can be used to introduce mutability
+        roots (mutable fields, etc.). Use instead of e.g. `@mut`.
+      * std: `util::ignore` renamed to `prelude::drop`.
+      * std: Slices have `sort` and `sort_by` methods via the `MutableVector`
+        trait.
+      * std: `vec::raw` has seen a lot of cleanup and API changes.
+      * std: The standard library no longer includes any C++ code, and very
+        minimal C, eliminating the dependency on libstdc++.
+      * std: Runtime scheduling and I/O functionality has been factored out into
+        extensible interfaces and is now implemented by two different crates:
+        libnative, for native threading and I/O; and libgreen, for green threading
+        and I/O. This paves the way for using the standard library in more limited
+        embeded environments.
+      * std: The `comm` module has been rewritten to be much faster, have a
+        simpler, more consistent API, and to work for both native and green
+        threading.
+      * std: All libuv dependencies have been moved into the rustuv crate.
+      * native: New implementations of runtime scheduling on top of OS threads.
+      * native: New native implementations of TCP, UDP, file I/O, process spawning,
+        and other I/O.
+      * green: The green thread scheduler and message passing types are almost
+        entirely lock-free.
+      * extra: The `flatpipes` module had bitrotted and was removed.
+      * extra: All crypto functions have been removed and Rust now has a policy of
+        not reimplementing crypto in the standard library. In the future crypto
+        will be provided by external crates with bindings to established libraries.
+      * extra: `c_vec` has been modernized.
+      * extra: The `sort` module has been removed. Use the `sort` method on
+        mutable slices.
+
+   * Tooling
+      * The `rust` and `rusti` commands have been removed, due to lack of
+        maintenance.
+      * `rustdoc` was completely rewritten.
+      * `rustdoc` can test code examples in documentation.
+      * `rustpkg` can test packages with the argument, 'test'.
+      * `rustpkg` supports arbitrary dependencies, including C libraries.
+      * `rustc`'s support for generating debug info is improved again.
+      * `rustc` has better error reporting for unbalanced delimiters.
+      * `rustc`'s JIT support was removed due to bitrot.
+      * Executables and static libraries can be built with LTO (-Z lto)
+      * `rustc` adds a `--dep-info` flag for communicating dependencies to
+        build tools.
+
 Version 0.8 (September 2013)
 --------------------------
 
@@ -580,8 +911,8 @@ Version 0.2  (March 2012)
       * Merged per-platform std::{os*, fs*} to core::{libc, os}
       * Extensive cleanup, regularization in libstd, libcore
 
-Version 0.1  (January 2012)
----------------------------
+Version 0.1  (January 20, 2012)
+-------------------------------
 
    * Most language features work, including:
       * Unique pointers, unique closures, move semantics