The Rust Core team recently announced the official release of Rust 1.0. Rust is a new programming language aiming to make it easier to build reliable, efficient systems. Rust combines low-level control over performance with high-level convenience and safety guarantees
- The vast majority of the standard library is now #[stable]. It is no longer possible to use unstable features with a stable build of the compiler.
- Many popular crates on crates.io now work on the stable release channel.
- Arithmetic on basic integer types now checks for overflow in debug builds.
- Several restrictions have been added to trait coherence in order to make it easier for upstream authors to change traits without breaking downsteam code.
- Digits of binary and octal literals are lexed more eagerly to improve error messages and macro behavior. For example, 0b1234 is now lexed as 0b1234 instead of two tokens, 0b1 and 234.
- Trait bounds are always invariant, eleminating the need for the PhantomFn and MarkerTrait lang items, which have been removed.
- “-” is no longer a valid character in crate names, the extern crate “foo” as bar syntax has been replaced with extern crate foo as bar, and Cargo now automatically translates “-” in package names to underscore for the crate name.
- Lifetime shadowing is an error.
- Send no longer implies ‘static.
- UFCS now supports trait-less associated paths like MyType::default().
- Primitive types now have inherent methods, obviating the need for extension traits like SliceExt.
- Methods with Self: Sized in their where clause are considered object-safe, allowing many extension traits like IteratorExt to be merged into the traits they extended.
- You can now refer to associated types whose corresponding trait bounds appear only in a where clause.
- The final bits of OIBIT landed, meaning that traits like Send and Sync are now library-defined.
- A Reflect trait was introduced, which means that downcasting via the Any trait is effectively limited to concrete types. This helps retain the potentially-important “parametricity” property: generic code cannot behave differently for different type arguments except in minor ways.
- The unsafe_destructor feature is now deprecated in favor of the new dropck. This change is a major reduction in unsafe code.
- Many errors now have extended explanations that can be accessed with the –explain flag to rustc.
- Many new examples have been added to the standard library documentation.
- rustdoc has received a number of improvements focused on completion and polish.
- Metadata was tuned, shrinking binaries by 27%.
- Much headway was made on ecosystem-wide CI, making it possible to compare builds for breakage.
and a host of librariescomments powered by Disqus