]> git.lizzy.rs Git - rust.git/blob - RELEASES.txt
libsyntax: Long lines.
[rust.git] / RELEASES.txt
1 Version 0.6 (?)
2 ---------------------------
3
4    * Libraries
5      * `core::send_map` renamed to `core::hashmap`
6
7 Version 0.5 (December 2012)
8 ---------------------------
9
10    * ~900 changes, numerous bugfixes
11
12    * Syntax changes
13       * Removed `<-` move operator
14       * Completed the transition from the `#fmt` extension syntax to `fmt!`
15       * Removed old fixed length vector syntax - `[T]/N`
16       * New token-based quasi-quoters, `quote_tokens!`, `quote_expr!`, etc.
17       * Macros may now expand to items and statements
18       * `a.b()` is always parsed as a method call, never as a field projection
19       * `Eq` and `IterBytes` implementations can be automatically generated
20         with `#[deriving_eq]` and `#[deriving_iter_bytes]` respectively
21       * Removed the special crate language for `.rc` files
22       * Function arguments may consist of any irrefutable pattern
23
24    * Semantic changes
25       * `&` and `~` pointers may point to objects
26       * Tuple structs - `struct Foo(Bar, Baz)`. Will replace newtype enums.
27       * Enum variants may be structs
28       * Destructors can be added to all nominal types with the Drop trait
29       * Structs and nullary enum variants may be constants
30       * Values that cannot be implicitly copied are now automatically moved
31         without writing `move` explicitly
32       * `&T` may now be coerced to `*T`
33       * Coercions happen in `let` statements as well as function calls
34       * `use` statements now take crate-relative paths
35       * The module and type namespaces have been merged so that static
36         method names can be resolved under the trait in which they are
37         declared
38
39    * Improved support for language features
40       * Trait inheritance works in many scenarios
41       * More support for explicit self arguments in methods - `self`, `&self`
42         `@self`, and `~self` all generally work as expected
43       * Static methods work in more situations
44       * Experimental: Traits may declare default methods for the implementations
45         to use
46
47    * Libraries
48       * New condition handling system in `core::condition`
49       * Timsort added to `std::sort`
50       * New priority queue, `std::priority_queue`
51       * Pipes for serializable types, `std::flatpipes'
52       * Serialization overhauled to be trait-based
53       * Expanded `getopts` definitions
54       * Moved futures to `std`
55       * More functions are pure now
56       * `core::comm` renamed to `oldcomm`. Still deprecated
57       * `rustdoc` and `cargo` are libraries now
58
59    * Misc
60       * Added a preliminary REPL, `rusti`
61       * License changed from MIT to dual MIT/APL2
62
63 Version 0.4 (October 2012)
64 --------------------------
65
66    * ~2000 changes, numerous bugfixes
67
68    * Syntax
69       * All keywords are now strict and may not be used as identifiers anywhere
70       * Keyword removal: 'again', 'import', 'check', 'new', 'owned', 'send',
71         'of', 'with', 'to', 'class'.
72       * Classes are replaced with simpler structs
73       * Explicit method self types
74       * `ret` became `return` and `alt` became `match`
75       * `import` is now `use`; `use is now `extern mod`
76       * `extern mod { ... }` is now `extern { ... }`
77       * `use mod` is the recommended way to import modules
78       * `pub` and `priv` replace deprecated export lists
79       * The syntax of `match` pattern arms now uses fat arrow (=>)
80       * `main` no longer accepts an args vector; use `os::args` instead
81
82    * Semantics
83       * Trait implementations are now coherent, ala Haskell typeclasses
84       * Trait methods may be static
85       * Argument modes are deprecated
86       * Borrowed pointers are much more mature and recommended for use
87       * Strings and vectors in the static region are stored in constant memory
88       * Typestate was removed
89       * Resolution rewritten to be more reliable
90       * Support for 'dual-mode' data structures (freezing and thawing)
91
92    * Libraries
93       * Most binary operators can now be overloaded via the traits in
94         `core::ops'
95       * `std::net::url` for representing URLs
96       * Sendable hash maps in `core::send_map`
97       * `core::task' gained a (currently unsafe) task-local storage API
98
99    * Concurrency
100       * An efficient new intertask communication primitive called the pipe,
101         along with a number of higher-level channel types, in `core::pipes`
102       * `std::arc`, an atomically reference counted, immutable, shared memory
103         type
104       * `std::sync`, various exotic synchronization tools based on arcs and pipes
105       * Futures are now based on pipes and sendable
106       * More robust linked task failure
107       * Improved task builder API
108
109    * Other
110       * Improved error reporting
111       * Preliminary JIT support
112       * Preliminary work on precise GC
113       * Extensive architectural improvements to rustc
114       * Begun a transition away from buggy C++-based reflection (shape) code to
115         Rust-based (visitor) code
116       * All hash functions and tables converted to secure, randomized SipHash
117
118 Version 0.3  (July 2012)
119 ------------------------
120
121    * ~1900 changes, numerous bugfixes
122
123    * New coding conveniences
124       * Integer-literal suffix inference
125       * Per-item control over warnings, errors
126       * #[cfg(windows)] and #[cfg(unix)] attributes
127       * Documentation comments
128       * More compact closure syntax
129       * 'do' expressions for treating higher-order functions as
130         control structures
131       * *-patterns (wildcard extended to all constructor fields)
132
133    * Semantic cleanup
134       * Name resolution pass and exhaustiveness checker rewritten
135       * Region pointers and borrow checking supersede alias
136         analysis
137       * Init-ness checking is now provided by a region-based liveness
138         pass instead of the typestate pass; same for last-use analysis
139       * Extensive work on region pointers
140
141    * Experimental new language features
142       * Slices and fixed-size, interior-allocated vectors
143       * #!-comments for lang versioning, shell execution
144       * Destructors and iface implementation for classes;
145         type-parameterized classes and class methods
146       * 'const' type kind for types that can be used to implement
147         shared-memory concurrency patterns
148
149    * Type reflection
150
151    * Removal of various obsolete features
152       * Keywords: 'be', 'prove', 'syntax', 'note', 'mutable', 'bind',
153                  'crust', 'native' (now 'extern'), 'cont' (now 'again')
154
155       * Constructs: do-while loops ('do' repurposed), fn binding,
156                     resources (replaced by destructors)
157
158    * Compiler reorganization
159       * Syntax-layer of compiler split into separate crate
160       * Clang (from LLVM project) integrated into build
161       * Typechecker split into sub-modules
162
163    * New library code
164       * New time functions
165       * Extension methods for many built-in types
166       * Arc: atomic-refcount read-only / exclusive-use shared cells
167       * Par: parallel map and search routines
168       * Extensive work on libuv interface
169       * Much vector code moved to libraries
170       * Syntax extensions: #line, #col, #file, #mod, #stringify,
171         #include, #include_str, #include_bin
172
173    * Tool improvements
174       * Cargo automatically resolves dependencies
175
176 Version 0.2  (March 2012)
177 -------------------------
178
179    * >1500 changes, numerous bugfixes
180
181    * New docs and doc tooling
182
183    * New port: FreeBSD x86_64
184
185    * Compilation model enhancements
186       * Generics now specialized, multiply instantiated
187       * Functions now inlined across separate crates
188
189    * Scheduling, stack and threading fixes
190       * Noticeably improved message-passing performance
191       * Explicit schedulers
192       * Callbacks from C
193       * Helgrind clean
194
195    * Experimental new language features
196       * Operator overloading
197       * Region pointers
198       * Classes
199
200    * Various language extensions
201       * C-callback function types: 'crust fn ...'
202       * Infinite-loop construct: 'loop { ... }'
203       * Shorten 'mutable' to 'mut'
204       * Required mutable-local qualifier: 'let mut ...'
205       * Basic glob-exporting: 'export foo::*;'
206       * Alt now exhaustive, 'alt check' for runtime-checked
207       * Block-function form of 'for' loop, with 'break' and 'ret'.
208
209    * New library code
210       * AST quasi-quote syntax extension
211       * Revived libuv interface
212       * New modules: core::{future, iter}, std::arena
213       * Merged per-platform std::{os*, fs*} to core::{libc, os}
214       * Extensive cleanup, regularization in libstd, libcore
215
216 Version 0.1  (January 2012)
217 ---------------------------
218
219    * Most language features work, including:
220       * Unique pointers, unique closures, move semantics
221       * Interface-constrained generics
222       * Static interface dispatch
223       * Stack growth
224       * Multithread task scheduling
225       * Typestate predicates
226       * Failure unwinding, destructors
227       * Pattern matching and destructuring assignment
228       * Lightweight block-lambda syntax
229       * Preliminary macro-by-example
230
231    * Compiler works with the following configurations:
232       * Linux: x86 and x86_64 hosts and targets
233       * MacOS: x86 and x86_64 hosts and targets
234       * Windows: x86 hosts and targets
235
236    * Cross compilation / multi-target configuration supported.
237
238    * Preliminary API-documentation and package-management tools included.
239
240 Known issues:
241
242    * Documentation is incomplete.
243
244    * Performance is below intended target.
245
246    * Standard library APIs are subject to extensive change, reorganization.
247
248    * Language-level versioning is not yet operational - future code will
249      break unexpectedly.