- Update to version 1.34.0
+ Language
- You can now use `#[deprecated = "reason"]` as a shorthand for
`#[deprecated(note = "reason")]`. This was previously allowed
by mistake but had no effect.
- You can now accept token streams in `#[attr()]`,`#[attr[]]`, and
`#[attr{}]` procedural macros.
- You can now write `extern crate self as foo;` to import your
crate's root into the extern prelude.
+ Compiler
- You can now target `riscv64imac-unknown-none-elf` and
`riscv64gc-unknown-none-elf`.
- You can now enable linker plugin LTO optimisations with
`-C linker-plugin-lto`. This allows rustc to compile your Rust
code into LLVM bitcode allowing LLVM to perform LTO optimisations
across C/C++ FFI boundaries.
- You can now target `powerpc64-unknown-freebsd`.
+ Libraries
- The trait bounds have been removed on some of `HashMap<K, V, S>`'s
and `HashSet<T, S>`'s basic methods. Most notably you no longer
require the `Hash` trait to create an iterator.
- The `Ord` trait bounds have been removed on some of
`BinaryHeap<T>`'s basic methods. Most notably you no longer require
the `Ord` trait to create an iterator.
- The methods `overflowing_neg` and `wrapping_neg` are now `const`
functions for all numeric types.
- Indexing a `str` is now generic over all types that
implement `SliceIndex<str>`.
- `str::trim`, `str::trim_matches`, `str::trim_{start, end}`, and
`str::trim_{start, end}_matches` are now `#[must_use]` and will
produce a warning if their returning type is unused.
- The methods `checked_pow`, `saturating_pow`, `wrapping_pow`, and
`overflowing_pow` are now available for all numeric types. These are
equivalvent to methods such as `wrapping_add` for the `pow` operation.
+ Stabilized APIs
- std & core
+ Any::type_id
+ Error::type_id
+ atomic::AtomicI16
+ atomic::AtomicI32
+ atomic::AtomicI64
+ atomic::AtomicI8
+ atomic::AtomicU16
+ atomic::AtomicU32
+ atomic::AtomicU64
+ atomic::AtomicU8
+ convert::Infallible
+ convert::TryFrom
+ convert::TryInto
+ iter::from_fn
+ iter::successors
+ num::NonZeroI128
+ num::NonZeroI16
+ num::NonZeroI32
+ num::NonZeroI64
+ num::NonZeroI8
+ num::NonZeroIsize
+ slice::sort_by_cached_key
+ str::escape_debug
+ str::escape_default
+ str::escape_unicode
+ str::split_ascii_whitespace
- std
+ Instant::checked_add
+ Instant::checked_sub
+ SystemTime::checked_add
+ SystemTime::checked_sub
+ Cargo
- You can now use alternative registries to crates.io.
+ Misc
- You can now use the `?` operator in your documentation
tests without manually adding `fn main() -> Result<(), _> {}`.
+ Compatibility Notes
- `Command::before_exec` is now deprecated in favor of the
unsafe method `Command::pre_exec`.
- Use of `ATOMIC_{BOOL, ISIZE, USIZE}_INIT` is now deprecated.
As you can now use `const` functions in `static` variables.
- Remove depreciated-trim_left_matches.patch.
- Rustfmt version bumped to 1.0.3
+ Change description not provided.
- rls version now in sync with rustc.
- Misc fixes to rust.spec
OBS-URL: https://build.opensuse.org/request/show/694642
OBS-URL: https://build.opensuse.org/package/show/devel:languages:rust/rust?expand=0&rev=213
- Use the system's LLVM in SLE15-SP1. That distribution has LLVM7,
and we need to use it there, instead of any other version.
- Prevent auto-provides from being created for things under
rustlibdir, so the RPM does not inadvertently have a Provides for a
bundled LLVM and the Rust library files.
- Sync changes files between SLE and openSUSE, for ease of maintenance.
OBS-URL: https://build.opensuse.org/request/show/688403
OBS-URL: https://build.opensuse.org/package/show/devel:languages:rust/rust?expand=0&rev=209
- Remove miri complete instead of excluding. This is experimental
and so should not be included.
- BuildRequires ccache in attempt to reduce compile times.
- Remove more extraneous directories from src that will never be
used.
- Extra patterns in rpmlintrc to catch more false positives:
+ Rust has no stable API, ignore SONAME warnings
+ Tool versions don't update in step with rust, ignore warnings
OBS-URL: https://build.opensuse.org/request/show/686253
OBS-URL: https://build.opensuse.org/package/show/devel:languages:rust/rust?expand=0&rev=202
- 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
- Update to version 1.32.0
- Language
+ 2018 edition
- You can now use the `?` operator in macro definitions. The `?`
operator allows you to specify zero or one repetitions similar to the `*` and
`+` operators.
- Module paths with no leading keyword like `super`, `self`, or `crate`, will
now always resolve to the item (`enum`, `struct`, etc.) available in the
module if present, before resolving to a external crate or an item the prelude.
E.g.
enum Color { Red, Green, Blue }
use Color::*;
+ All editions
- You can now match against `PhantomData<T>` types.
- You can now match against literals in macros with the `literal`
specifier. This will match against a literal of any type.
E.g. `1`, `'A'`, `"Hello World"`
- Self can now be used as a constructor and pattern for unit and tuple structs. E.g.
struct Point(i32, i32);
impl Point {
pub fn new(x: i32, y: i32) -> Self {
Self(x, y)
}
pub fn is_origin(&self) -> bool {
match self {
Self(0, 0) => true,
_ => false,
}
}
}
- Self can also now be used in type definitions. E.g.
enum List<T>
where
Self: PartialOrd<Self> // can write `Self` instead of `List<T>`
{
Nil,
Cons(T, Box<Self>) // likewise here
}
- You can now mark traits with `#[must_use]`. This provides a warning if
a `impl Trait` or `dyn Trait` is returned and unused in the program.
- Compiler
+ The default allocator has changed from jemalloc to the default allocator on
your system. The compiler itself on Linux & macOS will still use
jemalloc, but programs compiled with it will use the system allocator.
+ Added the `aarch64-pc-windows-msvc` target.
- Libraries
+ `PathBuf` now implements `FromStr`.
- `Box<[T]>` now implements `FromIterator<T>`.
- The `dbg!` macro has been stabilized. This macro enables you to
easily debug expressions in your rust program. E.g.
let a = 2;
let b = dbg!(a * 2) + 1;
// ^-- prints: [src/main.rs:4] a * 2 = 4
assert_eq!(b, 5);
+ The following APIs are now `const` functions and can be used in a
`const` context.
- `Cell::as_ptr`
- `UnsafeCell::get`
- `char::is_ascii`
- `iter::empty`
- `ManuallyDrop::new`
- `ManuallyDrop::into_inner`
- `RangeInclusive::start`
- `RangeInclusive::end`
- `NonNull::as_ptr`
- `slice::as_ptr`
- `str::as_ptr`
- `Duration::as_secs`
- `Duration::subsec_millis`
- `Duration::subsec_micros`
- `Duration::subsec_nanos`
- `CStr::as_ptr`
- `Ipv4Addr::is_unspecified`
- `Ipv6Addr::new`
- `Ipv6Addr::octets`
- Stabilized APIs
+ `i8::to_be_bytes`
+ `i8::to_le_bytes`
+ `i8::to_ne_bytes`
+ `i8::from_be_bytes`
+ `i8::from_le_bytes`
+ `i8::from_ne_bytes`
+ `i16::to_be_bytes`
+ `i16::to_le_bytes`
+ `i16::to_ne_bytes`
+ `i16::from_be_bytes`
+ `i16::from_le_bytes`
+ `i16::from_ne_bytes`
+ `i32::to_be_bytes`
+ `i32::to_le_bytes`
+ `i32::to_ne_bytes`
+ `i32::from_be_bytes`
+ `i32::from_le_bytes`
+ `i32::from_ne_bytes`
+ `i64::to_be_bytes`
+ `i64::to_le_bytes`
+ `i64::to_ne_bytes`
+ `i64::from_be_bytes`
+ `i64::from_le_bytes`
+ `i64::from_ne_bytes`
+ `i128::to_be_bytes`
+ `i128::to_le_bytes`
+ `i128::to_ne_bytes`
+ `i128::from_be_bytes`
+ `i128::from_le_bytes`
+ `i128::from_ne_bytes`
+ `isize::to_be_bytes`
+ `isize::to_le_bytes`
+ `isize::to_ne_bytes`
+ `isize::from_be_bytes`
+ `isize::from_le_bytes`
+ `isize::from_ne_bytes`
+ `u8::to_be_bytes`
+ `u8::to_le_bytes`
+ `u8::to_ne_bytes`
+ `u8::from_be_bytes`
+ `u8::from_le_bytes`
+ `u8::from_ne_bytes`
+ `u16::to_be_bytes`
+ `u16::to_le_bytes`
+ `u16::to_ne_bytes`
+ `u16::from_be_bytes`
+ `u16::from_le_bytes`
+ `u16::from_ne_bytes`
+ `u32::to_be_bytes`
+ `u32::to_le_bytes`
+ `u32::to_ne_bytes`
+ `u32::from_be_bytes`
+ `u32::from_le_bytes`
+ `u32::from_ne_bytes`
+ `u64::to_be_bytes`
+ `u64::to_le_bytes`
+ `u64::to_ne_bytes`
+ `u64::from_be_bytes`
+ `u64::from_le_bytes`
+ `u64::from_ne_bytes`
+ `u128::to_be_bytes`
+ `u128::to_le_bytes`
+ `u128::to_ne_bytes`
+ `u128::from_be_bytes`
+ `u128::from_le_bytes`
+ `u128::from_ne_bytes`
+ `usize::to_be_bytes`
+ `usize::to_le_bytes`
+ `usize::to_ne_bytes`
+ `usize::from_be_bytes`
+ `usize::from_le_bytes`
+ `usize::from_ne_bytes`
- Cargo
+ You can now run `cargo c` as an alias for `cargo check`.][cargo/6218]
+ Usernames are now allowed in alt registry URLs.][cargo/6242]
- Misc
+ `libproc_macro` has been added to the `rust-src` distribution.
- Compatibility Notes
+ The argument types for AVX's
`_mm256_stream_si256`, `_mm256_stream_pd`, `_mm256_stream_ps` have
been changed from `*const` to `*mut` as the previous implementation
was unsound.
OBS-URL: https://build.opensuse.org/request/show/667330
OBS-URL: https://build.opensuse.org/package/show/devel:languages:rust/rust?expand=0&rev=179
- Update to version 1.31.0
+ Language
- This version marks the release of the 2018 edition of Rust.
- New lifetime elision rules now allow for eliding lifetimes in functions and
impl headers. E.g. `impl<'a> Reader for BufReader<'a> {}` can now be
`impl Reader for BufReader<'_> {}`. Lifetimes are still required to be defined
in structs.
- You can now define and use `const` functions. These are currently
a strict minimal subset of the const fn RFC. Refer to the
[language reference][const-reference] for what exactly is available.
- You can now use tool lints, which allow you to scope lints from external
tools using attributes. E.g. `#[allow(clippy::filter_map)]`.
- `#[no_mangle]` and `#[export_name]` attributes can now be located anywhere in
a crate, not just in exported functions.
- You can now use parentheses in pattern matches.
+ Compiler
- Updated musl to 1.1.20
+ Libraries
- You can now convert `num::NonZero*` types to their raw equivalvents using the
`From` trait. E.g. `u8` now implements `From<NonZeroU8>`.
- You can now convert a `&Option<T>` into `Option<&T>` and `&mut Option<T>`
into `Option<&mut T>` using the `From` trait.
- You can now multiply (`*`) a `time::Duration` by a `u32`.
+ Stabilized APIs
- `slice::align_to`
- `slice::align_to_mut`
- `slice::chunks_exact`
- `slice::chunks_exact_mut`
- `slice::rchunks`
- `slice::rchunks_mut`
- `slice::rchunks_exact`
- `slice::rchunks_exact_mut`
- `Option::replace`
+ Cargo
- Cargo will now download crates in parallel using HTTP/2.
- You can now rename packages in your Cargo.toml We have a guide
on how to use the `package` key in your dependencies.
OBS-URL: https://build.opensuse.org/request/show/656172
OBS-URL: https://build.opensuse.org/package/show/devel:languages:rust/rust?expand=0&rev=174