Ржавчина 1.83.0: детализация изменений

Ржавчина 1.83.0: детализация изменений

14 июня 2025 г.

Команда Rust с радостью объявила о новой версии Rust, 1.83.0. Rust - это язык программирования, позволяющий всем создавать надежное и эффективное программное обеспечение.

Если у вас предыдущая версия Rust, установленная черезrustup, вы можете получить 1.83.0 с:

$ rustup update stable

Если у вас его еще нет, вы можетеполучатьrustupНа соответствующей странице на нашем веб -сайте и проверьтеПодробные заметки о выпуске для 1.83.0Полем

Если вы хотите помочь нам, тестируя будущие релизы, вы можете рассмотреть возможность обновления локально для использования бета -канала (rustup default beta) или ночной канал (rustup default nightly) ПожалуйстаотчетЛюбые ошибки, с которыми вы можете встретить!

Что в 1,83,0 стабильной

Новые возможности Const

Этот релиз включает в себя несколько больших расширений к тому, что может сделать код, работающий в контексте контекста. Это относится ко всему коду, который компилятор должен оценить во время компиляции: начальное значениеconstиstaticЭлементы, длины массива, дискриминантные значения перечисления, константные аргументы и функции, вызывшие из таких контекстов (const fn)

Ссылки на статику.Пока что кондиционеры, за исключением экспрессии инициализатораstaticПредмет был запрещен при ссылкеstaticпредметы. Это ограничение теперь поднято:

static S: i32 = 25;
const C: &i32 = &S;

Обратите внимание, однако, что чтение значения изменяемого или внутреннего изменяемого статического статика до сих пор не разрешено в контексте контекста.

Кроме того, конечное значение константы не может ссылаться на какую -либо измененную или внутреннюю изменчивую статику:

static mut S: i32 = 0;

const C1: i32 = unsafe { S };
// error: constant accesses mutable global memory

const C2: &i32 = unsafe { &S };
// error: encountered reference to mutable memory in `const`

Эти ограничения гарантируют, что константы все еще являются «постоянными»: значение, которое они оценивают, и их значение как шаблона (которая может включать в себя ссылки на приземление), будет одинаковым на протяжении всего выполнения программы.

Тем не менее, константа разрешена оценивать необработанное указатель, который указывает на изменяемый или внутренний измененный статический статик:

static mut S: i32 = 64;
const C: *mut i32 = &raw mut S;

Изменяемые ссылки и указатели.Теперь можно использовать изменяемые ссылки в контексте контекста:

const fn inc(x: &mut i32) {
    *x += 1;
}

const C: i32 = {
    let mut c = 41;
    inc(&mut c);
    c
};

Также поддерживаются изменяемые необработанные указатели и внутренняя изменчивость:

use std::cell::UnsafeCell;

const C: i32 = {
    let c = UnsafeCell::new(41);
    unsafe { *c.get() += 1 };
    c.into_inner()
};

Однако, изменяемые ссылки и указатели могут быть использованы тольковнутриВычисление постоянной, они не могут стать частью конечного значения константы:

const C: &mut i32 = &mut 4;
// error[E0764]: mutable references are not allowed in the final value of constants

Этот релиз также поставляется с целым пакетом новых функций, которые теперь стабильны в контексте констатации (см. Конец секции «стабилизированные API»).

Эти новые возможности и стабилизированные API не заблокируют совершенно новую категорию кода, которая будет выполнена в контексте Const, и мы рады увидеть, как экосистема ржавчины использует это!

Стабилизированные API

  • BufRead::skip_until
  • ControlFlow::break_value
  • ControlFlow::continue_value
  • ControlFlow::map_break
  • ControlFlow::map_continue
  • DebugList::finish_non_exhaustive
  • DebugMap::finish_non_exhaustive
  • DebugSet::finish_non_exhaustive
  • DebugTuple::finish_non_exhaustive
  • ErrorKind::ArgumentListTooLong
  • ErrorKind::Deadlock
  • ErrorKind::DirectoryNotEmpty
  • ErrorKind::ExecutableFileBusy
  • ErrorKind::FileTooLarge
  • ErrorKind::HostUnreachable
  • ErrorKind::IsADirectory
  • ErrorKind::NetworkDown
  • ErrorKind::NetworkUnreachable
  • ErrorKind::NotADirectory
  • ErrorKind::NotSeekable
  • ErrorKind::ReadOnlyFilesystem
  • ErrorKind::ResourceBusy
  • ErrorKind::StaleNetworkFileHandle
  • ErrorKind::StorageFull
  • ErrorKind::TooManyLinks
  • Option::get_or_insert_default
  • Waker::data
  • Waker::new
  • Waker::vtable
  • char::MIN
  • hash_map::Entry::insert_entry
  • hash_map::VacantEntry::insert_entry

Эти API теперь стабильны в контексте:

  • Cell::into_inner
  • Duration::as_secs_f32
  • Duration::as_secs_f64
  • Duration::div_duration_f32
  • Duration::div_duration_f64
  • MaybeUninit::as_mut_ptr
  • NonNull::as_mut
  • NonNull::copy_from
  • NonNull::copy_from_nonoverlapping
  • NonNull::copy_to
  • NonNull::copy_to_nonoverlapping
  • NonNull::slice_from_raw_parts
  • NonNull::write
  • NonNull::write_bytes
  • NonNull::write_unaligned
  • OnceCell::into_inner
  • Option::as_mut
  • Option::expect
  • Option::replace
  • Option::take
  • Option::unwrap
  • Option::unwrap_unchecked
  • Option::<&_>::copied
  • Option::<&mut _>::copied
  • Option::<Option<_>>::flatten
  • Option::<Result<_, _>>::transpose
  • RefCell::into_inner
  • Result::as_mut
  • Result::<&_, _>::copied
  • Result::<&mut _, _>::copied
  • Result::<Option<_>, _>::transpose
  • UnsafeCell::get_mut
  • UnsafeCell::into_inner
  • array::from_mut
  • char::encode_utf8
  • {float}::classify
  • {float}::is_finite
  • {float}::is_infinite
  • {float}::is_nan
  • {float}::is_normal
  • {float}::is_sign_negative
  • {float}::is_sign_positive
  • {float}::is_subnormal
  • {float}::from_bits
  • {float}::from_be_bytes
  • {float}::from_le_bytes
  • {float}::from_ne_bytes
  • {float}::to_bits
  • {float}::to_be_bytes
  • {float}::to_le_bytes
  • {float}::to_ne_bytes
  • mem::replace
  • ptr::replace
  • ptr::slice_from_raw_parts_mut
  • ptr::write
  • ptr::write_unaligned
  • <*const _>::copy_to
  • <*const _>::copy_to_nonoverlapping
  • <*mut _>::copy_from
  • <*mut _>::copy_from_nonoverlapping
  • <*mut _>::copy_to
  • <*mut _>::copy_to_nonoverlapping
  • <*mut _>::write
  • <*mut _>::write_bytes
  • <*mut _>::write_unaligned
  • slice::from_mut
  • slice::from_raw_parts_mut
  • <[_]>::first_mut
  • <[_]>::last_mut
  • <[_]>::first_chunk_mut
  • <[_]>::last_chunk_mut
  • <[_]>::split_at_mut
  • <[_]>::split_at_mut_checked
  • <[_]>::split_at_mut_unchecked
  • <[_]>::split_first_mut
  • <[_]>::split_last_mut
  • <[_]>::split_first_chunk_mut
  • <[_]>::split_last_chunk_mut
  • str::as_bytes_mut
  • str::as_mut_ptr
  • str::from_utf8_unchecked_mut

Другие изменения

Проверьте все, что изменилось вРжавчинаВГруз, иКлиппиПолем

Вкладчики в 1,83,0

Многие люди собрались вместе, чтобы создать ржавчину 1.83.0. Мы не могли бы сделать это без всех вас.Спасибо!


Команда релиза ржавчины

Также опубликованоздесь

ФотоJr KorpaнаНеспособный


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE