A equipe de ferrugem está feliz em anunciar uma nova versão do Rust, 1.83.0. A ferrugem é uma linguagem de programação que capacita todos a criar software program confiável e eficiente.
Se você tem uma versão anterior do Rust instalado through rustup
você pode obter 1.83.0 com:
$ rustup replace steady
Se você ainda não o tem, você pode obter rustup
Na página apropriada em nosso web site e confira as notas de lançamento detalhadas para 1.83.0.
Se você quiser nos ajudar testando lançamentos futuros, considere atualizar localmente para usar o canal beta (rustup default beta
) ou o canal noturno (rustup default nightly
). Por favor, relate todos os bugs que você pode encontrar!
O que há em 1.83.0 estável
Novos recursos const
Esta versão inclui várias extensões grandes para o que o código em execução em contextos constantes pode fazer. Isso se refere a todo o código que o compilador deve avaliar em tempo de compilação: o valor inicial de const
e static
Itens, comprimentos de matriz, valores discriminantes em enum, argumentos genéricos const e funções chamáveis de tais contextos (const fn
).
Referências à estática. Até agora, contextos constantes, exceto pela expressão inicializadora de um static
o merchandise foi proibido de referenciar static
Unid. Essa limitação já foi levantada:
static S: i32 = 25;
const C: &i32 = &S;
Observe, no entanto, que a leitura do valor de uma estática mutável ou inside ainda não é permitida em contextos constantes.
Além disso, o valor last de uma constante não pode referir nenhuma estática mutável ou inside mutável:
static mut S: i32 = 0;
const C1: i32 = unsafe { S };
// error: fixed accesses mutable world reminiscence
const C2: &i32 = unsafe { &S };
// error: encountered reference to mutable reminiscence in `const`
Essas limitações garantem que as constantes ainda sejam “constantes”: o valor que avaliam e seu significado como um padrão (que pode envolver referências de desreferência), será o mesmo ao longo de toda a execução do programa.
Dito isto, uma constante pode avaliar um ponteiro bruto que aponta para uma estática mutável ou inside mutável:
static mut S: i32 = 64;
const C: *mut i32 = &uncooked mut S;
Referências e indicadores mutáveis. Agora é possível usar referências mutáveis em contextos constantes:
const fn inc(x: &mut i32) {
*x += 1;
}
const C: i32 = {
let mut c = 41;
inc(&mut c);
c
};
Ponteiros crus mutáveis e mutabilidade inside também são suportados:
use std::cell::UnsafeCell;
const C: i32 = {
let c = UnsafeCell::new(41);
unsafe { *c.get() += 1 };
c.into_inner()
};
No entanto, referências e ponteiros mutáveis só podem ser usados dentro O cálculo de uma constante, eles não podem se tornar parte do valor last da constante:
const C: &mut i32 = &mut 4;
// error[E0764]: mutable references should not allowed within the last worth of constants
Esta versão também é enviada com uma sacola inteira de novas funções que agora são estáveis em contextos constantes (consulte o last da seção “APIs estabilizadas”).
Esses novos recursos e APIs estabilizadas desbloqueam uma nova e nova categoria de código a ser executada em contextos const const, e estamos animados em ver como o ecossistema de ferrugem fará uso disso!
APIs estabilizadas
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::Impasse
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
Possibility::get_or_insert_default
Waker::knowledge
Waker::new
Waker::vtable
char::MIN
hash_map::Entry::insert_entry
hash_map::VacantEntry::insert_entry
Essas APIs agora estão estáveis em contextos constantes:
Cell::into_inner
Length::as_secs_f32
Length::as_secs_f64
Length::div_duration_f32
Length::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
Possibility::as_mut
Possibility::count on
Possibility::exchange
Possibility::take
Possibility::unwrap
Possibility::unwrap_unchecked
Possibility::<&_>::copied
Possibility::<&mut _>::copied
Possibility::
Possibility::
>::transpose RefCell::into_inner
Consequence::as_mut
Consequence::<&_, _>::copied
Consequence::<&mut _, _>::copied
Consequence::
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::exchange
ptr::exchange
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
Outras mudanças
Confira tudo o que mudou em ferrugem, carga e clippy.
Contribuintes para 1.83.0
Muitas pessoas se uniram para criar ferrugem 1.83.0. Não poderíamos ter feito isso sem todos vocês. Obrigado!
A equipe de liberação da ferrugem
Também publicado aqui
Foto de Jr Korpa no Unsplash