|
| 1 | +Version 0.12.0 (October 2014) |
| 2 | +----------------------------- |
| 3 | + |
| 4 | + * ~1900 changes, numerous bugfixes |
| 5 | + |
| 6 | + * Highlights |
| 7 | + |
| 8 | + * The introductory documentation (now called The Rust Guide) has |
| 9 | + been completely rewritten, as have a number of supplementary |
| 10 | + guides. |
| 11 | + * Rust's package manager, Cargo, continues to improve and is |
| 12 | + sometimes considered to be quite awesome. |
| 13 | + * Many API's in `std` have been reviewed and updated for |
| 14 | + consistency with the in-development Rust coding |
| 15 | + guidelines. The standard library documentation tracks |
| 16 | + stabilization progress. |
| 17 | + * Minor libraries have been moved out-of-tree to the rust-lang org |
| 18 | + on GitHub: uuid, semver, glob, num, hexfloat, fourcc. They can |
| 19 | + be installed with Cargo. |
| 20 | + * Lifetime elision allows lifetime annotations to be left off of |
| 21 | + function declarations in many common scenarios. |
| 22 | + * Rust now works on 64-bit Windows. |
| 23 | + |
| 24 | + * Language |
| 25 | + * Indexing can be overloaded with the `Index` and `IndexMut` |
| 26 | + traits. |
| 27 | + * The `if let` construct takes a branch only if the `let` pattern |
| 28 | + matches, currently behind the 'if_let' feature gate. |
| 29 | + * 'where clauses', a more flexible syntax for specifying trait |
| 30 | + bounds that is more aesthetic, have been added for traits and |
| 31 | + free functions. Where clauses will in the future make it |
| 32 | + possible to constrain associated types, which would be |
| 33 | + impossible with the existing syntax. |
| 34 | + * A new slicing syntax (e.g. `[0..4]`) has been introduced behind |
| 35 | + the 'slicing_syntax' feature gate, and can be overloaded with |
| 36 | + the `Slice` or `SliceMut` traits. |
| 37 | + * The syntax for matching of sub-slices has been changed to use a |
| 38 | + postfix `..` instead of prefix (.e.g. `[a, b, c..]`), for |
| 39 | + consistency with other uses of `..` and to future-proof |
| 40 | + potential additional uses of the syntax. |
| 41 | + * The syntax for matching inclusive ranges in patterns has changed |
| 42 | + from `0..3` to `0...4` to be consistent with the exclusive range |
| 43 | + syntax for slicing. |
| 44 | + * Matching of sub-slices in non-tail positions (e.g. `[a.., b, |
| 45 | + c]`) has been put behind the 'advanced_slice_patterns' feature |
| 46 | + gate and may be removed in the future. |
| 47 | + * Components of tuples and tuple structs can be extracted using |
| 48 | + the `value.0` syntax, currently behind the `tuple_indexing` |
| 49 | + feature gate. |
| 50 | + * The `#[crate_id]` attribute is no longer supported; versioning |
| 51 | + is handled by the package manager. |
| 52 | + * Renaming crate imports are now written `extern crate foo as bar` |
| 53 | + instead of `extern crate bar = foo`. |
| 54 | + * Renaming use statements are now written `use foo as bar` instead |
| 55 | + of `use bar = foo`. |
| 56 | + * `let` and `match` bindings and argument names in macros are now |
| 57 | + hygienic. |
| 58 | + * The new, more efficient, closure types ('unboxed closures') have |
| 59 | + been added under a feature gate, 'unboxed_closures'. These will |
| 60 | + soon replace the existing closure types, once higher-ranked |
| 61 | + trait lifetimes are added to the language. |
| 62 | + * `move` has been added as a keyword, for indicating closures |
| 63 | + that capture by value. |
| 64 | + * Mutation and assignment is no longer allowed in pattern guards. |
| 65 | + * Generic structs and enums can now have trait bounds. |
| 66 | + * The `Share` trait is now called `Sync` to free up the term |
| 67 | + 'shared' to refer to 'shared reference' (the default reference |
| 68 | + type. |
| 69 | + * Dynamically-sized types have been mostly implemented, |
| 70 | + unifying the behavior of fat-pointer types with the rest of the |
| 71 | + type system. |
| 72 | + * As part of dynamically-sized types, the `Sized` trait has been |
| 73 | + introduced, which qualifying types implement by default, and |
| 74 | + which type parameters expect by default. To specify that a type |
| 75 | + parameter does not need to be sized, write `<Sized? T>`. Most |
| 76 | + types are `Sized`, notable exceptions being unsized arrays |
| 77 | + (`[T]`) and trait types. |
| 78 | + * Closures can return `!`, as in `|| -> !` or `proc() -> !`. |
| 79 | + * Lifetime bounds can now be applied to type parameters and object |
| 80 | + types. |
| 81 | + * The old, reference counted GC type, `Gc<T>` which was once |
| 82 | + denoted by the `@` sigil, has finally been removed. GC will be |
| 83 | + revisited in the future. |
| 84 | + |
| 85 | + * Libraries |
| 86 | + * Library documentation has been improved for a number of modules. |
| 87 | + * Bit-vectors, collections::bitv has been modernized. |
| 88 | + * The url crate is deprecated in favor of |
| 89 | + http://github.com/servo/rust-url, which can be installed with |
| 90 | + Cargo. |
| 91 | + * Most I/O stream types can be cloned and subsequently closed from |
| 92 | + a different thread. |
| 93 | + * A `std::time::Duration` type has been added for use in I/O |
| 94 | + methods that rely on timers, as well as in the 'time' crate's |
| 95 | + `Timespec` arithmetic. |
| 96 | + * The runtime I/O abstraction layer that enabled the green thread |
| 97 | + scheduler to do non-thread-blocking I/O has been removed, along |
| 98 | + with the libuv-based implementation employed by the green thread |
| 99 | + scheduler. This will greatly simplify the future I/O work. |
| 100 | + * `collections::btree` has been rewritten to have a more |
| 101 | + idiomatic and efficient design. |
| 102 | + |
| 103 | + * Tooling |
| 104 | + * rustdoc output now indicates the stability levels of API's. |
| 105 | + * The `--crate-name` flag can specify the name of the crate |
| 106 | + being compiled, like `#[crate_name]`. |
| 107 | + * The `-C metadata` specifies additional metadata to hash into |
| 108 | + symbol names, and `-C extra-filename` specifies additional |
| 109 | + information to put into the output filename, for use by the |
| 110 | + package manager for versioning. |
| 111 | + * debug info generation has continued to improve and should be |
| 112 | + more reliable under both gdb and lldb. |
| 113 | + * rustc has experimental support for compiling in parallel |
| 114 | + using the `-C codegen-units` flag. |
| 115 | + * rustc no longer encodes rpath information into binaries by |
| 116 | + default. |
| 117 | + |
| 118 | + * Misc |
| 119 | + * Stack usage has been optimized with LLVM lifetime annotations. |
| 120 | + * Official Rust binaries on Linux are more compatible with older |
| 121 | + kernels and distributions, built on CentOS 5.10. |
| 122 | + |
1 | 123 | Version 0.11.0 (July 2014)
|
2 | 124 | -------------------------
|
3 | 125 |
|
|
0 commit comments