Rust 0.11.0
Released on July 2, 2014
What's Changed
- ~1700 changes, numerous bugfixes
- Language
- ~[T] has been removed from the language. This type is superseded by
- ~str has been removed from the language. This type is superseded by
- ~T has been removed from the language. This type is superseded by the
- @T has been removed from the language. This type is superseded by the
- Struct fields are now all private by default.
- Vector indices and shift amounts are both required to be a
uint - Byte character, byte string, and raw byte string literals are now all
- Multiple ABIs are no longer allowed in an ABI string
- The syntax for lifetimes on closures/procedures has been tweaked
- Floating point modulus has been removed from the language; however it
- Private enum variants are now disallowed.
- The
privkeyword has been removed from the language. - A closure can no longer be invoked through a &-pointer.
- The
use foo, bar, baz;syntax has been removed from the language. - The transmute intrinsic no longer works on type parameters.
- Statics now allow blocks/items in their definition.
- Trait bounds are separated from objects with + instead of : now.
- Objects can no longer be read while they are mutably borrowed.
- The address of a static is now marked as insignificant unless the
- The #[unsafe_destructor] attribute is now behind a feature gate.
- Struct literals are no longer allowed in ambiguous positions such as
- Declaration of lang items and intrinsics are now feature-gated by
- Integral literals no longer default to
int, and floating point - The Box
type is no longer implicitly borrowed to &mut T. - Procedures are now required to not capture borrowed references.
- Libraries
- The standard library is now a "facade" over a number of underlying
- A new library, libcore, lives under the standard library's facade
- A regex crate has been added to the standard distribution. This crate
- The unwrap/unwrap_err methods on Result require a Show bound for
- The return types of the std::comm primitives have been centralized
- A number of I/O primitives have gained the ability to time out their
- A number of I/O primitives have gained the ability to close their
- Reverse iterator methods have been removed in favor of
rev()on - A bitflags! macro has been added to enable easy interop with C and
- A debug_assert! macro is now provided which is disabled when
- A graphviz crate has been added for creating .dot files.
- The std::cast module has been migrated into std::mem.
- The std::local_data api has been migrated from freestanding functions
- The Pod trait has been renamed to Copy.
- jemalloc has been added as the default allocator for types.
- The API for allocating memory has been changed to use proper alignment
- Connecting a TcpStream or binding a TcpListener is now based on a
- The Reader trait now contains a core method, read_at_least(), which
- The process-spawning API is now centered around a builder-style
- The :? printing qualifier has been moved from the standard library to
- Eq/Ord have been renamed to PartialEq/PartialOrd. TotalEq/TotalOrd
- The select/plural methods have been removed from format!. The escapes
- The TaskBuilder API has been re-worked to be a true builder, and
- Tooling
- All breaking changes to the language or libraries now have their
- The compiler will now try to suggest how to annotate lifetimes if a
- Debug info continues to be improved greatly with general bug fixes and
- Usage of syntax extensions when cross-compiling has been fixed.
- Functionality equivalent to GCC & Clang's -ffunction-sections,
- The compiler is now stricter about where it will load module files
- The #[phase(syntax)] attribute has been renamed to #[phase(plugin)].
- Lints have been restructured to allow for dynamically loadable lints.
- A number of rustdoc improvements:
- The HTML output has been visually redesigned.
- Markdown is now powered by hoedown instead of sundown.
- Searching heuristics have been greatly improved.
- The search index has been reduced in size by a great amount.
- Cross-crate documentation via
pub usehas been greatly improved. - Primitive types are now hyperlinked and documented.
- Documentation has been moved from static.rust-lang.org/doc to
- A new sandbox, play.rust-lang.org, is available for running and
- Unused attributes are now more robustly warned about.
- The dead_code lint now warns about unused struct fields.
- Cross-compiling to iOS is now supported.
- Cross-compiling to mipsel is now supported.
- Stability attributes are now inherited by default and no longer apply
- Error message related to non-exhaustive match expressions have been
Full Changelog
* ~1700 changes, numerous bugfixes
* Language
* ~[T] has been removed from the language. This type is superseded by
the Vec
* ~str has been removed from the language. This type is superseded by
the String type.
* ~T has been removed from the language. This type is superseded by the
Box
* @T has been removed from the language. This type is superseded by the
standard library's std::gc::Gc
* Struct fields are now all private by default.
* Vector indices and shift amounts are both required to be a uint
instead of any integral type.
* Byte character, byte string, and raw byte string literals are now all
supported by prefixing the normal literal with a b.
* Multiple ABIs are no longer allowed in an ABI string
* The syntax for lifetimes on closures/procedures has been tweaked
slightly: <'a>|A, B|: 'b + K -> T
* Floating point modulus has been removed from the language; however it
is still provided by a library implementation.
* Private enum variants are now disallowed.
* The priv keyword has been removed from the language.
* A closure can no longer be invoked through a &-pointer.
* The use foo, bar, baz; syntax has been removed from the language.
* The transmute intrinsic no longer works on type parameters.
* Statics now allow blocks/items in their definition.
* Trait bounds are separated from objects with + instead of : now.
* Objects can no longer be read while they are mutably borrowed.
* The address of a static is now marked as insignificant unless the
#[inline(never)] attribute is placed it.
* The #[unsafe_destructor] attribute is now behind a feature gate.
* Struct literals are no longer allowed in ambiguous positions such as
if, while, match, and for..in.
* Declaration of lang items and intrinsics are now feature-gated by
default.
* Integral literals no longer default to int, and floating point
literals no longer default to f64. Literals must be suffixed with an
appropriate type if inference cannot determine the type of the
literal.
* The Box
* Procedures are now required to not capture borrowed references.
* Libraries
* The standard library is now a "facade" over a number of underlying
libraries. This means that development on the standard library should
be speedier due to smaller crates, as well as a clearer line between
all dependencies.
* A new library, libcore, lives under the standard library's facade
which is Rust's "0-assumption" library, suitable for embedded and
kernel development for example.
* A regex crate has been added to the standard distribution. This crate
includes statically compiled regular expressions.
* The unwrap/unwrap_err methods on Result require a Show bound for
better error messages.
* The return types of the std::comm primitives have been centralized
around the Result type.
* A number of I/O primitives have gained the ability to time out their
operations.
* A number of I/O primitives have gained the ability to close their
reading/writing halves to cancel pending operations.
* Reverse iterator methods have been removed in favor of rev() on
their forward-iteration counterparts.
* A bitflags! macro has been added to enable easy interop with C and
management of bit flags.
* A debug_assert! macro is now provided which is disabled when
--cfg ndebug is passed to the compiler.
* A graphviz crate has been added for creating .dot files.
* The std::cast module has been migrated into std::mem.
* The std::local_data api has been migrated from freestanding functions
to being based on methods.
* The Pod trait has been renamed to Copy.
* jemalloc has been added as the default allocator for types.
* The API for allocating memory has been changed to use proper alignment
and sized deallocation
* Connecting a TcpStream or binding a TcpListener is now based on a
string address and a u16 port. This allows connecting to a hostname as
opposed to an IP.
* The Reader trait now contains a core method, read_at_least(), which
correctly handles many repeated 0-length reads.
* The process-spawning API is now centered around a builder-style
Command struct.
* The :? printing qualifier has been moved from the standard library to
an external libdebug crate.
* Eq/Ord have been renamed to PartialEq/PartialOrd. TotalEq/TotalOrd
have been renamed to Eq/Ord.
* The select/plural methods have been removed from format!. The escapes
for { and } have also changed from \{ and \} to {{ and }},
respectively.
* The TaskBuilder API has been re-worked to be a true builder, and
extension traits for spawning native/green tasks have been added.
* Tooling
* All breaking changes to the language or libraries now have their
commit message annotated with [breaking-change] to allow for easy
discovery of breaking changes.
* The compiler will now try to suggest how to annotate lifetimes if a
lifetime-related error occurs.
* Debug info continues to be improved greatly with general bug fixes and
better support for situations like link time optimization (LTO).
* Usage of syntax extensions when cross-compiling has been fixed.
* Functionality equivalent to GCC & Clang's -ffunction-sections,
-fdata-sections and --gc-sections has been enabled by default
* The compiler is now stricter about where it will load module files
from when a module is declared via mod foo;.
* The #[phase(syntax)] attribute has been renamed to #[phase(plugin)].
Syntax extensions are now discovered via a "plugin registrar" type
which will be extended in the future to other various plugins.
* Lints have been restructured to allow for dynamically loadable lints.
* A number of rustdoc improvements:
* The HTML output has been visually redesigned.
* Markdown is now powered by hoedown instead of sundown.
* Searching heuristics have been greatly improved.
* The search index has been reduced in size by a great amount.
* Cross-crate documentation via pub use has been greatly improved.
* Primitive types are now hyperlinked and documented.
* Documentation has been moved from static.rust-lang.org/doc to
doc.rust-lang.org
* A new sandbox, play.rust-lang.org, is available for running and
sharing rust code examples on-line.
* Unused attributes are now more robustly warned about.
* The dead_code lint now warns about unused struct fields.
* Cross-compiling to iOS is now supported.
* Cross-compiling to mipsel is now supported.
* Stability attributes are now inherited by default and no longer apply
to intra-crate usage, only inter-crate usage.
* Error message related to non-exhaustive match expressions have been
greatly improved.