
Ржавчина 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наНеспособный
Оригинал