È stata rilasciata la versione Rust 1.91

È stato pubblicato il rilascio del linguaggio di programmazione Rust 1.91, originariamente sviluppato da Mozilla e ora sostenuto da un'organizzazione non profit indipendente, Rust Foundation. Questo linguaggio si concentra sulla gestione sicura della memoria e fornisce strumenti per ottenere un alto parallelismo nell'esecuzione dei compiti, senza fare affidamento su un garbage collector o runtime (il runtime si limita all'inizializzazione di base e alla gestione della libreria standard).

I metodi di gestione della memoria in Rust liberano gli sviluppatori dagli errori nella manipolazione dei puntatori e li proteggono da problematiche derivanti dal lavoro a basso livello con la memoria, come l'accesso a zone di memoria dopo la loro liberazione, la dereferenziazione di puntatori nulli, il superamento dei limiti del buffer, e così via. Per la distribuzione delle librerie, la gestione della compilazione e delle dipendenze, si è sviluppato un gestore di pacchetti chiamato Cargo. Le librerie sono ospitate nel repository crates.io.

La gestione sicura della memoria in Rust è garantita durante la compilazione tramite il controllo dei riferimenti, il tracciamento della proprietà degli oggetti, la gestione della durata degli oggetti (scope) e la valutazione della correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust offre anche strumenti per proteggere da overflow interi, richiede l'inizializzazione obbligatoria dei valori delle variabili prima dell'uso, gestisce meglio gli errori nella libreria standard, applica il concetto di riferimenti e variabili immutabili per impostazione predefinita e offre una forte tipizzazione statica per ridurre al minimo gli errori logici.

Novità principali:

  • Migliorato il supporto per i sistemi ARM a 64 bit con sistema operativo Windows. La piattaforma di destinazione "aarch64-pc-windows-msvc" è stata trasferita dal secondo al primo livello di supporto. È fornito il secondo livello di supporto per le architetture aarch64-pc-windows-gnullvm e x86_64-pc-windows-gnullvm. Il primo livello di supporto implica la generazione di build binarie, esecuzione di test approfonditi e fornitura della massima garanzia di supporto della piattaforma: ogni modifica al compilatore è verificata tramite l'esecuzione di un set completo di test. Il secondo livello di supporto include la generazione di build binarie e garanzia di compilazione, ma non garantisce il superamento del set di test. Il terzo livello offre un supporto base, ma senza test automatizzati, pubblicazione di build ufficiali e verifica della possibilità di compilare il codice.
  • Aggiunto l'avviso lint «dangling_pointers_from_locals» per identificare il ritorno da funzioni di puntatori raw appesi (dangling raw pointer) che puntano a dati memorizzati in variabili locali definite nella funzione chiamata. Queste variabili vengono rimosse al termine della funzione, e i puntatori raw ai dati collegati a queste variabili diventano appesi, cioè puntano a memoria liberata. La successiva dereferenziazione di un tale puntatore porta a un comportamento indefinito. fn f() -> *const u8 { let x = 0; &x // avviso: verrà prodotto un puntatore appeso perché la variabile locale «x» verrà eliminata }
  • Aggiunto l'avviso lint «integer_to_ptr_transmutes», che avvisa sulla conversione di numeri interi in puntatori tramite la funzione std::mem::transmute.
  • Nel gestore di pacchetti Cargo è stata stabilizzata la supporto per il parametro «build.build-dir», che definisce la directory per la memorizzazione degli artefatti di build temporanei creati da cargo e rustc durante la fase di build.
  • Per ABI sysv64, win64, efiapi e aapcs è stata stabilizzata la supporto per la dichiarazione di funzioni con un numero variabile di argomenti in stile C.
  • È stata stabilizzata la supporto per l'assembler inline per l'architettura LoongArch32.
  • Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • 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 for PathBuf
    • impl PartialEq for PathBuf
    • impl PartialEq for Path
    • impl PartialEq for Path
    • impl PartialEq for String
    • impl PartialEq for String
    • impl PartialEq for str
    • impl PartialEq for str
    • Ipv4Addr::from_octets
    • Ipv6Addr::from_octets
    • Ipv6Addr::from_segments
    • impl Default for Pin<Box> where Box: Default, T: ?Sized
    • impl Default for Pin<Rc> where Rc: Default, T: ?Sized
    • impl Default for Pin<Arc> where Arc: 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
    • impl Sum for Saturating
    • impl Product for Saturating
    • impl Product for Saturating
  • Il flag «const» è stato applicato nelle funzioni:
    • ::each_ref
    • ::each_mut
    • OsString::new
    • PathBuf::new
    • TypeId::of
    • ptr::with_exposed_provenance
    • ptr::with_exposed_provenance_mut
  • Il compilatore è stato aggiornato alla versione LLVM 21.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster