È stata pubblicata la seguente versione stabile del compilatore e dello standard del linguaggio Rust.
Aggiornamento della libreria integrata musl alla versione 1.2.5
Diverse piattaforme target *-linux-musl ora sono fornite con musl 1.2.5. Questo riguarda in particolare le build statiche di musl per x86_64, aarch64 e powerpc64le, che in precedenza utilizzavano la versione 1.2.3. Questo aggiornamento include diverse correzioni e miglioramenti, oltre a una modifica "rompente" che influisce sull'ecosistema Rust.
La principale motivazione per questo aggiornamento sono stati i significativi miglioramenti nel risolutore DNS di musl, introdotti con la versione 1.2.4 e perfezionati nella 1.2.5. Utilizzando musl per il linking statico, ciò dovrebbe aumentare l'affidabilità delle funzioni di rete dei file binari portabili Linux, in particolare quando si lavorano con ampie registrazioni DNS e server di nomi ricorsivi.
Tuttavia, la versione 1.2.4 contiene anche una modifica critica: la rimozione di diversi simboli di compatibilità obsoleti utilizzati dal crate libc su GitHub. La correzione per questo è stata rilasciata nella libc 0.2.146 già a giugno 2023 (2,5 anni fa), e riteniamo che si sia diffusamente sufficiente da permetterci di apportare modifiche alle piattaforme target di Rust.
Consentire all'allocatore globale di utilizzare TLS
Rust 1.93 modifica i meccanismi interni della libreria standard, consentendo agli allocatori globali scritti in Rust di utilizzare std::thread_local! e std::thread::current senza il rischio di re-entrancy grazie all'uso dell'allocatore di sistema. Maggiori dettagli sono disponibili nella documentazione della libreria standard di Rust.
Attributi cfg nelle righe asm!
In precedenza, se singole parti della sezione di assemblaggio integrato richiedevano la compilazione condizionale cfg, era necessario duplicare l'intero blocco asm! nella sua interezza. 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 );
Tradotto nel ranghi dell'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
