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 http://static.rust-lang.org/dist/rust-0.9.tar.gz.asc SHA256 (of .tar.gz): c0911c3545b797a1ca16f3d76bf5ed234754b828efd1e22c182c7300ac7dd5d1 * http://static.rust-lang.org/dist/rust-0.9-install.exe http://static.rust-lang.org/dist/rust-0.9-install.exe.asc SHA256 (of .exe): 6ab14e25761d61ba724c5f77403d09d566d3187a2e048e006036b960d938fe90 Thanks to everyone who contributed! Regards, 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 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 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 `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 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` 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. Contributors to Rust 0.9 ------------------------ Adrien Tétar <[email protected]> Alan Andrade <[email protected]> Alexandros Tasos <[email protected]> Alex Crichton <[email protected]> a_m0d <[email protected]> Andreas Neuhaus <[email protected]> Andreas Ots <[email protected]> Andrei Formiga <[email protected]> Benjamin Herr <[email protected]> Benjamin Peterson <[email protected]> Birunthan Mohanathas <[email protected]> blake2-ppc <blake2-ppc> Branimir <[email protected]> Brendan Zabarauskas <[email protected]> Brian Anderson <[email protected]> Brian <[email protected]> Cadence Marseille <[email protected]> Carl-Anton Ingmarsson <[email protected]> Carol Willing <[email protected]> Carter Tazio Schonwald <[email protected]> chitra <chitra@chitra-HP-Pavilion-g6-Notebook-PC.(none)> Chris Morgan <[email protected]> Chris Sainty <[email protected]> Corey Richardson <[email protected]> Dan Connolly <[email protected]> Daniel Micay <[email protected]> Dan Luu <[email protected]> Dave Hodder <[email protected]> David Creswick <[email protected]> David Renshaw <[email protected]> Diego Ongaro <[email protected]> Dirkjan Bussink <[email protected]> Dmitry Ermolov <[email protected]> Do Nhat Minh <[email protected]> Eduard Burtescu <[email protected]> Edward Z. Yang <[email protected]> eliovir <[email protected]> Eric Biggers <[email protected]> Eric Holk <[email protected]> Erick Tryzelaar <[email protected]> Erik Lyon <[email protected]> Erik Price <[email protected]> Fabrice Desré <[email protected]> Felix S. Klock II <[email protected]> Flavio Percoco <[email protected]> flo-l <[email protected]> Florian Gilcher <[email protected]> Florian Hahn <[email protected]> Florian Zeitz <[email protected]> g3xzh <[email protected]> Gareth Smith <[email protected]> Geoff Hill <[email protected]> Geoffroy Couprie <[email protected]> Georges Dubus <[email protected]> gifnksm <[email protected]> Guillaume Pinot <[email protected]> Gyorgy Andrasek <[email protected]> Harry Marr <[email protected]> Heather <[email protected]> Huon Wilson <[email protected]> Ian Daniher <[email protected]> Igor Bukanov <[email protected]> Isaac Dupree <[email protected]> Jack Moffitt <[email protected]> Jaemin Moon <[email protected]> Jan Niklas Hasse <[email protected]> Jannis Harder <[email protected]> Jason Orendorff <[email protected]> Jason Toffaletti <[email protected]> Jay Anderson <[email protected]> Jed Davis <[email protected]> Jeff Olson <[email protected]> Joe Schafer <[email protected]> John Louis Walker <[email protected]> Jordi Boggiano <[email protected]> Joshua Yanovski <[email protected]> Julia Evans <[email protected]> Jyun-Yan You <[email protected]> Keegan McAllister <[email protected]> Kevin Ballard <[email protected]> Kiet Tran <[email protected]> klutzy <[email protected]> kud1ing <[email protected]> Leah Hanson <[email protected]> LEE Wondong <[email protected]> Léo Testard <[email protected]> Lindsey Kuper <[email protected]> Luca Bruno <[email protected]> Luis de Bethencourt <[email protected]> Luqman Aden <[email protected]> lyuts <[email protected]> Mark Rowe <[email protected]> Marvin Löbel <[email protected]> Matt Carberry <[email protected]> Matthew Auld <[email protected]> Matthew Iselin <[email protected]> Micah Chalmer <[email protected]> Michael 'devbug' Williams <[email protected]> Michael Letterle <[email protected]> Michael Woerister <michaelwoerister@gmail> niftynif <[email protected]> Niko Matsakis <[email protected]> Noufal Ibrahim <[email protected]> Olivier Saut <[email protected]> osa1 <[email protected]> Palmer Cox <[email protected]> Patrick Walton <[email protected]> Peter Zotov <[email protected]> Philipp Brüschweiler <[email protected]> Raphael Speyer <[email protected]> reedlepee <[email protected]> Richard Diamond <[email protected]> Robert Irelan <[email protected]> Scott Lawrence <[email protected]> Sébastien Chauvel <[email protected]> Sébastien Crozet <[email protected]> Sébastien Paolacci <[email protected]> Seo Sanghyeon <[email protected]> sh8281.kim <[email protected]> SiegeLord <[email protected]> sp3d <sp3d@github> S Pradeep Kumar <[email protected]> Steve Klabnik <[email protected]> Steven Fackler <[email protected]> Strahinja Val Markovic <[email protected]> Tim Chevalier <[email protected]> Tomas Sedovic <[email protected]> Vadim Chugunov <[email protected]> Vijay Korapaty <[email protected]> Volker Mische <[email protected]> Young-il Choi <[email protected]> Zach Kamsler <[email protected]> Zack Corr <[email protected]> Ziad Hatahet <[email protected]> _______________________________________________ Rust-dev mailing list [email protected] https://mail.mozilla.org/listinfo/rust-dev
