|
| 1 | +Version 1.26.0 (2018-05-10) |
| 2 | +========================== |
| 3 | + |
| 4 | +Language |
| 5 | +-------- |
| 6 | +- [Closures now implement `Copy` and/or `Clone` if all captured variables |
| 7 | + implement either or both traits.][49299] |
| 8 | +- [The inclusive range syntax e.g. `for x in 0..=10` is now stable.][47813] |
| 9 | +- [Stablise `'_`. The underscore lifetime can be used anywhere where a |
| 10 | + lifetime can be elided.][49458] |
| 11 | +- [`impl Trait` is now stable allowing you to have abstract types in returns |
| 12 | + or in function parameters.][49255] e.g. `fn foo() -> impl Iterator<Item=u8>` or |
| 13 | + `fn open(path: impl AsRef<Path>)`. |
| 14 | +- [Pattern matching will now automatically apply dereferences.][49394] |
| 15 | +- [128-bit integers in the form of `u128` and `i128` are now stable.][49101] |
| 16 | +- [`main` can now return `Result<(), E: Debug>`][49162] in addition to `()`. |
| 17 | +- [A lot of operations are now available in a const context.][46882] E.g. You |
| 18 | + can now index into constant arrays, reference and dereference into constants, |
| 19 | + and use Tuple struct constructors. |
| 20 | +- [Fixed entry slice patterns are now stable.][48516] e.g. |
| 21 | + ```rust |
| 22 | + let points = [1, 2, 3, 4]; |
| 23 | + match points { |
| 24 | + [1, 2, 3, 4] => println!("All points were sequential."), |
| 25 | + _ => println!("Not all points were sequential."), |
| 26 | + } |
| 27 | + ``` |
| 28 | + |
| 29 | + |
| 30 | +Compiler |
| 31 | +-------- |
| 32 | +- [LLD is now used as the default linker for `wasm32-unknown-unknown`.][48125] |
| 33 | +- [Fixed exponential projection complexity on nested types.][48296] |
| 34 | + This can provide up to a ~12% reduction in compile times for certain crates. |
| 35 | +- [Added the `--remap-path-prefix` option to rustc.][48359] Allowing you |
| 36 | + to remap path prefixes outputted by the compiler. |
| 37 | +- [Added `powerpc-unknown-netbsd` target.][48281] |
| 38 | + |
| 39 | +Libraries |
| 40 | +--------- |
| 41 | +- [Implemented `From<u16> for usize` & `From<{u8, i16}> for isize`.][49305] |
| 42 | +- [Added hexadecimal formatting for integers with fmt::Debug][48978] |
| 43 | + e.g. `assert!(format!("{:02x?}", b"Foo\0") == "[46, 6f, 6f, 00]")` |
| 44 | +- [Implemented `Default, Hash` for `cmp::Reverse`.][48628] |
| 45 | +- [Optimized `str::repeat` being 8x faster in large cases.][48657] |
| 46 | +- [`ascii::escape_default` is now available in libcore.][48735] |
| 47 | +- [Trailing commas are now supported in std and core macros.][48056] |
| 48 | +- [Implemented `Copy, Clone` for `cmp::Reverse`][47379] |
| 49 | +- [Implemented `Clone` for `char::{ToLowercase, ToUppercase}`.][48629] |
| 50 | + |
| 51 | +Stabilized APIs |
| 52 | +--------------- |
| 53 | +- [`*const T::add`] |
| 54 | +- [`*const T::copy_to_nonoverlapping`] |
| 55 | +- [`*const T::copy_to`] |
| 56 | +- [`*const T::read_unaligned`] |
| 57 | +- [`*const T::read_volatile`] |
| 58 | +- [`*const T::read`] |
| 59 | +- [`*const T::sub`] |
| 60 | +- [`*const T::wrapping_add`] |
| 61 | +- [`*const T::wrapping_sub`] |
| 62 | +- [`*mut T::add`] |
| 63 | +- [`*mut T::copy_to_nonoverlapping`] |
| 64 | +- [`*mut T::copy_to`] |
| 65 | +- [`*mut T::read_unaligned`] |
| 66 | +- [`*mut T::read_volatile`] |
| 67 | +- [`*mut T::read`] |
| 68 | +- [`*mut T::replace`] |
| 69 | +- [`*mut T::sub`] |
| 70 | +- [`*mut T::swap`] |
| 71 | +- [`*mut T::wrapping_add`] |
| 72 | +- [`*mut T::wrapping_sub`] |
| 73 | +- [`*mut T::write_bytes`] |
| 74 | +- [`*mut T::write_unaligned`] |
| 75 | +- [`*mut T::write_volatile`] |
| 76 | +- [`*mut T::write`] |
| 77 | +- [`Box::leak`] |
| 78 | +- [`FromUtf8Error::as_bytes`] |
| 79 | +- [`LocalKey::try_with`] |
| 80 | +- [`Option::cloned`] |
| 81 | +- [`btree_map::Entry::and_modify`] |
| 82 | +- [`fs::read_to_string`] |
| 83 | +- [`fs::read`] |
| 84 | +- [`fs::write`] |
| 85 | +- [`hash_map::Entry::and_modify`] |
| 86 | +- [`iter::FusedIterator`] |
| 87 | +- [`ops::RangeInclusive`] |
| 88 | +- [`ops::RangeToInclusive`] |
| 89 | +- [`process::id`] |
| 90 | +- [`slice::rotate_left`] |
| 91 | +- [`slice::rotate_right`] |
| 92 | +- [`String::retain`] |
| 93 | + |
| 94 | + |
| 95 | +Cargo |
| 96 | +----- |
| 97 | +- [Cargo will now output path to custom commands when `-v` is |
| 98 | + passed with `--list`][cargo/5041] |
| 99 | +- [The Cargo binary version is now the same as the Rust version][cargo/5083] |
| 100 | +- [`Cargo.lock` files are now included in published crates.][cargo/5093] |
| 101 | + |
| 102 | +Misc |
| 103 | +---- |
| 104 | +- [The second edition of "The Rust Programming Language" book is now recommended |
| 105 | + over the first.][48404] |
| 106 | + |
| 107 | +Compatibility Notes |
| 108 | +------------------- |
| 109 | + |
| 110 | +- [aliasing a `Fn` trait as `dyn` no longer works.][48481] E.g. the following |
| 111 | + syntax is now invalid. |
| 112 | + ``` |
| 113 | + use std::ops::Fn as dyn; |
| 114 | + fn g(_: Box<dyn(std::fmt::Debug)>) {} |
| 115 | + ``` |
| 116 | +- [The result of dereferences are no longer promoted to `'static`.][47408] |
| 117 | + e.g. |
| 118 | + ```rust |
| 119 | + fn main() { |
| 120 | + const PAIR: &(i32, i32) = &(0, 1); |
| 121 | + let _reversed_pair: &'static _ = &(PAIR.1, PAIR.0); // Doesn't work |
| 122 | + } |
| 123 | + ``` |
| 124 | +- [Deprecate `AsciiExt` trait in favor of inherent methods.][49109] |
| 125 | +- [`".e0"` will now no longer parse as `0.0` and will instead cause |
| 126 | + an error.][48235] |
| 127 | +- [Removed hoedown from rustdoc.][48274] |
| 128 | +- [Bounds on higher-kinded lifetimes a hard error.][48326] |
| 129 | + |
| 130 | +[46882]: https://github.com/rust-lang/rust/pull/46882 |
| 131 | +[47379]: https://github.com/rust-lang/rust/pull/47379 |
| 132 | +[47408]: https://github.com/rust-lang/rust/pull/47408 |
| 133 | +[47813]: https://github.com/rust-lang/rust/pull/47813 |
| 134 | +[48056]: https://github.com/rust-lang/rust/pull/48056 |
| 135 | +[48125]: https://github.com/rust-lang/rust/pull/48125 |
| 136 | +[48166]: https://github.com/rust-lang/rust/pull/48166 |
| 137 | +[48235]: https://github.com/rust-lang/rust/pull/48235 |
| 138 | +[48274]: https://github.com/rust-lang/rust/pull/48274 |
| 139 | +[48281]: https://github.com/rust-lang/rust/pull/48281 |
| 140 | +[48296]: https://github.com/rust-lang/rust/pull/48296 |
| 141 | +[48326]: https://github.com/rust-lang/rust/pull/48326 |
| 142 | +[48359]: https://github.com/rust-lang/rust/pull/48359 |
| 143 | +[48404]: https://github.com/rust-lang/rust/pull/48404 |
| 144 | +[48481]: https://github.com/rust-lang/rust/pull/48481 |
| 145 | +[48516]: https://github.com/rust-lang/rust/pull/48516 |
| 146 | +[48628]: https://github.com/rust-lang/rust/pull/48628 |
| 147 | +[48629]: https://github.com/rust-lang/rust/pull/48629 |
| 148 | +[48657]: https://github.com/rust-lang/rust/pull/48657 |
| 149 | +[48735]: https://github.com/rust-lang/rust/pull/48735 |
| 150 | +[48978]: https://github.com/rust-lang/rust/pull/48978 |
| 151 | +[49101]: https://github.com/rust-lang/rust/pull/49101 |
| 152 | +[49109]: https://github.com/rust-lang/rust/pull/49109 |
| 153 | +[49121]: https://github.com/rust-lang/rust/pull/49121 |
| 154 | +[49162]: https://github.com/rust-lang/rust/pull/49162 |
| 155 | +[49184]: https://github.com/rust-lang/rust/pull/49184 |
| 156 | +[49234]: https://github.com/rust-lang/rust/pull/49234 |
| 157 | +[49255]: https://github.com/rust-lang/rust/pull/49255 |
| 158 | +[49299]: https://github.com/rust-lang/rust/pull/49299 |
| 159 | +[49305]: https://github.com/rust-lang/rust/pull/49305 |
| 160 | +[49394]: https://github.com/rust-lang/rust/pull/49394 |
| 161 | +[49458]: https://github.com/rust-lang/rust/pull/49458 |
| 162 | +[`*const T::add`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.add |
| 163 | +[`*const T::copy_to_nonoverlapping`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.copy_to_nonoverlapping |
| 164 | +[`*const T::copy_to`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.copy_to |
| 165 | +[`*const T::read_unaligned`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read_unaligned |
| 166 | +[`*const T::read_volatile`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read_volatile |
| 167 | +[`*const T::read`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read |
| 168 | +[`*const T::sub`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.sub |
| 169 | +[`*const T::wrapping_add`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_add |
| 170 | +[`*const T::wrapping_sub`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_sub |
| 171 | +[`*mut T::add`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.add-1 |
| 172 | +[`*mut T::copy_to_nonoverlapping`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.copy_to_nonoverlapping-1 |
| 173 | +[`*mut T::copy_to`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.copy_to-1 |
| 174 | +[`*mut T::read_unaligned`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read_unaligned-1 |
| 175 | +[`*mut T::read_volatile`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read_volatile-1 |
| 176 | +[`*mut T::read`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.read-1 |
| 177 | +[`*mut T::replace`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.replace |
| 178 | +[`*mut T::sub`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.sub-1 |
| 179 | +[`*mut T::swap`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.swap |
| 180 | +[`*mut T::wrapping_add`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_add-1 |
| 181 | +[`*mut T::wrapping_sub`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.wrapping_sub-1 |
| 182 | +[`*mut T::write_bytes`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.write_bytes |
| 183 | +[`*mut T::write_unaligned`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.write_unaligned |
| 184 | +[`*mut T::write_volatile`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.write_volatile |
| 185 | +[`*mut T::write`]: https://doc.rust-lang.org/std/primitive.pointer.html#method.write |
| 186 | +[`Box::leak`]: https://doc.rust-lang.org/std/boxed/struct.Box.html#method.leak |
| 187 | +[`FromUtf8Error::as_bytes`]: https://doc.rust-lang.org/std/string/struct.FromUtf8Error.html#method.as_bytes |
| 188 | +[`LocalKey::try_with`]: https://doc.rust-lang.org/std/thread/struct.LocalKey.html#method.try_with |
| 189 | +[`Option::cloned`]: https://doc.rust-lang.org/std/option/enum.Option.html#method.cloned |
| 190 | +[`btree_map::Entry::and_modify`]: https://doc.rust-lang.org/std/collections/btree_map/enum.Entry.html#method.and_modify |
| 191 | +[`fs::read_to_string`]: https://doc.rust-lang.org/std/fs/fn.read_to_string.html |
| 192 | +[`fs::read`]: https://doc.rust-lang.org/std/fs/fn.read.html |
| 193 | +[`fs::write`]: https://doc.rust-lang.org/std/fs/fn.write.html |
| 194 | +[`hash_map::Entry::and_modify`]: https://doc.rust-lang.org/std/collections/hash_map/enum.Entry.html#method.and_modify |
| 195 | +[`iter::FusedIterator`]: https://doc.rust-lang.org/std/iter/trait.FusedIterator.html |
| 196 | +[`ops::RangeInclusive`]: https://doc.rust-lang.org/std/ops/struct.RangeInclusive.html |
| 197 | +[`ops::RangeToInclusive`]: https://doc.rust-lang.org/std/ops/struct.RangeToInclusive.html |
| 198 | +[`process::id`]: https://doc.rust-lang.org/std/process/fn.id.html |
| 199 | +[`slice::rotate_left`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rotate_left |
| 200 | +[`slice::rotate_right`]: https://doc.rust-lang.org/std/primitive.slice.html#method.rotate_right |
| 201 | +[`String::retain`]: https://doc.rust-lang.org/std/string/struct.String.html#method.retain |
| 202 | +[cargo/5041]: https://github.com/rust-lang/cargo/pull/5041 |
| 203 | +[cargo/5083]: https://github.com/rust-lang/cargo/pull/5083 |
| 204 | +[cargo/5093]: https://github.com/rust-lang/cargo/pull/5093 |
| 205 | + |
| 206 | + |
1 | 207 | Version 1.25.0 (2018-03-29)
|
2 | 208 | ==========================
|
3 | 209 |
|
|
0 commit comments