Skip to content

Rust 0.7

Compare
Choose a tag to compare
@rustbot rustbot released this 10 Sep 05:53
· 253863 commits to master since this release
  • ~2000 changes, numerous bugfixes

  • Language

    • impls no longer accept a visibility qualifier. Put them on methods instead.
    • The borrow checker has been rewritten with flow-sensitivity, fixing many bugs and inconveniences.
    • The self parameter no longer implicitly means &'self self, and can be explicitly marked with a lifetime.
    • Overloadable compound operators (+=, etc.) have been temporarily removed due to bugs.
    • The for loop protocol now requires for-iterators to return bool so they compose better.
    • The Durable trait is replaced with the 'static bounds.
    • Trait default methods work more often.
    • Structs with the #[packed] attribute have byte alignment and no padding between fields.
    • Type parameters bound by Copy must now be copied explicitly with the copy keyword.
    • It is now illegal to move out of a dereferenced unsafe pointer.
    • Option<~T> is now represented as a nullable pointer.
    • @mut does dynamic borrow checks correctly.
    • The main function is only detected at the topmost level of the crate. The #[main] attribute is still valid anywhere.
    • Struct fields may no longer be mutable. Use inherited mutability.
    • The #[no_send] attribute makes a type that would otherwise be Send, not.
    • The #[no_freeze] attribute makes a type that would otherwise be Freeze, not.
    • Unbounded recursion will abort the process after reaching the limit specified by the RUST_MAX_STACK environment variable (default: 1GB).
    • The vecs_implicitly_copyable lint mode has been removed. Vectors are never implicitly copyable.
    • #[static_assert] makes compile-time assertions about static bools.
    • At long last, 'argument modes' no longer exist.
    • The rarely used use mod statement no longer exists.
  • Syntax extensions

    • fail! and assert! accept ~str, &'static str or fmt!-style argument list.
    • Encodable, Decodable, Ord, TotalOrd, TotalEq, DeepClone, Rand, Zero and ToStr can all be automatically derived with #[deriving(...)].
    • The bytes! macro returns a vector of bytes for string, u8, char, and unsuffixed integer literals.
  • Libraries

    • The core crate was renamed to std.
    • The std crate was renamed to extra.
    • More and improved documentation.
    • std: iterator module for external iterator objects.
    • Many old-style (internal, higher-order function) iterators replaced by implementations of Iterator.
    • std: Many old internal vector and string iterators, incl. any, all. removed.
    • std: The finalize method of Drop renamed to drop.
    • std: The drop method now takes &mut self instead of &self.
    • std: The prelude no longer re-exports any modules, only types and traits.
    • std: Prelude additions: print, println, FromStr, ApproxEq, Equiv, Iterator, IteratorUtil, many numeric traits, many tuple traits.
    • std: New numeric traits: Fractional, Real, RealExt, Integer, Ratio, Algebraic, Trigonometric, Exponential, Primitive.
    • std: Tuple traits and accessors defined for up to 12-tuples, e.g. (0, 1, 2).n2() or (0, 1, 2).n2_ref().
    • std: Many types implement Clone.
    • std: path type renamed to Path.
    • std: mut module and Mut type removed.
    • std: Many standalone functions removed in favor of methods and iterators in vec, str. In the future methods will also work as functions.
    • std: reinterpret_cast removed. Use transmute.
    • std: ascii string handling in std::ascii.
    • std: Rand is implemented for ~/@.
    • std: run module for spawning processes overhauled.
    • std: Various atomic types added to unstable::atomic.
    • std: Various types implement Zero.
    • std: LinearMap and LinearSet renamed to HashMap and HashSet.
    • std: Borrowed pointer functions moved from ptr to borrow.
    • std: Added os::mkdir_recursive.
    • std: Added os::glob function performs filesystems globs.
    • std: FuzzyEq renamed to ApproxEq.
    • std: Map now defines pop and swap methods.
    • std: Cell constructors converted to static methods.
    • extra: rc module adds the reference counted pointers, Rc and RcMut.
    • extra: flate module moved from std to extra.
    • extra: fileinput module for iterating over a series of files.
    • extra: Complex number type and complex module.
    • extra: Rational number type and rational module.
    • extra: BigInt, BigUint implement numeric and comparison traits.
    • extra: term uses terminfo now, is more correct.
    • extra: arc functions converted to methods.
    • extra: Implementation of fixed output size variations of SHA-2.
  • Tooling

    • unused_variables lint mode for unused variables (default: warn).
    • unused_unsafe lint mode for detecting unnecessary unsafe blocks (default: warn).
    • unused_mut lint mode for identifying unused mut qualifiers (default: warn).
    • dead_assignment lint mode for unread variables (default: warn).
    • unnecessary_allocation lint mode detects some heap allocations that are immediately borrowed so could be written without allocating (default: warn).
    • missing_doc lint mode (default: allow).
    • unreachable_code lint mode (default: warn).
    • The rusti command has been rewritten and a number of bugs addressed.
    • rustc outputs in color on more terminals.
    • rustc accepts a --link-args flag to pass arguments to the linker.
    • rustc accepts a -Z print-link-args flag for debugging linkage.
    • Compiling with -g will make the binary record information about dynamic borrowcheck failures for debugging.
    • rustdoc has a nicer stylesheet.
    • Various improvements to rustdoc.
    • Improvements to rustpkg (see the detailed release notes).