| 
 | 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