[rust-dev] Rust 0.9 released

Brian Anderson banderson at mozilla.com
Thu Jan 9 13:04:13 PST 2014

Mozilla and the Rust community are pleased to announce version 0.9 of the
Rust compiler and tools. Rust is a systems programming language with a
focus on safety, performance and concurrency.

This was another eventful release in which we made extensive improvements
to the runtime and I/O subsystem, introduced static linking and link-time
optimization, and reduced the variety of closures in the language. 0.9 also
begins a final series of planned changes to how pointers are treated in
Rust, starting with the deprecation of the built-in "managed pointer" type
and its accompanying `@` sigil, and the introduction of smart pointer types
to the standard library.

The brief release notes are included in this announcement, and there is
further explanation in the detailed release [notes] on the wiki.
Documentation and all the links in this email are available on the
[website]. As usual, version 0.9 should be considered an alpha release,
suitable for early adopters and language enthusiasts. Please file [bugs]
and join the [fun].

[website]: http://www.rust-lang.org
[notes]: https://github.com/mozilla/rust/wiki/Doc-detailed-release-notes
[bugs]: https://github.com/mozilla/rust/issues
[fun]: https://github.com/mozilla/rust/wiki/Note-guide-for-new-contributors

This release is available as both a tarball and a Windows installer:

* http://static.rust-lang.org/dist/rust-0.9.tar.gz
SHA256 (of .tar.gz):

* http://static.rust-lang.org/dist/rust-0.9-install.exe
SHA256 (of .exe):

Thanks to everyone who contributed!

The Rust Team

Version 0.9 (January 2014)

* 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
* `@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
* The `#[fixed_stack_segment]` and `#[rust_stack]` attributes have been
removed as Rust no longer uses segmented stacks.
* Non-ascii identifiers are feature-gated
* 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
* 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
* 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 inserting
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
* std: Methods that produce iterators generally do not have an `_iter`
suffix now.
* std: `cell::Cell` and `cell::RefCell` can be used to introduc
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`
* 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
* std: All libuv dependencies have been moved into the rustuv crate.
* native: New implementations of runtime scheduling on top of OS
* 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
* `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.

Contributors to Rust 0.9

Adrien Tétar <adri-from-59 at hotmail.fr>
Alan Andrade <alan.andradec at gmail.com>
Alexandros Tasos <sdi1100085 at di.uoa.gr>
Alex Crichton <alex at alexcrichton.com>
a_m0d <damien.schoof at gmail.com>
Andreas Neuhaus <zargony at zargony.com>
Andreas Ots <andreasots at gmail.com>
Andrei Formiga <archimedes_siracusa at hotmail.com>
Benjamin Herr <ben at 0x539.de>
Benjamin Peterson <benjamin at python.org>
Birunthan Mohanathas <birunthan at mohanathas.com>
blake2-ppc <blake2-ppc>
Branimir <branimir at volomp.com>
Brendan Zabarauskas <bjzaba at yahoo.com.au>
Brian Anderson <banderson at mozilla.com>
Brian <brian.t.dawn at gmail.com>
Cadence Marseille <cadencemarseille at gmail.com>
Carl-Anton Ingmarsson <mail at carlanton.se>
Carol Willing <carolcode at willingconsulting.com>
Carter Tazio Schonwald <carter.schonwald at gmail.com>
chitra <chitra at chitra-HP-Pavilion-g6-Notebook-PC.(none)>
Chris Morgan <me at chrismorgan.info>
Chris Sainty <csainty at hotmail.com>
Corey Richardson <corey at octayn.net>
Dan Connolly <dckc at madmode.com>
Daniel Micay <danielmicay at gmail.com>
Dan Luu <danluu at gmail.com>
Dave Hodder <dmh at dmh.org.uk>
David Creswick <dcrewi at gyrae.net>
David Renshaw <dwrenshaw at gmail.com>
Diego Ongaro <ongaro at cs.stanford.edu>
Dirkjan Bussink <d.bussink at gmail.com>
Dmitry Ermolov <epdmitry at yandex.ru>
Do Nhat Minh <mrordinaire at gmail.com>
Eduard Burtescu <edy.burt at gmail.com>
Edward Z. Yang <ezyang at cs.stanford.edu>
eliovir <eliovir at gmail.com>
Eric Biggers <ebiggers3 at gmail.com>
Eric Holk <eric.holk at gmail.com>
Erick Tryzelaar <erick.tryzelaar at gmail.com>
Erik Lyon <elyon001 at local.fake>
Erik Price <erik.price16 at gmail.com>
Fabrice Desré <fabrice at desre.org>
Felix S. Klock II <pnkfelix at pnkfx.org>
Flavio Percoco <flaper87 at gmail.com>
flo-l <lacknerflo at gmail.com>
Florian Gilcher <florian.gilcher at asquera.de>
Florian Hahn <flo at fhahn.com>
Florian Zeitz <florob at babelmonkeys.de>
g3xzh <g3xzh at yahoo.com>
Gareth Smith <garethdanielsmith at gmail.com>
Geoff Hill <geoff at geoffhill.org>
Geoffroy Couprie <geo.couprie at gmail.com>
Georges Dubus <georges.dubus at compiletoi.net>
gifnksm <makoto.nksm+github at gmail.com>
Guillaume Pinot <texitoi at texitoi.eu>
Gyorgy Andrasek <jurily at gmail.com>
Harry Marr <harry.marr at gmail.com>
Heather <heather at cynede.net>
Huon Wilson <dbau.pp+github at gmail.com>
Ian Daniher <it.daniher at gmail.com>
Igor Bukanov <igor at mir2.org>
Isaac Dupree <antispam at idupree.com>
Jack Moffitt <jack at metajack.im>
Jaemin Moon <jaemin.moon at samsung.com>
Jan Niklas Hasse <jhasse at gmail.com>
Jannis Harder <jix at jixco.de>
Jason Orendorff <jason.orendorff at gmail.com>
Jason Toffaletti <jason at topsy.com>
Jay Anderson <jayanderson0 at gmail.com>
Jed Davis <jld at panix.com>
Jeff Olson <olson.jeffery at gmail.com>
Joe Schafer <joe at jschaf.com>
John Louis Walker <injyuw at gmail.com>
Jordi Boggiano <j.boggiano at seld.be>
Joshua Yanovski <pythonesque at gmail.com>
Julia Evans <julia at jvns.ca>
Jyun-Yan You <jyyou at cs.nctu.edu.tw>
Keegan McAllister <kmcallister at mozilla.com>
Kevin Ballard <kevin at sb.org>
Kiet Tran <ktt3ja at gmail.com>
klutzy <klutzytheklutzy at gmail.com>
kud1ing <github at kudling.de>
Leah Hanson <astrieanna at gmail.com>
LEE Wondong <wdlee91 at gmail.com>
Le?o Testard <leo.testard at gmail.com>
Lindsey Kuper <lindsey at composition.al>
Luca Bruno <lucab at debian.org>
Luis de Bethencourt <luis at debethencourt.com>
Luqman Aden <laden at csclub.uwaterloo.ca>
lyuts <dioxinu at gmail.com>
Mark Rowe <mrowe at bdash.net.nz>
Marvin Löbel <loebel.marvin at gmail.com>
Matt Carberry <carberry.matt at gmail.com>
Matthew Auld <matthew.auld at intel.com>
Matthew Iselin <matthew at theiselins.net>
Micah Chalmer <micah at micahchalmer.net>
Michael 'devbug' Williams <m.t.williams at live.com>
Michael Letterle <michael.letterle at gmail.com>
Michael Woerister <michaelwoerister at gmail>
niftynif <nif.ward at gmail.com>
Niko Matsakis <niko at alum.mit.edu>
Noufal Ibrahim <noufal at nibrahim.net.in>
Olivier Saut <osaut at airpost.net>
osa1 <omeragacan at gmail.com>
Palmer Cox <p at lmercox.com>
Patrick Walton <pcwalton at mimiga.net>
Peter Zotov <whitequark at whitequark.org>
Philipp Brüschweiler <blei42 at gmail.com>
Raphael Speyer <rspeyer at gmail.com>
reedlepee <reedlepee123 at gmail.com>
Richard Diamond <wichard at vitalitystudios.com>
Robert Irelan <rirelan at gmail.com>
Scott Lawrence <bytbox at gmail.com>
Sébastien Chauvel <eichi237 at mailoo.org>
Sébastien Crozet <developer at crozet.re>
Sébastien Paolacci <sebastien.paolacci at gmail.com>
Seo Sanghyeon <sanxiyn at gmail.com>
sh8281.kim <sh8281.kim at samsung.com>
SiegeLord <slabode at aim.com>
sp3d <sp3d at github>
S Pradeep Kumar <gohanpra at gmail.com>
Steve Klabnik <steve at steveklabnik.com>
Steven Fackler <sfackler at gmail.com>
Strahinja Val Markovic <val at markovic.io>
Tim Chevalier <chevalier at alum.wellesley.edu>
Tomas Sedovic <tomas at sedovic.cz>
Vadim Chugunov <vadimcn at gmail.com>
Vijay Korapaty <rust at korapaty.com>
Volker Mische <volker.mische at gmail.com>
Young-il Choi <duddlf.choi at samsung.com>
Zach Kamsler <smoo.master at gmail.com>
Zack Corr <zack at z0w0.me>
Ziad Hatahet <hatahet at gmail.com>

Rust-dev mailing list
Rust-dev at mozilla.org
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/rust-dev/attachments/20140109/89618030/attachment-0001.html>

More information about the Rust-dev mailing list