| 
 | 1 | +Version 1.34.0 (2019-04-11)  | 
 | 2 | +==========================  | 
 | 3 | + | 
 | 4 | +Language  | 
 | 5 | +--------  | 
 | 6 | +- [You can now use `#[deprecated = "reason"]`][58166] as a shorthand for  | 
 | 7 | +  `#[deprecated(note = "reason")]`. This was previously allowed by mistake  | 
 | 8 | +  but had no effect.  | 
 | 9 | +- [You can now accept token streams in `#[attr()]`,`#[attr[]]`, and  | 
 | 10 | +  `#[attr{}]` procedural macros.][57367]  | 
 | 11 | +- [You can now write `extern crate self as foo;`][57407] to import your  | 
 | 12 | +  crate's root into the extern prelude.  | 
 | 13 | + | 
 | 14 | + | 
 | 15 | +Compiler  | 
 | 16 | +--------  | 
 | 17 | +- [You can now target `riscv64imac-unknown-none-elf` and  | 
 | 18 | +  `riscv64gc-unknown-none-elf`.][58406]  | 
 | 19 | +- [You can now enable linker plugin LTO optimisations with  | 
 | 20 | +  `-C linker-plugin-lto`.][58057] This allows rustc to compile your Rust code  | 
 | 21 | +  into LLVM bitcode allowing LLVM to perform LTO optimisations across C/C++ FFI  | 
 | 22 | +  boundaries.  | 
 | 23 | +- [You can now target `powerpc64-unknown-freebsd`.][57809]  | 
 | 24 | + | 
 | 25 | + | 
 | 26 | +Libraries  | 
 | 27 | +---------  | 
 | 28 | +- [The trait bounds have been removed on some of `HashMap<K, V, S>`'s and  | 
 | 29 | +  `HashSet<T, S>`'s basic methods.][58370] Most notably you no longer require  | 
 | 30 | +  the `Hash` trait to create an iterator.  | 
 | 31 | +- [The `Ord` trait bounds have been removed on some of `BinaryHeap<T>`'s basic  | 
 | 32 | +  methods.][58421] Most notably you no longer require the `Ord` trait to create  | 
 | 33 | +  an iterator.  | 
 | 34 | +- [The methods `overflowing_neg` and `wrapping_neg` are now `const` functions  | 
 | 35 | +  for all numeric types.][58044]  | 
 | 36 | +- [Indexing a `str` is now generic over all types that  | 
 | 37 | +  implement `SliceIndex<str>`.][57604]  | 
 | 38 | +- [`str::trim`, `str::trim_matches`, `str::trim_{start, end}`, and  | 
 | 39 | +  `str::trim_{start, end}_matches` are now `#[must_use]`][57106] and will  | 
 | 40 | +  produce a warning if their returning type is unused.  | 
 | 41 | +- [The methods `checked_pow`, `saturating_pow`, `wrapping_pow`, and  | 
 | 42 | +  `overflowing_pow` are now available for all numeric types.][57873] These are  | 
 | 43 | +  equivalvent to methods such as `wrapping_add` for the `pow` operation.  | 
 | 44 | + | 
 | 45 | + | 
 | 46 | +Stabilized APIs  | 
 | 47 | +---------------  | 
 | 48 | + | 
 | 49 | +#### std & core  | 
 | 50 | +* [`Any::type_id`]  | 
 | 51 | +* [`Error::type_id`]  | 
 | 52 | +* [`atomic::AtomicI16`]  | 
 | 53 | +* [`atomic::AtomicI32`]  | 
 | 54 | +* [`atomic::AtomicI64`]  | 
 | 55 | +* [`atomic::AtomicI8`]  | 
 | 56 | +* [`atomic::AtomicU16`]  | 
 | 57 | +* [`atomic::AtomicU32`]  | 
 | 58 | +* [`atomic::AtomicU64`]  | 
 | 59 | +* [`atomic::AtomicU8`]  | 
 | 60 | +* [`convert::Infallible`]  | 
 | 61 | +* [`convert::TryFrom`]  | 
 | 62 | +* [`convert::TryInto`]  | 
 | 63 | +* [`iter::from_fn`]  | 
 | 64 | +* [`iter::successors`]  | 
 | 65 | +* [`num::NonZeroI128`]  | 
 | 66 | +* [`num::NonZeroI16`]  | 
 | 67 | +* [`num::NonZeroI32`]  | 
 | 68 | +* [`num::NonZeroI64`]  | 
 | 69 | +* [`num::NonZeroI8`]  | 
 | 70 | +* [`num::NonZeroIsize`]  | 
 | 71 | +* [`slice::sort_by_cached_key`]  | 
 | 72 | +* [`str::escape_debug`]  | 
 | 73 | +* [`str::escape_default`]  | 
 | 74 | +* [`str::escape_unicode`]  | 
 | 75 | +* [`str::split_ascii_whitespace`]  | 
 | 76 | + | 
 | 77 | +#### std  | 
 | 78 | +* [`Instant::checked_add`]  | 
 | 79 | +* [`Instant::checked_sub`]  | 
 | 80 | +* [`SystemTime::checked_add`]  | 
 | 81 | +* [`SystemTime::checked_sub`]  | 
 | 82 | + | 
 | 83 | +Cargo  | 
 | 84 | +-----  | 
 | 85 | +- [You can now use alternative registries to crates.io.][cargo/6654]  | 
 | 86 | + | 
 | 87 | +Misc  | 
 | 88 | +----  | 
 | 89 | +- [You can now use the `?` operator in your documentation tests without manually  | 
 | 90 | +  adding `fn main() -> Result<(), _> {}`.][56470]  | 
 | 91 | + | 
 | 92 | +Compatibility Notes  | 
 | 93 | +-------------------  | 
 | 94 | +- [`Command::before_exec` is now deprecated in favor of the  | 
 | 95 | +  unsafe method `Command::pre_exec`.][58059]  | 
 | 96 | +- [Use of `ATOMIC_{BOOL, ISIZE, USIZE}_INIT` is now deprecated.][57425] As you  | 
 | 97 | +  can now use `const` functions in `static` variables.  | 
 | 98 | + | 
 | 99 | +[58370]: https://github.com/rust-lang/rust/pull/58370/  | 
 | 100 | +[58406]: https://github.com/rust-lang/rust/pull/58406/  | 
 | 101 | +[58421]: https://github.com/rust-lang/rust/pull/58421/  | 
 | 102 | +[58166]: https://github.com/rust-lang/rust/pull/58166/  | 
 | 103 | +[58044]: https://github.com/rust-lang/rust/pull/58044/  | 
 | 104 | +[58057]: https://github.com/rust-lang/rust/pull/58057/  | 
 | 105 | +[58059]: https://github.com/rust-lang/rust/pull/58059/  | 
 | 106 | +[57809]: https://github.com/rust-lang/rust/pull/57809/  | 
 | 107 | +[57873]: https://github.com/rust-lang/rust/pull/57873/  | 
 | 108 | +[57604]: https://github.com/rust-lang/rust/pull/57604/  | 
 | 109 | +[57367]: https://github.com/rust-lang/rust/pull/57367/  | 
 | 110 | +[57407]: https://github.com/rust-lang/rust/pull/57407/  | 
 | 111 | +[57425]: https://github.com/rust-lang/rust/pull/57425/  | 
 | 112 | +[57106]: https://github.com/rust-lang/rust/pull/57106/  | 
 | 113 | +[56470]: https://github.com/rust-lang/rust/pull/56470/  | 
 | 114 | +[cargo/6654]: https://github.com/rust-lang/cargo/pull/6654/  | 
 | 115 | +[`Any::type_id`]: https://doc.rust-lang.org/std/any/trait.Any.html#tymethod.type_id  | 
 | 116 | +[`Error::type_id`]: https://doc.rust-lang.org/std/error/trait.Error.html#tymethod.type_id  | 
 | 117 | +[`atomic::AtomicI16`]: https://doc.rust-lang.org/std/atomic/struct.AtomicI16.html  | 
 | 118 | +[`atomic::AtomicI32`]: https://doc.rust-lang.org/std/atomic/struct.AtomicI32.html  | 
 | 119 | +[`atomic::AtomicI64`]: https://doc.rust-lang.org/std/atomic/struct.AtomicI64.html  | 
 | 120 | +[`atomic::AtomicI8`]: https://doc.rust-lang.org/std/atomic/struct.AtomicI8.html  | 
 | 121 | +[`atomic::AtomicU16`]: https://doc.rust-lang.org/std/atomic/struct.AtomicU16.html  | 
 | 122 | +[`atomic::AtomicU32`]: https://doc.rust-lang.org/std/atomic/struct.AtomicU32.html  | 
 | 123 | +[`atomic::AtomicU64`]: https://doc.rust-lang.org/std/atomic/struct.AtomicU64.html  | 
 | 124 | +[`atomic::AtomicU8`]: https://doc.rust-lang.org/std/atomic/struct.AtomicU8.html  | 
 | 125 | +[`convert::Infallible`]: https://doc.rust-lang.org/std/convert/enum.Infallible.html  | 
 | 126 | +[`convert::TryFrom`]: https://doc.rust-lang.org/std/convert/trait.TryFrom.html  | 
 | 127 | +[`convert::TryInto`]: https://doc.rust-lang.org/std/convert/trait.TryInto.html  | 
 | 128 | +[`iter::from_fn`]: https://doc.rust-lang.org/std/iter/fn.from_fn.html  | 
 | 129 | +[`iter::successors`]: https://doc.rust-lang.org/std/iter/fn.successors.html  | 
 | 130 | +[`num::NonZeroI128`]: https://doc.rust-lang.org/std/num/struct.NonZeroI128.html  | 
 | 131 | +[`num::NonZeroI16`]: https://doc.rust-lang.org/std/num/struct.NonZeroI16.html  | 
 | 132 | +[`num::NonZeroI32`]: https://doc.rust-lang.org/std/num/struct.NonZeroI32.html  | 
 | 133 | +[`num::NonZeroI64`]: https://doc.rust-lang.org/std/num/struct.NonZeroI64.html  | 
 | 134 | +[`num::NonZeroI8`]: https://doc.rust-lang.org/std/num/struct.NonZeroI8.html  | 
 | 135 | +[`num::NonZeroIsize`]: https://doc.rust-lang.org/std/num/struct.NonZeroIsize.html  | 
 | 136 | +[`slice::sort_by_cached_key`]: https://doc.rust-lang.org/std/slice/fn.sort_by_cached_key  | 
 | 137 | +[`str::escape_debug`]: https://doc.rust-lang.org/std/primitive.str.html#method.escape_debug  | 
 | 138 | +[`str::escape_default`]: https://doc.rust-lang.org/std/primitive.str.html#method.escape_default  | 
 | 139 | +[`str::escape_unicode`]: https://doc.rust-lang.org/std/primitive.str.html#method.escape_unicode  | 
 | 140 | +[`str::split_ascii_whitespace`]: https://doc.rust-lang.org/std/primitive.str.html#method.split_ascii_whitespace  | 
 | 141 | +[`Instant::checked_add`]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.checked_add  | 
 | 142 | +[`Instant::checked_sub`]: https://doc.rust-lang.org/std/time/struct.Instant.html#method.checked_sub  | 
 | 143 | +[`SystemTime::checked_add`]: https://doc.rust-lang.org/std/time/struct.SystemTime.html#method.checked_add  | 
 | 144 | +[`SystemTime::checked_sub`]: https://doc.rust-lang.org/std/time/struct.SystemTime.html#method.checked_sub  | 
 | 145 | + | 
 | 146 | + | 
1 | 147 | Version 1.33.0 (2019-02-28)  | 
2 | 148 | ==========================  | 
3 | 149 | 
 
  | 
@@ -99,6 +245,8 @@ Stabilized APIs  | 
99 | 245 | 
 
  | 
100 | 246 | Cargo  | 
101 | 247 | -----  | 
 | 248 | +- [You can now publish crates that require a feature flag to compile with  | 
 | 249 | +  `cargo publish --features` or `cargo publish --all-features`.][cargo/6453]  | 
102 | 250 | - [Cargo should now rebuild a crate if a file was modified during the initial  | 
103 | 251 |   build.][cargo/6484]  | 
104 | 252 | 
 
  | 
@@ -135,6 +283,7 @@ Compatibility Notes  | 
135 | 283 | [57535]: https://github.com/rust-lang/rust/pull/57535/  | 
136 | 284 | [57566]: https://github.com/rust-lang/rust/pull/57566/  | 
137 | 285 | [57615]: https://github.com/rust-lang/rust/pull/57615/  | 
 | 286 | +[cargo/6453]: https://github.com/rust-lang/cargo/pull/6453/  | 
138 | 287 | [cargo/6484]: https://github.com/rust-lang/cargo/pull/6484/  | 
139 | 288 | [`unix::FileExt::read_exact_at`]: https://doc.rust-lang.org/std/os/unix/fs/trait.FileExt.html#method.read_exact_at  | 
140 | 289 | [`unix::FileExt::write_all_at`]: https://doc.rust-lang.org/std/os/unix/fs/trait.FileExt.html#method.write_all_at  | 
 | 
0 commit comments