Опубликован следующий стабильный релиз компилятора и стандарта языка Rust.
В этой версии добавлены следующие возможности:
- Синтаксис для описания функций без пролога и эпилога. Тело таких функций обязано состоять из
naked_asm!
блока :
#[unsafe(naked)]
pub unsafe extern "sysv64" fn wrapping_add(a: u64, b: u64) -> u64 {
// Equivalent to `a.wrapping_add(b)`.
core::arch::naked_asm!(
"lea rax, [rdi + rsi]",
"ret"
);
}
- Возможность объявлять две и более переменных в условных выражениях
if
/while
:
if let Channel::Stable(v) = release_info()
&& let Semver { major, minor, .. } = v
&& major == 1
&& minor == 88
{
println!("`let_chains` was stabilized in this version");
}
-
В DSL для условной компиляции
cfg
добавлены константыtrue
иfalse
, которые так же стали доступны в макросеcfg!
. -
Добавлено предупреждение о попытке обращения к нулевому указателю для функций, чьи инварианты корректной работы требуют не нулевых адресов. К примеру попытка сконструировать объект
std::slice
по нулевому адресу:
// Undefined behavior
unsafe { std::slice::from_raw_parts(ptr::null(), 1); }
приведёт к выдаче сообщения. По умолчанию это предупреждение имеет уровень deny-by-default
, то есть будет рассмотрено компилятором как ошибка.
Все нововведения перечислены в списке изменений.