Releases: rust-lang/rust
Rust 0.4
-
~2000 changes, numerous bugfixes
-
Syntax
- All keywords are now strict and may not be used as identifiers anywhere
- Keyword removal: 'again', 'import', 'check', 'new', 'owned', 'send', 'of', 'with', 'to', 'class'.
- Classes are replaced with simpler structs
- Explicit method self types
ret
becamereturn
andalt
becamematch
import
is nowuse
;use is now
extern mod`extern mod { ... }
is nowextern { ... }
use mod
is the recommended way to import modulespub
andpriv
replace deprecated export lists- The syntax of
match
pattern arms now uses fat arrow (=>) main
no longer accepts an args vector; useos::args
instead
-
Semantics
- Trait implementations are now coherent, ala Haskell typeclasses
- Trait methods may be static
- Argument modes are deprecated
- Borrowed pointers are much more mature and recommended for use
- Strings and vectors in the static region are stored in constant memory
- Typestate was removed
- Resolution rewritten to be more reliable
- Support for 'dual-mode' data structures (freezing and thawing)
-
Libraries
- Most binary operators can now be overloaded via the traits in `core::ops'
std::net::url
for representing URLs- Sendable hash maps in
core::send_map
- `core::task' gained a (currently unsafe) task-local storage API
-
Concurrency
- An efficient new intertask communication primitive called the pipe, along with a number of higher-level channel types, in
core::pipes
std::arc
, an atomically reference counted, immutable, shared memory typestd::sync
, various exotic synchronization tools based on arcs and pipes- Futures are now based on pipes and sendable
- More robust linked task failure
- Improved task builder API
- An efficient new intertask communication primitive called the pipe, along with a number of higher-level channel types, in
-
Other
- Improved error reporting
- Preliminary JIT support
- Preliminary work on precise GC
- Extensive architectural improvements to rustc
- Begun a transition away from buggy C++-based reflection (shape) code to Rust-based (visitor) code
- All hash functions and tables converted to secure, randomized SipHash
Rust 0.3
-
~1900 changes, numerous bugfixes
-
New coding conveniences
- Integer-literal suffix inference
- Per-item control over warnings, errors
- #[cfg(windows)] and #[cfg(unix)] attributes
- Documentation comments
- More compact closure syntax
- 'do' expressions for treating higher-order functions as control structures
- *-patterns (wildcard extended to all constructor fields)
-
Semantic cleanup
- Name resolution pass and exhaustiveness checker rewritten
- Region pointers and borrow checking supersede alias analysis
- Init-ness checking is now provided by a region-based liveness pass instead of the typestate pass; same for last-use analysis
- Extensive work on region pointers
-
Experimental new language features
- Slices and fixed-size, interior-allocated vectors
- #!-comments for lang versioning, shell execution
- Destructors and iface implementation for classes; type-parameterized classes and class methods
- 'const' type kind for types that can be used to implement shared-memory concurrency patterns
-
Type reflection
-
Removal of various obsolete features
-
Keywords: 'be', 'prove', 'syntax', 'note', 'mutable', 'bind', 'crust', 'native' (now 'extern'), 'cont' (now 'again')
-
Constructs: do-while loops ('do' repurposed), fn binding, resources (replaced by destructors)
-
-
Compiler reorganization
- Syntax-layer of compiler split into separate crate
- Clang (from LLVM project) integrated into build
- Typechecker split into sub-modules
-
New library code
- New time functions
- Extension methods for many built-in types
- Arc: atomic-refcount read-only / exclusive-use shared cells
- Par: parallel map and search routines
- Extensive work on libuv interface
- Much vector code moved to libraries
- Syntax extensions: #line, #col, #file, #mod, #stringify, #include, #include_str, #include_bin
-
Tool improvements
- Cargo automatically resolves dependencies
Rust 0.2
-
1500 changes, numerous bugfixes
-
New docs and doc tooling
-
New port: FreeBSD x86_64
-
Compilation model enhancements
- Generics now specialized, multiply instantiated
- Functions now inlined across separate crates
-
Scheduling, stack and threading fixes
- Noticeably improved message-passing performance
- Explicit schedulers
- Callbacks from C
- Helgrind clean
-
Experimental new language features
- Operator overloading
- Region pointers
- Classes
-
Various language extensions
- C-callback function types: 'crust fn ...'
- Infinite-loop construct: 'loop { ... }'
- Shorten 'mutable' to 'mut'
- Required mutable-local qualifier: 'let mut ...'
- Basic glob-exporting: 'export foo::*;'
- Alt now exhaustive, 'alt check' for runtime-checked
- Block-function form of 'for' loop, with 'break' and 'ret'.
-
New library code
- AST quasi-quote syntax extension
- Revived libuv interface
- New modules: core::{future, iter}, std::arena
- Merged per-platform std::{os*, fs*} to core::{libc, os}
- Extensive cleanup, regularization in libstd, libcore
Rust 0.1
-
Most language features work, including:
- Unique pointers, unique closures, move semantics
- Interface-constrained generics
- Static interface dispatch
- Stack growth
- Multithread task scheduling
- Typestate predicates
- Failure unwinding, destructors
- Pattern matching and destructuring assignment
- Lightweight block-lambda syntax
- Preliminary macro-by-example
-
Compiler works with the following configurations:
- Linux: x86 and x86_64 hosts and targets
- macOS: x86 and x86_64 hosts and targets
- Windows: x86 hosts and targets
-
Cross compilation / multi-target configuration supported.
-
Preliminary API-documentation and package-management tools included.
Known issues:
-
Documentation is incomplete.
-
Performance is below intended target.
-
Standard library APIs are subject to extensive change, reorganization.
-
Language-level versioning is not yet operational - future code will break unexpectedly.