|
| 1 | +Version 1.50.0 (2021-02-11) |
| 2 | +============================ |
| 3 | + |
| 4 | +Language |
| 5 | +----------------------- |
| 6 | +- [You can now use `const` values for `x` in `[x; N]` array expressions.][79270] |
| 7 | + This has been technically possible since 1.38.0, as it was unintentionally stabilized. |
| 8 | +- [Assignments to `ManuallyDrop<T>` union fields are now considered safe.][78068] |
| 9 | + |
| 10 | +Compiler |
| 11 | +----------------------- |
| 12 | +- [Added tier 3\* support for the `armv5te-unknown-linux-uclibceabi` target.][78142] |
| 13 | +- [Added tier 3 support for the `aarch64-apple-ios-macabi` target.][77484] |
| 14 | +- [The `x86_64-unknown-freebsd` is now built with the full toolset.][79484] |
| 15 | + |
| 16 | +\* Refer to Rust's [platform support page][forge-platform-support] for more |
| 17 | +information on Rust's tiered platform support. |
| 18 | + |
| 19 | +Libraries |
| 20 | +----------------------- |
| 21 | + |
| 22 | +- [`proc_macro::Punct` now implements `PartialEq<char>`.][78636] |
| 23 | +- [`ops::{Index, IndexMut}` are now implemented for fixed sized arrays of any length.][74989] |
| 24 | +- [On Unix platforms, the `std::fs::File` type now has a "niche" of `-1`.][74699] |
| 25 | + This value cannot be a valid file descriptor, and now means `Option<File>` takes |
| 26 | + up the same amount of space as `File`. |
| 27 | + |
| 28 | +Stabilized APIs |
| 29 | +--------------- |
| 30 | + |
| 31 | +- [`bool::then`] |
| 32 | +- [`btree_map::Entry::or_insert_with_key`] |
| 33 | +- [`f32::clamp`] |
| 34 | +- [`f64::clamp`] |
| 35 | +- [`hash_map::Entry::or_insert_with_key`] |
| 36 | +- [`Ord::clamp`] |
| 37 | +- [`RefCell::take`] |
| 38 | +- [`slice::fill`] |
| 39 | +- [`UnsafeCell::get_mut`] |
| 40 | + |
| 41 | +The following previously stable methods are now `const`. |
| 42 | + |
| 43 | +- [`IpAddr::is_ipv4`] |
| 44 | +- [`IpAddr::is_ipv6`] |
| 45 | +- [`Layout::size`] |
| 46 | +- [`Layout::align`] |
| 47 | +- [`Layout::from_size_align`] |
| 48 | +- `pow` for all integer types. |
| 49 | +- `checked_pow` for all integer types. |
| 50 | +- `saturating_pow` for all integer types. |
| 51 | +- `wrapping_pow` for all integer types. |
| 52 | +- `next_power_of_two` for all unsigned integer types. |
| 53 | +- `checked_power_of_two` for all unsigned integer types. |
| 54 | + |
| 55 | +Cargo |
| 56 | +----------------------- |
| 57 | + |
| 58 | +- [Added the `[build.rustc-workspace-wrapper]` option.][cargo/8976] |
| 59 | + This option sets a wrapper to execute instead of `rustc`, for workspace members only. |
| 60 | +- [`cargo:rerun-if-changed` will now, if provided a directory, scan the entire |
| 61 | + contents of that directory for changes.][cargo/8973] |
| 62 | +- [Added the `--workspace` flag to the `cargo update` command.][cargo/8725] |
| 63 | + |
| 64 | +Misc |
| 65 | +---- |
| 66 | + |
| 67 | +- [The search results tab and the help button are focusable with keyboard in rustdoc.][79896] |
| 68 | +- [Running tests will now print the total time taken to execute.][75752] |
| 69 | + |
| 70 | +Compatibility Notes |
| 71 | +------------------- |
| 72 | + |
| 73 | +- [The `compare_and_swap` method on atomics has been deprecated.][79261] It's |
| 74 | + recommended to use the `compare_exchange` and `compare_exchange_weak` methods instead. |
| 75 | +- [Changes in how `TokenStream`s are checked have fixed some cases where you could write |
| 76 | + unhygenic `macro_rules!` macros.][79472] |
| 77 | +- [`#![test]` as an inner attribute is now considered unstable like other inner macro |
| 78 | + attributes, and reports an error by default through the `soft_unstable` lint.][79003] |
| 79 | +- [Overriding a `forbid` lint at the same level that it was set is now a hard error.][78864] |
| 80 | +- [Dropped support for all cloudabi targets.][78439] |
| 81 | +- [You can no longer intercept `panic!` calls by supplying your own macro.][78343] It's |
| 82 | + recommended to use the `#[panic_handler]` attribute to provide your own implementation. |
| 83 | +- [Semi-colons after item statements (e.g. `struct Foo {};`) now produce a warning.][78296] |
| 84 | + |
| 85 | +[74989]: https://github.com/rust-lang/rust/pull/74989 |
| 86 | +[79261]: https://github.com/rust-lang/rust/pull/79261 |
| 87 | +[79896]: https://github.com/rust-lang/rust/pull/79896 |
| 88 | +[79484]: https://github.com/rust-lang/rust/pull/79484 |
| 89 | +[79472]: https://github.com/rust-lang/rust/pull/79472 |
| 90 | +[79270]: https://github.com/rust-lang/rust/pull/79270 |
| 91 | +[79003]: https://github.com/rust-lang/rust/pull/79003 |
| 92 | +[78864]: https://github.com/rust-lang/rust/pull/78864 |
| 93 | +[78636]: https://github.com/rust-lang/rust/pull/78636 |
| 94 | +[78439]: https://github.com/rust-lang/rust/pull/78439 |
| 95 | +[78343]: https://github.com/rust-lang/rust/pull/78343 |
| 96 | +[78296]: https://github.com/rust-lang/rust/pull/78296 |
| 97 | +[78068]: https://github.com/rust-lang/rust/pull/78068 |
| 98 | +[75752]: https://github.com/rust-lang/rust/pull/75752 |
| 99 | +[74699]: https://github.com/rust-lang/rust/pull/74699 |
| 100 | +[78142]: https://github.com/rust-lang/rust/pull/78142 |
| 101 | +[77484]: https://github.com/rust-lang/rust/pull/77484 |
| 102 | +[cargo/8976]: https://github.com/rust-lang/cargo/pull/8976 |
| 103 | +[cargo/8973]: https://github.com/rust-lang/cargo/pull/8973 |
| 104 | +[cargo/8725]: https://github.com/rust-lang/cargo/pull/8725 |
| 105 | +[`IpAddr::is_ipv4`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_ipv4 |
| 106 | +[`IpAddr::is_ipv6`]: https://doc.rust-lang.org/stable/std/net/enum.IpAddr.html#method.is_ipv6 |
| 107 | +[`Layout::align`]: https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.align |
| 108 | +[`Layout::from_size_align`]: https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.from_size_align |
| 109 | +[`Layout::size`]: https://doc.rust-lang.org/stable/std/alloc/struct.Layout.html#method.size |
| 110 | +[`Ord::clamp`]: https://doc.rust-lang.org/stable/std/cmp/trait.Ord.html#method.clamp |
| 111 | +[`RefCell::take`]: https://doc.rust-lang.org/stable/std/cell/struct.RefCell.html#method.take |
| 112 | +[`UnsafeCell::get_mut`]: https://doc.rust-lang.org/stable/std/cell/struct.UnsafeCell.html#method.get_mut |
| 113 | +[`bool::then`]: https://doc.rust-lang.org/stable/std/primitive.bool.html#method.then |
| 114 | +[`btree_map::Entry::or_insert_with_key`]: https://doc.rust-lang.org/stable/std/collections/btree_map/enum.Entry.html#method.or_insert_with_key |
| 115 | +[`f32::clamp`]: https://doc.rust-lang.org/stable/std/primitive.f32.html#method.clamp |
| 116 | +[`f64::clamp`]: https://doc.rust-lang.org/stable/std/primitive.f64.html#method.clamp |
| 117 | +[`hash_map::Entry::or_insert_with_key`]: https://doc.rust-lang.org/stable/std/collections/hash_map/enum.Entry.html#method.or_insert_with_key |
| 118 | +[`slice::fill`]: https://doc.rust-lang.org/stable/std/primitive.slice.html#method.fill |
| 119 | + |
| 120 | + |
1 | 121 | Version 1.49.0 (2020-12-31)
|
2 | 122 | ============================
|
3 | 123 |
|
|
0 commit comments