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