|
| 1 | +Version 1.8.0 (2016-04-14) |
| 2 | +========================== |
| 3 | + |
| 4 | +Language |
| 5 | +-------- |
| 6 | + |
| 7 | +* Rust supports overloading of compound assignment statements like |
| 8 | + `+=` by implementing the [`AddAssign`], [`SubAssign`], |
| 9 | + [`MulAssign`], [`DivAssign`], [`RemAssign`], [`BitAndAssign`], |
| 10 | + [`BitOrAssign`], [`BitXorAssign`], [`ShlAssign`], or [`ShrAssign`] |
| 11 | + traits. [RFC 953]. |
| 12 | +* Empty structs can be defined with braces, as in `struct Foo { }`, in |
| 13 | + addition to the non-braced form, `struct Foo;`. [RFC 218]. |
| 14 | + |
| 15 | +Libraries |
| 16 | +--------- |
| 17 | + |
| 18 | +* Stabilized APIs: |
| 19 | + * [`str::encode_utf16`][] (renamed from `utf16_units`) |
| 20 | + * [`str::EncodeUtf16`][] (renamed from `Utf16Units`) |
| 21 | + * [`Ref::map`] |
| 22 | + * [`RefMut::map`] |
| 23 | + * [`ptr::drop_in_place`] |
| 24 | + * [`time::Instant`] |
| 25 | + * [`time::SystemTime`] |
| 26 | + * [`Instant::now`] |
| 27 | + * [`Instant::duration_since`][] (renamed from `duration_from_earlier`) |
| 28 | + * [`Instant::elapsed`] |
| 29 | + * [`SystemTime::now`] |
| 30 | + * [`SystemTime::duration_since`][] (renamed from `duration_from_earlier`) |
| 31 | + * [`SystemTime::elapsed`] |
| 32 | + * Various `Add`/`Sub` impls for `Time` and `SystemTime` |
| 33 | + * [`SystemTimeError`] |
| 34 | + * [`SystemTimeError::duration`] |
| 35 | + * Various impls for `SystemTimeError` |
| 36 | + * [`UNIX_EPOCH`] |
| 37 | + * [`AddAssign`], [`SubAssign`], [`MulAssign`], [`DivAssign`], |
| 38 | + [`RemAssign`], [`BitAndAssign`], [`BitOrAssign`], |
| 39 | + [`BitXorAssign`], [`ShlAssign`], [`ShrAssign`]. |
| 40 | +* [The `write!` and `writeln!` macros correctly emit errors if any of |
| 41 | + their arguments can't be formatted][1.8w]. |
| 42 | +* [Various I/O functions support large files on 32-bit Linux][1.8l]. |
| 43 | +* [The Unix-specific `raw` modules, which contain a number of |
| 44 | + redefined C types are deprecated][1.8r], including `os::raw::unix`, |
| 45 | + `os::raw::macos`, and `os::raw::linux`. These modules defined types |
| 46 | + such as `ino_t` and `dev_t`. The inconsistency of these definitions |
| 47 | + across platforms was making it difficult to implement `std` |
| 48 | + correctly. Those that need these definitions should use the `libc` |
| 49 | + crate. [RFC 1415]. |
| 50 | +* The Unix-specific `MetadataExt` traits, including |
| 51 | + `os::unix::fs::MetadataExt`, which expose values such as inode |
| 52 | + numbers [no longer return platform-specific types][1.8r], but |
| 53 | + instead return widened integers. [RFC 1415]. |
| 54 | +* [`btree_set::{IntoIter, Iter, Range}` are covariant][1.8cv]. |
| 55 | +* [Atomic loads and stores are not volatile][1.8a]. |
| 56 | +* [All types in `sync::mpsc` implement `fmt::Debug`][1.8mp]. |
| 57 | + |
| 58 | +Performance |
| 59 | +----------- |
| 60 | + |
| 61 | +* [Inlining hash functions lead to a 3% compile-time improvement in |
| 62 | + some workloads][1.8h]. |
| 63 | +* When using jemalloc, its symbols are [unprefixed so that it |
| 64 | + overrides the libc malloc implementation][1.8h]. This means that for |
| 65 | + rustc, LLVM is now using jemalloc, which results in a 6% |
| 66 | + compile-time improvement on a specific workload. |
| 67 | +* [Avoid quadratic growth in function size due to cleanups][1.8cu]. |
| 68 | + |
| 69 | +Misc |
| 70 | +---- |
| 71 | + |
| 72 | +* [32-bit MSVC builds finally implement unwinding][1.8ms]. |
| 73 | + i686-pc-windows-msvc is now considered a tier-1 platform. |
| 74 | +* [The `--print targets` flag prints a list of supported targets][1.8t]. |
| 75 | +* [The `--print cfg` flag prints the `cfg`s defined for the current |
| 76 | + target][1.8cf]. |
| 77 | +* [`rustc` can be built with an new Cargo-based build system, written |
| 78 | + in Rust][1.8b]. It will eventually replace Rust's Makefile-based |
| 79 | + build system. To enable it configure with `configure --rustbuild`. |
| 80 | +* [Errors for non-exhaustive `match` patterns now list up to 3 missing |
| 81 | + variants while also indicating the total number of missing variants |
| 82 | + if more than 3][1.8m]. |
| 83 | +* [Executable stacks are disabled on Linux and BSD][1.8nx]. |
| 84 | +* The Rust Project now publishes binary releases of the standard |
| 85 | + library for a number of tier-2 targets: |
| 86 | + `armv7-unknown-linux-gnueabihf`, `powerpc-unknown-linux-gnu`, |
| 87 | + `powerpc64-unknown-linux-gnu`, `powerpc64le-unknown-linux-gnu` |
| 88 | + `x86_64-rumprun-netbsd`. These can be installed with |
| 89 | + tools such as [multirust][1.8mr]. |
| 90 | + |
| 91 | +Cargo |
| 92 | +----- |
| 93 | + |
| 94 | +* [`cargo init` creates a new Cargo project in the current |
| 95 | + directory][1.8ci]. It is otherwise like `cargo new`. |
| 96 | +* [Cargo has configuration keys for `-v` and |
| 97 | + `--color`][1.8cc]. `verbose` and `color`, respectively, go in the |
| 98 | + `[term]` section of `.cargo/config`. |
| 99 | +* [Configuration keys that evaluate to strings or integers can be set |
| 100 | + via environment variables][1.8ce]. For example the `build.jobs` key |
| 101 | + can be set via `CARGO_BUILD_JOBS`. Environment variables take |
| 102 | + precedence over config files. |
| 103 | +* [Target-specific dependencies support Rust `cfg` syntax for |
| 104 | + describing targets][1.8cfg] so that dependencies for multiple |
| 105 | + targets can be specified together. [RFC 1361]. |
| 106 | +* [The environment variables `CARGO_TARGET_ROOT`, `RUSTC`, and |
| 107 | + `RUSTDOC` take precedence over the `build.target-dir`, |
| 108 | + `build.rustc`, and `build.rustdoc` configuration values][1.8cv]. |
| 109 | +* [The child process tree is killed on Windows when Cargo is |
| 110 | + killed][1.8ck]. |
| 111 | +* [The `build.target` configuration value sets the target platform, |
| 112 | + like `--target`][1.8ct]. |
| 113 | + |
| 114 | +Compatibility Notes |
| 115 | +------------------- |
| 116 | + |
| 117 | +* [Unstable compiler flags have been further restricted][1.8u]. Since |
| 118 | + 1.0 `-Z` flags have been considered unstable, and other flags that |
| 119 | + were considered unstable additionally required passing `-Z |
| 120 | + unstable-options` to access. Unlike unstable language and library |
| 121 | + features though, these options have been accessible on the stable |
| 122 | + release channel. Going forward, *new unstable flags will not be |
| 123 | + available on the stable release channel*, and old unstable flags |
| 124 | + will warn about their usage. In the future, all unstable flags will |
| 125 | + be unavailable on the stable release channel. |
| 126 | +* [It is no longer possible to `match` on empty enum variants using |
| 127 | + the `Variant(..)` syntax][1.8v]. This has been a warning since 1.6. |
| 128 | +* The Unix-specific `MetadataExt` traits, including |
| 129 | + `os::unix::fs::MetadataExt`, which expose values such as inode |
| 130 | + numbers [no longer return platform-specific types][1.8r], but |
| 131 | + instead return widened integers. [RFC 1415]. |
| 132 | +* [Modules sourced from the filesystem cannot appear within arbitrary |
| 133 | + blocks, but only within other modules][1.8m]. |
| 134 | +* [`--cfg` compiler flags are parsed strictly as identifiers][1.8c]. |
| 135 | +* On Unix, [stack overflow triggers a runtime abort instead of a |
| 136 | + SIGSEGV][1.8so]. |
| 137 | +* [`Command::spawn` and its equivalents return an error if any of |
| 138 | + its command-line arguments contain interior `NUL`s][1.8n]. |
| 139 | +* [Tuple and unit enum variants from other crates are in the type |
| 140 | + namespace][1.8tn]. |
| 141 | +* [On Windows `rustc` emits `.lib` files for the `staticlib` library |
| 142 | + type instead of `.a` files][1.8st]. Additionally, for the MSVC |
| 143 | + toolchain, `rustc` emits import libraries named `foo.dll.lib` |
| 144 | + instead of `foo.lib`. |
| 145 | + |
| 146 | + |
| 147 | +[1.8a]: https://github.com/rust-lang/rust/pull/30962 |
| 148 | +[1.8b]: https://github.com/rust-lang/rust/pull/31123 |
| 149 | +[1.8c]: https://github.com/rust-lang/rust/pull/31530 |
| 150 | +[1.8cc]: https://github.com/rust-lang/cargo/pull/2397 |
| 151 | +[1.8ce]: https://github.com/rust-lang/cargo/pull/2398 |
| 152 | +[1.8cf]: https://github.com/rust-lang/rust/pull/31278 |
| 153 | +[1.8cfg]: https://github.com/rust-lang/cargo/pull/2328 |
| 154 | +[1.8ci]: https://github.com/rust-lang/cargo/pull/2081 |
| 155 | +[1.8ck]: https://github.com/rust-lang/cargo/pull/2370 |
| 156 | +[1.8ct]: https://github.com/rust-lang/cargo/pull/2335 |
| 157 | +[1.8cu]: https://github.com/rust-lang/rust/pull/31390 |
| 158 | +[1.8cv]: https://github.com/rust-lang/cargo/issues/2365 |
| 159 | +[1.8cv]: https://github.com/rust-lang/rust/pull/30998 |
| 160 | +[1.8h]: https://github.com/rust-lang/rust/pull/31460 |
| 161 | +[1.8l]: https://github.com/rust-lang/rust/pull/31668 |
| 162 | +[1.8m]: https://github.com/rust-lang/rust/pull/31020 |
| 163 | +[1.8m]: https://github.com/rust-lang/rust/pull/31534 |
| 164 | +[1.8mp]: https://github.com/rust-lang/rust/pull/30894 |
| 165 | +[1.8mr]: https://users.rust-lang.org/t/multirust-0-8-with-cross-std-installation/4901 |
| 166 | +[1.8ms]: https://github.com/rust-lang/rust/pull/30448 |
| 167 | +[1.8n]: https://github.com/rust-lang/rust/pull/31056 |
| 168 | +[1.8nx]: https://github.com/rust-lang/rust/pull/30859 |
| 169 | +[1.8r]: https://github.com/rust-lang/rust/pull/31551 |
| 170 | +[1.8so]: https://github.com/rust-lang/rust/pull/31333 |
| 171 | +[1.8st]: https://github.com/rust-lang/rust/pull/29520 |
| 172 | +[1.8t]: https://github.com/rust-lang/rust/pull/31358 |
| 173 | +[1.8tn]: https://github.com/rust-lang/rust/pull/30882 |
| 174 | +[1.8u]: https://github.com/rust-lang/rust/pull/31793 |
| 175 | +[1.8v]: https://github.com/rust-lang/rust/pull/31757 |
| 176 | +[1.8w]: https://github.com/rust-lang/rust/pull/31904 |
| 177 | +[RFC 1361]: https://github.com/rust-lang/rfcs/blob/master/text/1361-cargo-cfg-dependencies.md |
| 178 | +[RFC 1415]: https://github.com/rust-lang/rfcs/blob/master/text/1415-trim-std-os.md |
| 179 | +[RFC 218]: https://github.com/rust-lang/rfcs/blob/master/text/0218-empty-struct-with-braces.md |
| 180 | +[RFC 953]: https://github.com/rust-lang/rfcs/blob/master/text/0953-op-assign.md |
| 181 | +[`AddAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.AddAssign.html |
| 182 | +[`BitAndAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.BitAndAssign.html |
| 183 | +[`BitOrAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.BitOrAssign.html |
| 184 | +[`BitXorAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.BitXorAssign.html |
| 185 | +[`DivAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.DivAssign.html |
| 186 | +[`Instant::duration_since`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html#method.duration_since |
| 187 | +[`Instant::elapsed`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html#method.elapsed |
| 188 | +[`Instant::now`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html#method.now |
| 189 | +[`MulAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.MulAssign.html |
| 190 | +[`Ref::map`]: http://doc.rust-lang.org/nightly/std/cell/struct.Ref.html#method.map |
| 191 | +[`RefMut::map`]: http://doc.rust-lang.org/nightly/std/cell/struct.RefMut.html#method.map |
| 192 | +[`RemAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.RemAssign.html |
| 193 | +[`ShlAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.ShlAssign.html |
| 194 | +[`ShrAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.ShrAssign.html |
| 195 | +[`SubAssign`]: http://doc.rust-lang.org/nightly/std/ops/trait.SubAssign.html |
| 196 | +[`SystemTime::duration_since`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html#method.duration_since |
| 197 | +[`SystemTime::elapsed`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html#method.elapsed |
| 198 | +[`SystemTime::now`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html#method.now |
| 199 | +[`SystemTimeError::duration`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTimeError.html#method.duration |
| 200 | +[`SystemTimeError`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTimeError.html |
| 201 | +[`UNIX_EPOCH`]: http://doc.rust-lang.org/nightly/std/time/constant.UNIX_EPOCH.html |
| 202 | +[`ptr::drop_in_place`]: http://doc.rust-lang.org/nightly/std/ptr/fn.drop_in_place.html |
| 203 | +[`str::EncodeUtf16`]: http://doc.rust-lang.org/nightly/std/str/struct.EncodeUtf16.html |
| 204 | +[`str::encode_utf16`]: http://doc.rust-lang.org/nightly/std/primitive.str.html#method.encode_utf16 |
| 205 | +[`time::Instant`]: http://doc.rust-lang.org/nightly/std/time/struct.Instant.html |
| 206 | +[`time::SystemTime`]: http://doc.rust-lang.org/nightly/std/time/struct.SystemTime.html |
| 207 | + |
| 208 | + |
1 | 209 | Version 1.7.0 (2016-03-03)
|
2 | 210 | ==========================
|
3 | 211 |
|
|
0 commit comments