- Update to version 1.33.0
+ Language
- You can now use the `cfg(target_vendor)` attribute. E.g.
`#[cfg(target_vendor="linux")] fn main() { println!("Hello Linux!"); }`
- Integer patterns such as in a match expression can now be exhaustive.
E.g. You can have match statement on a `u8` that covers `0..=255` and
you would no longer be required to have a `_ => unreachable!()` case.
- You can now have multiple patterns in `if let` and `while let`
expressions. You can do this with the same syntax as a `match`
expression. E.g.
```
enum Creature {
Crab(String),
Lobster(String),
Person(String),
}
fn main() {
let state = Creature::Crab("Ferris");
if let Creature::Crab(name) | Creature::Person(name) = state {
println!("This creature's name is: {}", name);
}
}
```
- You can now have irrefutable `if let` and `while let` patterns. Using
this feature will by default produce a warning as this behaviour can be
unintuitive. E.g. `if let _ = 5 {}`
- You can now use `let` bindings, assignments, expression statements,
and irrefutable pattern destructuring in const functions.
- You can now call unsafe const functions. E.g.
```
const unsafe fn foo() -> i32 { 5 }
const fn bar() -> i32 {
unsafe { foo() }
}
```
- You can now specify multiple attributes in a `cfg_attr` attribute.
E.g. `#[cfg_attr(all(), must_use, optimize)]`
- You can now specify a specific alignment with the `#[repr(packed)]`
attribute. E.g. `#[repr(packed(2))] struct Foo(i16, i32);` is a struct
with an alignment of 2 bytes and a size of 6 bytes.
- You can now import an item from a module as an `_`. This allows you to
import a trait's impls, and not have the name in the namespace. E.g.
```
use std::io::Read as _;
// Allowed as there is only one `Read` in the module.
pub trait Read {}
```
- extern` functions will now abort by default when panicking.
This was previously undefined behaviour.
+ Compiler
- You can now set a linker flavor for `rustc` with the `-Clinker-flavor`
command line argument.
- The mininum required LLVM version has been bumped to 6.0.
- Added support for the PowerPC64 architecture on FreeBSD.
- The `x86_64-fortanix-unknown-sgx` target support has been upgraded to
tier 2 support. Visit the [platform support][platform-support] page for
information on Rust's platform support.
- Added support for the `thumbv7neon-linux-androideabi` and
`thumbv7neon-unknown-linux-gnueabihf` targets.
- Added support for the `x86_64-unknown-uefi` target.
+ Libraries
- The methods `overflowing_{add, sub, mul, shl, shr}` are now `const`
functions for all numeric types.
- The methods `rotate_left`, `rotate_right`, and `wrapping_{add, sub, mul, shl, shr}`
are now `const` functions for all numeric types.
- The methods `is_positive` and `is_negative` are now `const` functions for
all signed numeric types.
- The `get` method for all `NonZero` types is now `const`.
- The methods `count_ones`, `count_zeros`, `leading_zeros`, `trailing_zeros`,
`swap_bytes`, `from_be`, `from_le`, `to_be`, `to_le` are now `const` for all
numeric types.
- Ipv4Addr::new` is now a `const` function
+ Stabilized APIs
- unix::FileExt::read_exact_at
- unix::FileExt::write_all_at
- Option::transpose
- Result::transpose
- convert::identity
- pin::Pin
- marker::Unpin
- marker::PhantomPinned
- Vec::resize_with
- VecDeque::resize_with
- Duration::as_millis
- Duration::as_micros
- Duration::as_nanos
+ Cargo
- Cargo should now rebuild a crate if a file was modified during the initial
build.][cargo/6484]
+ Compatibility Notes
- The methods `str::{trim_left, trim_right, trim_left_matches, trim_right_matches}`
are now deprecated in the standard library, and their usage will now produce a warning.
Please use the `str::{trim_start, trim_end, trim_start_matches, trim_end_matches}`
methods instead.
OBS-URL: https://build.opensuse.org/request/show/681133
OBS-URL: https://build.opensuse.org/package/show/devel:languages:rust/rust?expand=0&rev=196