rust/RELEASES.txt

456 lines
20 KiB
Plaintext
Raw Normal View History

2013-04-15 02:12:19 -05:00
Version 0.7 (July 2013)
-----------------------
* ??? changes, numerous bugfixes
2013-06-13 01:16:22 -05:00
* Syntax changes
2013-06-25 01:46:38 -05:00
* `impl`s no longer accept a visibility qualifier. Put them on methods
instead.
2013-06-15 18:57:37 -05:00
* `use mod` is no longer valid.
* `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(...)]`.
2013-06-15 18:57:37 -05:00
* The `Durable` trait is replaced with the `'static` bounds.
* At long last, 'argument modes' no longer exist.
* The `bytes!` macro returns a vector of bytes for string, u8, char,
and unsuffixed integer literals.
2013-06-18 01:50:51 -05:00
* `#[static_assert]` makes compile-time assertions about static bools.
2013-06-13 01:16:22 -05:00
2013-04-15 02:12:19 -05:00
* Semantic changes
2013-06-15 18:57:37 -05:00
* The borrow checker has been rewritten with flow-sensitivity, fixing
many bugs and inconveniences.
2013-06-13 01:16:22 -05:00
* The `self` parameter no longer implicitly means `&'self self`,
and can be explicitly marked with a lifetime.
* Structs with the `#[packed]` attribute have byte alignment and
no padding between fields.
2013-06-15 18:57:37 -05:00
* The `for` loop protocol now requires `for`-iterators to return `bool`
so they compose better.
2013-06-25 01:46:38 -05:00
* Trait default methods work more often.
* 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.
2013-06-15 18:57:37 -05:00
* `Option<~T>` is now represented as a nullable pointer.
* `@mut` does dynamic borrow checks correctly.
* Macros TODO
* 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 `#[non_owned]` attribute makes a type that would otherwise be
`Owned`, not. TODO this may change to non_send before 0.7
* The `#[mutable]` attribute makes a type that would otherwise be
`Const`, note. TODO this may change to non_freeze before 0.7
* Unbounded recursion will abort the process after reaching the limit
2013-06-18 01:50:51 -05:00
specified by the `RUST_MAX_STACK` environment variable (default: 1GB).
2013-06-15 18:57:37 -05:00
* The `vecs_implicitly_copyable` lint mode has been removed. Vectors
are never implicitly copyable.
2013-04-15 02:12:19 -05:00
* Libraries
2013-06-13 01:16:22 -05:00
* The `core` crate was renamed to `std`.
* The `std` crate was renamed to `extra`.
* std: `iterator` module for external iterator objects.
2013-06-25 01:46:38 -05:00
* Many old-style (internal, higher-order function) iterators replaced by
implementations of `Iterator`.
2013-06-18 01:50:51 -05:00
* std: Many old internal vector and string iterators,
incl. `any`, `all`. removed.
2013-06-25 01:46:38 -05:00
* std: The `finalize` method of `Drop` renamed to `drop`.
* std: The prelude no longer reexports 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`,
2013-06-15 18:57:37 -05:00
`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()`.
2013-06-25 01:46:38 -05:00
* std: Many types implement `Clone`.
2013-06-13 01:16:22 -05:00
* std: `path` type renamed to `Path`.
2013-06-25 01:46:38 -05:00
* 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.
2013-06-25 01:46:38 -05:00
* std: `reinterpret_cast` removed. Use `transmute`.
2013-06-15 18:57:37 -05:00
* 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`.
2013-06-25 01:46:38 -05:00
* std: Various types implement `Zero`.
2013-06-15 18:57:37 -05:00
* std: `LinearMap` and `LinearSet` renamed to `HashMap` and `HashSet`.
2013-06-18 01:50:51 -05:00
* std: Borrowed pointer functions moved from `ptr` to `borrow`.
2013-06-15 18:57:37 -05:00
* 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.
2013-06-18 01:50:51 -05:00
* std: `Cell` constructors converted to static methods.
* extra: `rc` module adds the reference counted pointers, `Rc` and `RcMut`.
2013-06-15 18:57:37 -05:00
* extra: `flate` module moved from `std` to `extra`.
* extra: `fileinput` module for iterating over a series of files.
2013-06-13 01:16:22 -05:00
* extra: `Complex` number type and `complex` module.
* extra: `Rational` number type and `rational` module.
* extra: `BigInt`, `BigUint` implement numeric and comparison traits.
2013-06-15 18:57:37 -05:00
* extra: `term` uses terminfo now, is more correct.
2013-06-18 01:50:51 -05:00
* extra: `arc` functions converted to methods.
* extra: Implementation of fixed output size variations of SHA-2.
2013-06-13 01:16:22 -05:00
2013-06-15 18:57:37 -05:00
* Tooling
2013-06-13 01:16:22 -05:00
* `unused_unsafe` lint mode for detecting unnecessary `unsafe` blocks.
2013-06-15 18:57:37 -05:00
* `unused_mut` lint mode for identifying unused `mut` qualifiers.
2013-06-13 01:16:22 -05:00
* The `rusti` command has been rewritten and a number of bugs addressed.
2013-06-15 18:57:37 -05:00
* 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.
2013-06-27 14:00:00 -05:00
* Improvements to rustpkg (see the detailed release notes)
2013-06-15 18:57:37 -05:00
* Other
* More and improved library documentation.
* Various improvements on ARM and Android.
* Various improvements to MIPS backend.
2013-04-15 02:12:19 -05:00
2013-03-28 13:38:10 -05:00
Version 0.6 (April 2013)
2013-04-15 02:12:19 -05:00
------------------------
2013-03-26 14:28:04 -05:00
* ~2100 changes, numerous bugfixes
2013-03-11 20:27:41 -05:00
* Syntax changes
* The self type parameter in traits is now spelled `Self`
2013-03-22 13:59:59 -05:00
* The `self` parameter in trait and impl methods must now be explicitly
named (for example: `fn f(&self) { }`). Implicit self is deprecated.
2013-03-26 14:28:04 -05:00
* Static methods no longer require the `static` keyword and instead
are distinguished by the lack of a `self` parameter
2013-03-11 20:27:41 -05:00
* Replaced the `Durable` trait with the `'static` lifetime
* The old closure type syntax with the trailing sigil has been
removed in favor of the more consistent leading sigil
* `super` is a keyword, and may be prefixed to paths
* Trait bounds are separated with `+` instead of whitespace
* Traits are implemented with `impl Trait for Type`
instead of `impl Type: Trait`
2013-03-26 14:28:04 -05:00
* Lifetime syntax is now `&'l foo` instead of `&l/foo`
2013-03-11 20:27:41 -05:00
* The `export` keyword has finally been removed
2013-03-22 13:59:59 -05:00
* The `move` keyword has been removed (see "Semantic changes")
2013-03-11 20:27:41 -05:00
* The interior mutability qualifier on vectors, `[mut T]`, has been
removed. Use `&mut [T]`, etc.
* `mut` is no longer valid in `~mut T`. Use inherited mutability
* `fail` is no longer a keyword. Use `fail!()`
* `assert` is no longer a keyword. Use `assert!()`
* `log` is no longer a keyword. use `debug!`, etc.
* 1-tuples may be represented as `(T,)`
* Struct fields may no longer be `mut`. Use inherited mutability,
`@mut T`, `core::mut` or `core::cell`
* `extern mod { ... }` is no longer valid syntax for foreign
function modules. Use extern blocks: `extern { ... }`
* Newtype enums removed. Use tuple-structs.
2013-03-11 20:27:41 -05:00
* Trait implementations no longer support visibility modifiers
2013-03-22 13:59:59 -05:00
* Pattern matching over vectors improved and expanded
* `const` renamed to `static` to correspond to lifetime name,
and make room for future `static mut` unsafe mutable globals.
2013-03-26 14:28:04 -05:00
* Replaced `#[deriving_eq]` with `#[deriving(Eq)]`, etc.
2013-03-24 07:57:58 -05:00
* `Clone` implementations can be automatically generated with
`#[deriving(Clone)]`
2013-03-26 14:28:04 -05:00
* Casts to traits must use a pointer sigil, e.g. `@foo as @Bar`
instead of `foo as Bar`.
* Fixed length vector types are now written as `[int, .. 3]`
instead of `[int * 3]`.
* Fixed length vector types can express the length as a constant
expression. (ex: `[int, .. GL_BUFFER_SIZE - 2]`)
2013-03-11 20:27:41 -05:00
* Semantic changes
* Types with owned pointers or custom destructors move by default,
eliminating the `move` keyword
2013-03-11 20:27:41 -05:00
* All foreign functions are considered unsafe
* &mut is now unaliasable
* Writes to borrowed @mut pointers are prevented dynamically
* () has size 0
* The name of the main function can be customized using #[main]
* The default type of an inferred closure is &fn instead of @fn
2013-03-26 14:28:04 -05:00
* `use` statements may no longer be "chained" - they cannot import
identifiers imported by previous `use` statements
* `use` statements are crate relative, importing from the "top"
of the crate by default. Paths may be prefixed with `super::`
or `self::` to change the search behavior.
2013-03-11 20:27:41 -05:00
* Method visibility is inherited from the implementation declaration
* Structural records have been removed
* Many more types can be used in static items, including enums
2013-03-22 18:47:02 -05:00
'static-lifetime pointers and vectors
* Pattern matching over vectors improved and expanded
2013-03-11 20:27:41 -05:00
* Typechecking of closure types has been overhauled to
improve inference and eliminate unsoundness
2013-03-26 15:56:49 -05:00
* Macros leave scope at the end of modules, unless that module is
tagged with #[macro_escape]
2013-03-11 20:27:41 -05:00
* Libraries
2013-03-11 20:27:41 -05:00
* Added big integers to `std::bigint`
* Removed `core::oldcomm` module
* Added pipe-based `core::comm` module
* Numeric traits have been reorganized under `core::num`
* `vec::slice` finally returns a slice
* `debug!` and friends don't require a format string, e.g. `debug!(Foo)`
* Containers reorganized around traits in `core::container`
* `core::dvec` removed, `~[T]` is a drop-in replacement
* `core::send_map` renamed to `core::hashmap`
2013-03-22 13:59:59 -05:00
* `std::map` removed; replaced with `core::hashmap`
* `std::treemap` reimplemented as an owned balanced tree
* `std::deque` and `std::smallintmap` reimplemented as owned containers
* `core::trie` added as a fast ordered map for integer keys
* Set types added to `core::hashmap`, `core::trie` and `std::treemap`
2013-03-26 14:28:04 -05:00
* `Ord` split into `Ord` and `TotalOrd`. `Ord` is still used to
overload the comparison operators, whereas `TotalOrd` is used
by certain container types
2013-03-11 20:27:41 -05:00
2013-03-26 14:28:04 -05:00
* Other
2013-03-11 20:27:41 -05:00
* Replaced the 'cargo' package manager with 'rustpkg'
* Added all-purpose 'rust' tool
2013-03-22 13:59:59 -05:00
* `rustc --test` now supports benchmarks with the `#[bench]` attribute
2013-03-26 14:28:04 -05:00
* rustc now *attempts* to offer spelling suggestions
2013-03-11 20:27:41 -05:00
* Improved support for ARM and Android
* Preliminary MIPS backend
* Improved foreign function ABI implementation for x86, x86_64
2013-03-22 13:59:59 -05:00
* Various memory usage improvements
2013-03-11 20:27:41 -05:00
* Rust code may be embedded in foreign code under limited circumstances
* Inline assembler supported by new asm!() syntax extension.
2012-12-05 21:29:11 -06:00
Version 0.5 (December 2012)
---------------------------
2012-12-17 20:45:14 -06:00
* ~900 changes, numerous bugfixes
2012-12-05 21:29:11 -06:00
* Syntax changes
* Removed `<-` move operator
2012-12-05 21:29:11 -06:00
* Completed the transition from the `#fmt` extension syntax to `fmt!`
* Removed old fixed length vector syntax - `[T]/N`
* New token-based quasi-quoters, `quote_tokens!`, `quote_expr!`, etc.
* Macros may now expand to items and statements
* `a.b()` is always parsed as a method call, never as a field projection
* `Eq` and `IterBytes` implementations can be automatically generated
with `#[deriving_eq]` and `#[deriving_iter_bytes]` respectively
* Removed the special crate language for `.rc` files
* Function arguments may consist of any irrefutable pattern
* Semantic changes
* `&` and `~` pointers may point to objects
2012-12-05 21:29:11 -06:00
* Tuple structs - `struct Foo(Bar, Baz)`. Will replace newtype enums.
* Enum variants may be structs
2012-12-05 21:29:11 -06:00
* Destructors can be added to all nominal types with the Drop trait
* Structs and nullary enum variants may be constants
* Values that cannot be implicitly copied are now automatically moved
without writing `move` explicitly
* `&T` may now be coerced to `*T`
* Coercions happen in `let` statements as well as function calls
* `use` statements now take crate-relative paths
* The module and type namespaces have been merged so that static
method names can be resolved under the trait in which they are
declared
* Improved support for language features
* Trait inheritance works in many scenarios
* More support for explicit self arguments in methods - `self`, `&self`
`@self`, and `~self` all generally work as expected
* Static methods work in more situations
* Experimental: Traits may declare default methods for the implementations
to use
2012-12-05 21:29:11 -06:00
* Libraries
* New condition handling system in `core::condition`
* Timsort added to `std::sort`
* New priority queue, `std::priority_queue`
2012-12-18 14:09:37 -06:00
* Pipes for serializable types, `std::flatpipes'
2012-12-05 21:29:11 -06:00
* Serialization overhauled to be trait-based
* Expanded `getopts` definitions
* Moved futures to `std`
2012-12-05 21:29:11 -06:00
* More functions are pure now
* `core::comm` renamed to `oldcomm`. Still deprecated
* `rustdoc` and `cargo` are libraries now
2012-12-05 21:29:11 -06:00
* Misc
* Added a preliminary REPL, `rusti`
* License changed from MIT to dual MIT/APL2
2012-10-03 19:41:55 -05:00
Version 0.4 (October 2012)
2012-10-03 19:49:09 -05:00
--------------------------
2012-09-14 21:49:05 -05:00
2012-10-10 16:08:40 -05:00
* ~2000 changes, numerous bugfixes
2012-09-14 21:49:05 -05:00
* 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
2012-10-03 19:41:08 -05:00
* Explicit method self types
2012-09-14 21:49:05 -05:00
* `ret` became `return` and `alt` became `match`
2012-09-15 01:11:51 -05:00
* `import` is now `use`; `use is now `extern mod`
* `extern mod { ... }` is now `extern { ... }`
* `use mod` is the recommended way to import modules
* `pub` and `priv` replace deprecated export lists
* The syntax of `match` pattern arms now uses fat arrow (=>)
2012-10-03 19:41:08 -05:00
* `main` no longer accepts an args vector; use `os::args` instead
2012-09-14 21:49:05 -05:00
* Semantics
* Trait implementations are now coherent, ala Haskell typeclasses
2012-09-15 01:11:51 -05:00
* Trait methods may be static
* Argument modes are deprecated
2012-09-14 21:49:05 -05:00
* 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
2012-09-15 01:11:51 -05:00
* Resolution rewritten to be more reliable
2012-09-14 21:49:05 -05:00
* 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`
2012-10-03 19:41:08 -05:00
* `core::task' gained a (currently unsafe) task-local storage API
2012-09-14 21:49:05 -05:00
* Concurrency
2012-09-15 01:11:51 -05:00
* An efficient new intertask communication primitive called the pipe,
along with a number of higher-level channel types, in `core::pipes`
2012-09-14 21:49:05 -05:00
* `std::arc`, an atomically reference counted, immutable, shared memory
type
* `std::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
* 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
2012-10-03 19:41:08 -05:00
* All hash functions and tables converted to secure, randomized SipHash
2012-09-14 21:49:05 -05:00
2012-07-10 21:06:58 -05:00
Version 0.3 (July 2012)
------------------------
2012-06-22 20:08:43 -05:00
2012-07-10 21:06:58 -05:00
* ~1900 changes, numerous bugfixes
* New coding conveniences
* Integer-literal suffix inference
2012-07-04 18:11:37 -05:00
* Per-item control over warnings, errors
* #[cfg(windows)] and #[cfg(unix)] attributes
* Documentation comments
* More compact closure syntax
2012-07-05 14:38:07 -05:00
* 'do' expressions for treating higher-order functions as
control structures
2012-07-04 18:11:37 -05:00
* *-patterns (wildcard extended to all constructor fields)
* Semantic cleanup
2012-07-05 14:38:07 -05:00
* Name resolution pass and exhaustiveness checker rewritten
2012-07-05 18:36:11 -05:00
* Region pointers and borrow checking supersede alias
analysis
2012-07-05 14:38:07 -05:00
* 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
2012-07-05 14:38:07 -05:00
* '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',
2012-07-10 21:06:58 -05:00
'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
2012-03-26 20:17:55 -05:00
Version 0.2 (March 2012)
-------------------------
2012-03-27 14:54:43 -05:00
* >1500 changes, numerous bugfixes
2012-03-26 20:17:55 -05:00
* 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
2012-03-28 15:05:59 -05:00
* Noticeably improved message-passing performance
2012-03-26 20:17:55 -05:00
* Explicit schedulers
* Callbacks from C
* Helgrind clean
2012-03-27 14:54:43 -05:00
* Experimental new language features
2012-03-26 20:17:55 -05:00
* 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
2012-03-27 14:54:43 -05:00
* Block-function form of 'for' loop, with 'break' and 'ret'.
2012-03-26 20:17:55 -05:00
* 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
2012-01-18 16:46:52 -06:00
Version 0.1 (January 2012)
---------------------------
2012-01-19 23:17:23 -06:00
* 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:
2012-01-18 16:46:52 -06:00
* 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:
2012-01-19 23:17:23 -06:00
* Documentation is incomplete.
2012-01-18 16:46:52 -06:00
2012-01-20 00:53:55 -06:00
* Performance is below intended target.
2012-01-18 16:46:52 -06:00
2012-01-19 23:17:23 -06:00
* Standard library APIs are subject to extensive change, reorganization.
2012-01-18 16:46:52 -06:00
2012-01-19 23:17:23 -06:00
* Language-level versioning is not yet operational - future code will
break unexpectedly.