Rust 1.91 publicado

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

Engadir un comentario