È stato pubblicato il seguente rilascio stabile del compilatore e dello standard del linguaggio Rust.
Aggiornamento della libreria standard musl alla versione 1.2.5
Diverse piattaforme target *-linux-musl ora vengono fornite con musl 1.2.5. Questo riguarda principalmente le build statiche di musl per x86_64, aarch64 e powerpc64le, che in precedenza utilizzavano la versione 1.2.3. Questo aggiornamento include alcune correzioni e miglioramenti, così come una modifica "breaking" che influisce sull'ecosistema Rust.
La principale motivazione per questo aggiornamento sono stati i significativi miglioramenti nel risolutore DNS di musl, introdotti nella versione 1.2.4 e perfezionati nella 1.2.5. Utilizzando musl per il linking statico, questo dovrebbe aumentare l'affidabilità delle funzionalità di rete dei file binari portabili di Linux, specialmente quando si lavora con grandi record DNS e server di nomi ricorsivi.
Tuttavia, la versione 1.2.4 contiene anche una modifica critica: la rimozione di alcuni simboli obsoleti di compatibilità utilizzati dal crate libc su GitHub. La correzione per questo è stata rilasciata in libc 0.2.146 già a giugno 2023 (2,5 anni fa), e riteniamo che si siano diffuse a sufficienza affinché possiamo apportare modifiche alle piattaforme target di Rust.
Consentire all'allocatore globale di utilizzare TLS
Rust 1.93 corregge i meccanismi interni della libreria standard, consentendo allocatori globali scritti in Rust di utilizzare std::thread_local! e std::thread::current senza rischi di re-invocazione grazie all'utilizzo dell'allocatore di sistema. Maggiori dettagli possono essere trovati nella documentazione della libreria standard di Rust.
Attributi cfg nelle istruzioni asm!
In precedenza, se parti separate della sezione di assembly integrato richiedevano la compilazione condizionale cfg, era necessario duplicare l'intero blocco asm! per intero. Nella versione 1.93, l'attributo cfg può essere applicato a singole istruzioni all'interno del blocco:
asm!( // o global_asm! o naked_asm! "nop", #[cfg(target_feature = "sse2")] "nop", // … #[cfg(target_feature = "sse2")] a = const 123, // utilizzato solo su sse2 );
Tradotti nella categoria API stabile:
<[MaybeUninit]>::assume_init_drop <[MaybeUninit]>::assume_init_ref` <[MaybeUninit]>::assume_init_mut` <[MaybeUninit]>::write_copy_of_slice` <[MaybeUninit]>::write_clone_of_slice` String::into_raw_parts` Vec::into_raw_parts` ::unchecked_neg` ::unchecked_shl` ::unchecked_shr` ::unchecked_shl` ::unchecked_shr` ::as_array` ::as_array_mut` ::as_array` ::as_array_mut` VecDeque::pop_front_if` VecDeque::pop_back_if` Duration::from_nanos_u128` char::MAX_LEN_UTF8` char::MAX_LEN_UTF16` std::fmt::from_fn` std::fmt::FromFn`
Fonte: linux.org.ru
