Lançamento do Rust 1.91

Foi lançado o release da linguagem de programação Rust 1.91, originalmente desenvolvida pelo projeto Mozilla, mas agora mantida sob a tutela da organização independente sem fins lucrativos Rust Foundation. A linguagem foca na segurança do uso da memória e fornece ferramentas para alcançar alto paralelismo na execução de tarefas, dispensando o uso de coletor de lixo e runtime (o runtime é reduzido à inicialização básica e ao suporte da biblioteca padrão).

Os métodos de manipulação de memória em Rust protegem o desenvolvedor de erros ao trabalhar com ponteiros e evitam problemas decorrentes de manipulação de memória de baixo nível, como acesso a áreas de memória após sua liberação, desreferenciação de ponteiros nulos, e estouro de buffer, entre outros. Para distribuição de bibliotecas, construção e gerenciamento de dependências, o projeto conta com o gerenciador de pacotes Cargo. O repositório crates.io é suportado para hospedagem de bibliotecas.

A manipulação segura da memória em Rust é garantida em tempo de compilação através da verificação de referências, rastreamento de propriedade de objetos, controle do tempo de vida dos objetos (escopos) e avaliação da correção do acesso à memória durante a execução do código. Rust também oferece mecanismos para proteção contra estouros inteiros, exige a inicialização obrigatória de valores de variáveis antes do uso, trata erros de forma superior na biblioteca padrão, aplica o conceito de referências e variáveis imutáveis (immutable) por padrão e oferece uma forte tipagem estática para minimizar erros lógicos.

Principais novidades:

  • Melhorado o suporte a sistemas ARM de 64 bits com Windows. A plataforma alvo «aarch64-pc-windows-msvc» foi movida do segundo para o primeiro nível de suporte. Garantido o segundo nível de suporte para as arquiteturas aarch64-pc-windows-gnullvm e x86_64-pc-windows-gnullvm. O primeiro nível de suporte implica na geração de builds binários, realização de testes abrangentes e oferecimento da mais alta garantia de suporte à plataforma – cada alteração no compilador é verificada por meio da execução de todo o conjunto de testes. O segundo nível de suporte inclui a geração de builds binários e garantia de construção, mas não garante a aprovação no conjunto de testes. O terceiro nível abrange suporte básico, sem testes automatizados, publicação de builds oficiais e verificação da possibilidade de compilar o código.
  • Adicionado o aviso de lint «dangling_pointers_from_locals» para identificar funções que retornam ponteiros raw pendentes (dangling raw pointers), apontando para dados armazenados em variáveis locais definidas na função chamada. Essas variáveis são removidas após a conclusão da função, e os ponteiros raw para os dados associados a essas variáveis tornam-se pendentes, ou seja, apontam para a memória liberada. A desreferenciação subsequente desse ponteiro resulta em comportamento indefinido. fn f() -> *const u8 { let x = 0; &x // aviso: um ponteiro pendente será produzido porque a variável local «x» será descartada }
  • Adicionado o aviso de lint «integer_to_ptr_transmutes», que informa sobre a conversão de números inteiros em ponteiros usando a função std::mem::transmute.
  • No gerenciador de pacotes Cargo, estabilizado o suporte ao parâmetro «build.build-dir», que define o diretório para armazenar artefatos temporários de construção, gerados pelo cargo e rustc durante o processo de compilação.
  • Para ABI sysv64, win64, efiapi e aapcs, o suporte à declaração de funções com número variável de argumentos no estilo C foi estabilizado.
  • O suporte ao assembler inline para a arquitetura LoongArch32 foi estabilizado.
  • Uma nova leva de APIs foi traduzida para a categoria estável, incluindo estabilizações de métodos e implementações de traits:
    • Path::file_prefix
    • 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
    • {integer}::strict_add
    • {integer}::strict_sub
    • {integer}::strict_mul
    • {integer}::strict_div
    • {integer}::strict_div_euclid
    • {integer}::strict_rem
    • {integer}::strict_rem_euclid
    • {integer}::strict_neg
    • {integer}::strict_shl
    • {integer}::strict_shr
    • {integer}::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_added_extension
    • Duration::from_mins
    • Duration::from_hours
    • impl PartialEq<str> for PathBuf
    • impl PartialEq<String> for PathBuf
    • impl PartialEq<str> for Path
    • impl PartialEq<String> for Path
    • impl PartialEq<PathBuf> for String
    • impl PartialEq<Path> for String
    • impl PartialEq<PathBuf> for str
    • impl PartialEq<Path> for str
    • Ipv4Addr::from_octets
    • Ipv6Addr::from_octets
    • Ipv6Addr::from_segments
    • impl<T> Default for Pin<Box<T>> where Box<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Rc<T>> where Rc<T>: Default, T: ?Sized
    • impl<T> Default for Pin<Arc<T>> where Arc<T>: Default, T: ?Sized
    • Cell::as_array_of_cells
    • u{N}::carrying_add
    • u{N}::borrowing_sub
    • u{N}::carrying_mul
    • u{N}::carrying_mul_add
    • BTreeMap::extract_if
    • BTreeSet::extract_if
    • impl Debug for windows::ffi::EncodeWide<‘_>
    • str::ceil_char_boundary
    • str::floor_char_boundary
    • impl Sum for Saturating<u{N}>
    • impl Sum<&Self> for Saturating<u{N}>
    • impl Product for Saturating<u{N}>
    • impl Product<&Self> for Saturating<u{N}>
  • O modificador «const» é aplicado em funções:
    • <[T; N]>::each_ref
    • <[T; N]>::each_mut
    • OsString::new
    • PathBuf::new
    • TypeId::of
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • O compilador foi atualizado para a versão LLVM 21.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster