Version 0.9 (2014-01-09)
-
~1800 changes, numerous bugfixes
-
Language
- The
floattype has been removed. Usef32orf64instead. - 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 preparation for future removal. Use the standard library'sGcorRctypes instead. @muthas been removed. Usestd::cell::{Cell, RefCell}instead.- Jumping back to the top of a loop is now done with
continueinstead ofloop. - 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 inr###"foo"###. ~fnis now writtenproc (args) -> retval { ... }and may only be called once.- The
&fntype is now written|args| -> retto match the literal form. @fns have been removed.doonly works with procs in order to make it obvious what the cost ofdois.- 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
impls must be terminated with empty braces and may not be terminated with a semicolon. - Keywords are no longer allowed as lifetime names; the
selflifetime no longer has any special meaning. - The old
fmt!string formatting macro has been removed. printf!andprintfln!(old-style formatting) removed in favor ofprint!andprintln!.mutworks in patterns now, as inlet (mut x, y) = (1, 2);.- The
extern mod foo (name = "bar")syntax has been removed. Useextern 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
reprattribute 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.._. rustcsupports the "win64" calling convention viaextern "win64".rustcsupports the "system" calling convention, which defaults to the preferred convention for the target platform, "stdcall" on 32-bit Windows, "C" elsewhere.- The
type_overflowlint (default: warn) checks literals for overflow. - The
unsafe_blocklint (default: allow) checks for usage ofunsafe. - The
attribute_usagelint (default: warn) warns about unknown attributes. - The
unknown_featureslint (default: warn) warns about unknown feature gates. - The
dead_codelint (default: warn) checks for dead code. - Rust libraries can be linked statically to one another
#[link_args]is behind thelink_argsfeature 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 thethread_localfeature gate. - The
returnkeyword may be used in closures. - Types that can be copied via a memcpy implement the
Podkind. - The
cfgattribute can now be used on struct fields and enum variants.
- The
-
Libraries
- std: The
optionandresultAPI's have been overhauled to make them simpler, more consistent, and more composable. - std: The entire
std::iomodule 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::utilcontains a number of useful implementations ofReaderandWriter, includingNullReader,NullWriter,ZeroReader,TeeReader. - std: The reference counted pointer type
extra::rcmoved into std. - std: The
Gctype in thegcmodule will replace@(it is currently just a wrapper around it). - std: The
Eithertype has been removed. - std:
fmt::Defaultcan be implemented for any type to provide default formatting to theformat!macro, as informat!("{}", myfoo). - std: The
randAPI continues to be tweaked. - std: The
rust_begin_unwindfunction, useful for inserting breakpoints on failure in gdb, is now namedrust_fail. - std: The
each_keyandeach_valuemethods onHashMaphave been replaced by thekeysandvaluesiterators. - std: Functions dealing with type size and alignment have moved from the
sysmodule to thememmodule. - std: The
pathmodule was written and API changed. - std:
str::from_utf8has been changed to cast instead of allocate. - std:
starts_withandends_withmethods added to vectors via theImmutableEqVectortrait, which is in the prelude. - std: Vectors can be indexed with the
get_optmethod, which returnsNoneif 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
Anytype can be used for dynamic typing. - std:
~Anycan be passed to thefail!macro and retrieved viatask::try. - std: Methods that produce iterators generally do not have an
_itersuffix now. - std:
cell::Cellandcell::RefCellcan be used to introduce mutability roots (mutable fields, etc.). Use instead of e.g.@mut. - std:
util::ignorerenamed toprelude::drop. - std: Slices have
sortandsort_bymethods via theMutableVectortrait. - std:
vec::rawhas 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 embedded environments.
- std: The
commmodule 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
flatpipesmodule 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_vechas been modernized. - extra: The
sortmodule has been removed. Use thesortmethod on mutable slices.
- std: The
-
Tooling
- The
rustandrusticommands have been removed, due to lack of maintenance. rustdocwas completely rewritten.rustdoccan test code examples in documentation.rustpkgcan test packages with the argument, 'test'.rustpkgsupports arbitrary dependencies, including C libraries.rustc's support for generating debug info is improved again.rustchas 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)
rustcadds a--dep-infoflag for communicating dependencies to build tools.
- The