A linguaxe de programación Rust 1.91, fundada polo proxecto Mozilla pero agora desenvolvida baixo os auspicios da organización independente sen ánimo de lucro Rust Foundation, foi lanzada. A linguaxe céntrase na seguridade da memoria e proporciona ferramentas para lograr un alto paralelismo na execución de tarefas, ao mesmo tempo que prescinde do uso dun colector de lixo e do tempo de execución (o tempo de execución redúcese á inicialización básica e ao mantemento da biblioteca estándar).
Os métodos de manexo da memoria de Rust salvan ao desenvolvedor de erros ao manipular os punteiros e protexen contra os problemas que xurdan debido ao manexo de memoria de baixo nivel, como acceder a unha área de memoria despois de liberarse, desreferenciar punteiros nulos, exceder o búfer, etc. Para distribuír bibliotecas, proporcionar compilacións e xestionar dependencias, o proxecto desenvolve o xestor de paquetes Cargo. O repositorio crates.io é compatible para hospedar bibliotecas.
A seguridade da memoria ofrécese en Rust no momento da compilación mediante a comprobación de referencias, o seguimento da propiedade do obxecto, o seguimento da vida útil dos obxectos (ámbitos) e a avaliación da corrección do acceso á memoria durante a execución do código. Rust tamén ofrece protección contra desbordamentos de enteiros, require a inicialización obrigatoria dos valores variables antes do seu uso, manexa mellor os erros na biblioteca estándar, aplica o concepto de referencias e variables inmutables por defecto, ofrece unha forte escritura estática para minimizar os erros lóxicos.
Principais novidades:
- Mellorouse a compatibilidade con sistemas ARM de 64 bits con Windows. A plataforma de destino "aarch64-pc-windows-msvc" actualizouse do nivel de compatibilidade 2 ao nivel 1. O nivel de compatibilidade 2 xa está dispoñible para as arquitecturas aarch64-pc-windows-gnullvm e x86_64-pc-windows-gnullvm. O nivel de compatibilidade 1 inclúe compilacións binarias, probas exhaustivas e a maior garantía de compatibilidade coa plataforma: cada cambio no compilador verifícase executando o conxunto de probas completo. O nivel de compatibilidade 2 inclúe compilacións binarias e unha garantía de compilación, pero non garante que se supere o conxunto de probas. O nivel de compatibilidade 3 inclúe compatibilidade básica, pero non inclúe probas automatizadas, publicación oficial de compilacións nin verificación de compilacións.
- Engadiuse o aviso de lint "dangling_pointers_from_locals" para detectar funcións que devolven punteiros brutos colgantes que apuntan a datos almacenados en variables locais definidas na función chamada. Estas variables elimínanse despois de que a función devolva un valor, e os punteiros brutos aos datos asociados con estas variables convértense en punteiros colgantes, é dicir, apuntan á memoria liberada. A posterior desreferenciación dun punteiro deste tipo leva a un comportamento indefinido. fn f() -> *const u8 { let x = 0; &x // aviso: producirase un punteiro colgante porque se descartará a variable local "x" }
- Engadiuse o aviso de lint "integer_to_ptr_transmutes" para informar sobre a conversión de enteiros en punteiros usando a función std::mem::transmute.
- O xestor de paquetes Cargo estabilizou a compatibilidade co parámetro "build.build-dir", que especifica o directorio para almacenar os artefactos de compilación temporais creados por cargo e rustc durante o proceso de compilación.
- Estabilizouse a compatibilidade coa declaración de funcións variádicas de estilo C para as ABI sysv64, win64, efiapi e aapcs.
- Compatibilidade estabilizada do ensamblador en liña para a arquitectura LoongArch32.
- Unha nova parte da API trasladouse á categoría de estable, incluíndo os métodos e implementacións de trazos estabilizados:
- Ruta::prefixo_de_ficheiro
- AtomicPtr::fetch_ptr_add
- AtomicPtr::fetch_ptr_sub
- AtomicPtr::fetch_byte_add
- AtomicPtr::fetch_byte_sub
- AtomicPtr::fetch_or
- AtomicPtr::fetch_and
- AtomicPtr::fetch_xor
- {enteiro}::strict_add
- {enteiro}::strict_sub
- {enteiro}::strict_mul
- {enteiro}::strict_div
- {enteiro}::strict_div_euclid
- {enteiro}::strict_rem
- {enteiro}::strict_rem_euclid
- {enteiro}::strict_neg
- {enteiro}::strict_shl
- {enteiro}::strict_shr
- {enteiro}::strict_pow
- i{N}::strict_add_unsigned
- i{N}::strict_sub_unsigned
- i{N}::strict_abs
- u{N}::strict_add_signed
- u{N}::strict_sub_signed
- PanicHookInfo::payload_as_str
- core::iter::chain
- u{N}::checked_signed_diff
- core::array::repeat
- PathBuf::add_extension
- PathBuf::with_engadida_extensión
- Duración::desde_minutos
- Duración::desde_horas
- ecuación parcial impl para PathBuf
- ecuación parcial impl para PathBuf
- ecuación parcial impl para o camiño
- ecuación parcial impl para o camiño
- ecuación parcial impl para Cadea
- ecuación parcial impl para Cadea
- ecuación parcial impl para rúa
- ecuación parcial impl para rúa
- Ipv4Adr::from_octets
- Ipv6Adr::from_octets
- EnderezoIpv6::segmentos_de_referencia
- impl Predeterminado para Pin > onde Caixa : Predeterminado, T: ?Tamaño
- impl Predeterminado para Pin > onde Rc : Predeterminado, T: ?Tamaño
- impl Predeterminado para o Pin > onde Arc : Predeterminado, T: ?Tamaño
- Cela::como_matriz_de_celas
- u{N}::carrying_add
- u{N}::subtotal_empréstito
- u{N}::carrying_mul
- u{N}::carrying_mul_add
- BTreeMap::extraer_se
- BTreeSet::extraer_se
- Depuración de impl para windows::ffi::EncodeWide<'_>
- str::ceil_char_boundary
- str::floor_char_boundary
- Suma impl para saturación
- impl Sum<&Self> para saturación
- Produto impl para saturación
- Produto impl<&Self> para saturación
- O signo "const" úsase nas funcións:
- <[T; N]>::cada_ref
- <[T; N]>::cada_mut
- CadeaOs::nova
- PathBuf::new
- ID do tipo::de
- ptr::con_procedencia_exposta
- ptr::con_procedencia_exposta_mut
- O compilador actualizouse á rama LLVM 21.
Fonte: opennet.ru
