|
1 |
| -Version 0.9 (XXX 2013) |
| 1 | +Version 0.9 (January 2014) |
2 | 2 | --------------------------
|
3 | 3 |
|
4 |
| - * ~XXX changes, numerous bugfixes |
| 4 | + * ~1600 changes, numerous bugfixes |
| 5 | + |
| 6 | + * Language |
| 7 | + * The `float` type has been removed. Use `f32` or `f64` instead. |
| 8 | + * A new facility for enabling experimental features (feature gating) has |
| 9 | + been added, using the crate-level `#[feature(foo)]` attribute. |
| 10 | + * Managed boxes (@) are now behind a feature gate |
| 11 | + (`#[feature(managed_boxes)]`) in preperation for future removal. Use the |
| 12 | + standard library's `Gc` or `Rc` types instead. |
| 13 | + * `@mut` has been removed. Use `std::cell::{Cell, RefCell}` instead. |
| 14 | + * Jumping back to the top of a loop is now done with `continue` instead of |
| 15 | + `loop`. |
| 16 | + * Strings can no longer be mutated through index assignment. |
| 17 | + * Raw strings can be created via the basic `r"foo"` syntax or with matched |
| 18 | + hash delimiters, as in `r###"foo"###`. |
| 19 | + * `~fn` is now written `proc (args) -> retval { ... }` and may only be |
| 20 | + called once. |
| 21 | + * The `&fn` type is now written `|args| -> ret` to match the literal form. |
| 22 | + * `@fn`s have been removed. |
| 23 | + * `do` only works with procs in order to make it obvious what the cost |
| 24 | + of `do` is. |
| 25 | + * The `#[link(...)]` attribute has been replaced with |
| 26 | + `#[crate_id = "name#vers"]`. |
| 27 | + * Empty `impl`s must be terminated with empty braces and may not be |
| 28 | + terminated with a semicolon. |
| 29 | + * Keywords are no longer allowed as lifetime names; the `self` lifetime |
| 30 | + no longer has any special meaning. |
| 31 | + * The old `fmt!` string formatting macro has been removed. |
| 32 | + * `printf!` and `printfln!` (old-style formatting) removed in favor of |
| 33 | + `print!` and `println!`. |
| 34 | + * `mut` works in patterns now, as in `let (mut x, y) = (1, 2);`. |
| 35 | + * New reserved keywords: `alignof`, `offsetof`, `sizeof`. |
| 36 | + * Macros can have attributes. |
| 37 | + * Macros can expand to items with attributes. |
| 38 | + * Macros can expand to multiple items. |
| 39 | + * The `asm!` macro is feature-gated (`#[feature(asm)]`). |
| 40 | + * Comments may be nested. |
| 41 | + * Values automatically coerce to trait objects they implement, without |
| 42 | + an explicit `as`. |
| 43 | + * Enum discriminants are no longer an entire word but as small as needed to |
| 44 | + contain all the variants. The `repr` attribute can be used to override |
| 45 | + the discriminant size, as in `#[repr(int)]` for integer-sized, and |
| 46 | + `#[repr(C)]` to match C enums. |
| 47 | + * Non-string literals are not allowed in attributes (they never worked). |
| 48 | + * The FFI now supports variadic functions. |
| 49 | + * Octal numeric literals, as in `0o7777`. |
| 50 | + * The `concat!` syntax extension performs compile-time string concatenation. |
| 51 | + * The `#[fixed_stack_segment]` and `#[rust_stack]` attributes have been |
| 52 | + removed as Rust no longer uses segmented stacks. |
| 53 | + * Non-ascii identifiers are feature-gated (`#[feature(non_ascii_idents)]`). |
| 54 | + * Ignoring all fields of an enum variant or tuple-struct is done with `..`, |
| 55 | + not `*`; ignoring remaining fields of a struct is also done with `..`, |
| 56 | + not `_`; ignoring a slice of a vector is done with `..`, not `.._`. |
| 57 | + * `rustc` supports the "win64" calling convention via `extern "win64"`. |
| 58 | + * `rustc` supports the "system" calling convention, which defaults to the |
| 59 | + preferred convention for the target platform, "stdcall" on 32-bit Windows, |
| 60 | + "C" elsewhere. |
| 61 | + * The `type_overflow` lint (default: warn) checks literals for overflow. |
| 62 | + * The `unsafe_block` lint (default: allow) checks for usage of `unsafe`. |
| 63 | + * The `attribute_usage` lint (default: warn) warns about unknown |
| 64 | + attributes. |
| 65 | + * The `unknown_features` lint (default: warn) warns about unknown |
| 66 | + feature gates. |
| 67 | + * The `dead_code` lint (default: warn) checks for dead code. |
| 68 | + * Rust libraries can be linked statically to one another |
| 69 | + * `#[link_args]` is behind the `link_args` feature gate. |
| 70 | + * Native libraries are now linked with `#[link(name = "foo")]` |
| 71 | + * Native libraries can be statically linked to a rust crate |
| 72 | + (`#[link(name = "foo", kind = "static")]`). |
| 73 | + * Native OS X frameworks are now officially supported |
| 74 | + (`#[link(name = "foo", kind = "framework")]`). |
| 75 | + * The `#[thread_local]` attribute creates thread-local (not task-local) |
| 76 | + variables. Currently behind the `thread_local` feature gate. |
| 77 | + * The `return` keyword may be used in closures. |
| 78 | + * Types that can be copied via a memcpy implement the `Pod` kind. |
| 79 | + |
| 80 | + * Libraries |
| 81 | + * std: The `option` and `result` API's have been overhauled to make them |
| 82 | + simpler, more consistent, and more composable. |
| 83 | + * std: The entire `std::io` module has been replaced with one that is |
| 84 | + more comprehensive and that properly interfaces with the underlying |
| 85 | + scheduler. File, TCP, UDP, Unix sockets, pipes, and timers are all |
| 86 | + implemented. |
| 87 | + * std: `io::util` contains a number of useful implementations of |
| 88 | + `Reader` and `Writer`, including `NullReader`, `NullWriter`, |
| 89 | + `ZeroReader`, `TeeReader`. |
| 90 | + * std: The reference counted pointer type `extra::rc` moved into std. |
| 91 | + * std: The `Gc` type in the `gc` module will replace `@` (it is currently |
| 92 | + just a wrapper around it). |
| 93 | + * std: `fmt::Default` can be implemented for any type to provide default |
| 94 | + formatting to the `format!` macro, as in `format!("{}", myfoo)`. |
| 95 | + * std: The `rand` API continues to be tweaked. |
| 96 | + * std: Functions dealing with type size and alignment have moved from the |
| 97 | + `sys` module to the `mem` module. |
| 98 | + * std: The `path` module was written and API changed. |
| 99 | + * std: `str::from_utf8` has been changed to cast instead of allocate. |
| 100 | + * std: `starts_with` and `ends_with` methods added to vectors via the |
| 101 | + `ImmutableEqVector` trait, which is in the prelude. |
| 102 | + * std: Vectors can be indexed with the `get_opt` method, which returns `None` |
| 103 | + if the index is out of bounds. |
| 104 | + * std: Task failure no longer propagates between tasks, as the model was |
| 105 | + complex, expensive, and incompatible with thread-based tasks. |
| 106 | + * std: The `Any` type can be used for dynamic typing. |
| 107 | + * std: `~Any` can be passed to the `fail!` macro and retrieved via |
| 108 | + `task::try`. |
| 109 | + * std: Methods that produce iterators generally do not have an `_iter` |
| 110 | + suffix now. |
| 111 | + * std: `cell::Cell` and `cell::RefCell` can be used to introduce mutability |
| 112 | + roots (mutable fields, etc.). Use instead of e.g. `@mut`. |
| 113 | + * std: `util::ignore` renamed to `prelude::drop`. |
| 114 | + * std: Slices have `sort` and `sort_by` methods via the `MutableVector` |
| 115 | + trait. |
| 116 | + * std: `vec::raw` has seen a lot of cleanup and API changes. |
| 117 | + * std: The standard library no longer includes any C++ code, and very |
| 118 | + minimal C, eliminating the dependency on libstdc++. |
| 119 | + * std: Runtime scheduling and I/O functionality has been factored out into |
| 120 | + extensible interfaces and is now implemented by two different crates: |
| 121 | + libnative, for native threading and I/O; and libgreen, for green threading |
| 122 | + and I/O. This paves the way for using the standard library in more limited |
| 123 | + embeded environments. |
| 124 | + * std: The `comm` module has been rewritten to be much faster, have a |
| 125 | + simpler, more consistent API, and to work for both native and green |
| 126 | + threading. |
| 127 | + * std: All libuv dependencies have been moved into the rustuv crate. |
| 128 | + * native: New implementations of runtime scheduling on top of OS threads. |
| 129 | + * native: New native implementations of TCP, UDP, file I/O, process spawning, |
| 130 | + and other I/O. |
| 131 | + * green: The green thread scheduler and message passing types are almost |
| 132 | + entirely lock-free. |
| 133 | + * extra: The `flatpipes` module had bitrotted and was removed. |
| 134 | + * extra: All crypto functions have been removed and Rust now has a policy of |
| 135 | + not reimplementing crypto in the standard library. In the future crypto |
| 136 | + will be provided by external crates with bindings to established libraries. |
| 137 | + * extra: `c_vec` has been modernized. |
| 138 | + * extra: The `sort` module has been removed. Use the `sort` method on |
| 139 | + mutable slices. |
5 | 140 |
|
6 | 141 | * Tooling
|
7 |
| - * The `rust` and `rusti` commands have been removed, due to lack of maintenance. |
| 142 | + * The `rust` and `rusti` commands have been removed, due to lack of |
| 143 | + maintenance. |
| 144 | + * `rustdoc` was completely rewritten. |
| 145 | + * `rustdoc` can test code examples in documentation. |
| 146 | + * `rustpkg` can test packages with the argument, 'test'. |
| 147 | + * `rustpkg` supports arbitrary dependencies, including C libraries. |
| 148 | + * `rustc`'s support for generating debug info is improved again. |
| 149 | + * `rustc` has better error reporting for unbalanced delimiters. |
| 150 | + * `rustc`'s JIT support was removed due to bitrot. |
| 151 | + * Executables and static libraries can be built with LTO (-Z lto) |
| 152 | + * `rustc` adds a `--dep-info` flag for communicating dependencies to |
| 153 | + build tools. |
8 | 154 |
|
9 | 155 | Version 0.8 (September 2013)
|
10 | 156 | --------------------------
|
|
0 commit comments