Rilascio del linguaggio di programmazione Rust 1.66

È stato pubblicato il rilascio del linguaggio di programmazione general-purpose Rust 1.66, fondato dal progetto Mozilla, ma ora sviluppato sotto gli auspici dell'organizzazione no-profit indipendente Rust Foundation. Il linguaggio si concentra sulla sicurezza della memoria e fornisce i mezzi per ottenere un elevato parallelismo del lavoro evitando l'uso di un Garbage Collector e del runtime (il runtime è ridotto all'inizializzazione di base e alla manutenzione della libreria standard).

I metodi di gestione della memoria di Rust salvano lo sviluppatore da errori durante la manipolazione dei puntatori e proteggono dai problemi che sorgono a causa della gestione della memoria di basso livello, come l'accesso a un'area di memoria dopo che Γ¨ stata liberata, la dereferenziazione di puntatori nulli, sovraccarichi del buffer, ecc. Per distribuire le librerie, fornire build e gestire le dipendenze, il progetto sviluppa il gestore di pacchetti Cargo. Il repository crates.io Γ¨ supportato per l'hosting di librerie.

La sicurezza della memoria viene fornita in Rust in fase di compilazione attraverso il controllo dei riferimenti, tenendo traccia della proprietΓ  dell'oggetto, tenendo traccia della durata dell'oggetto (scopi) e valutando la correttezza dell'accesso alla memoria durante l'esecuzione del codice. Rust fornisce anche protezione contro gli overflow di numeri 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, offre una forte tipizzazione statica per ridurre al minimo gli errori logici.

Principali innovazioni:

  • Nelle enumerazioni con rappresentazioni intere (l'attributo "#[repr(Int)]") Γ¨ consentita l'indicazione esplicita del discriminante (numero di variante nell'enumerazione), anche se l'enumerazione contiene campi. #[repr(u8)] enum Foo { A(u8), # discriminante 0 B(i8), # discriminante 1 C(bool) = 42, # discriminante 42 }
  • Aggiunta la funzione core::hint::black_box che restituisce semplicemente il valore ricevuto. PoichΓ© il compilatore pensa che questa funzione stia facendo qualcosa, la funzione black_box puΓ² essere utilizzata per disabilitare le ottimizzazioni del compilatore per i loop quando si esegue il test delle prestazioni del codice o quando si esamina il codice macchina generato (in modo che il compilatore non consideri il codice inutilizzato e lo rimuova). Ad esempio, nell'esempio seguente, black_box(v.as_ptr()) impedisce al compilatore di pensare che il vettore v non sia utilizzato. usa std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); scatola_nera(v.as_ptr()); } }
  • Il gestore di pacchetti "cargo" offre il comando "remove", che consente di rimuovere le dipendenze dal manifest Cargo.toml dalla riga di comando.
  • Una nuova porzione dell'API Γ¨ stata spostata nella categoria stabile, inclusi i metodi e le implementazioni dei tratti sono stati stabilizzati:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrap_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrap_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrap_sub_unsigned}
    • BTreeSet::{primo, ultimo, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Aggiungere le implementazioni AsFd per i tipi di blocco stdio quando si usa WASI.
    • impl TryFrom > per Scatola<[T; N]>
    • core::hint::black_box
    • Durata::try_from_secs_{f32,f64}
    • Opzione::decomprimere
    • std::os::fd
  • Gli intervalli "..X" e "..=X" sono consentiti nei modelli.
  • Durante la creazione del front-end del compilatore rustc e del back-end LLVM, vengono utilizzate le modalitΓ  di ottimizzazione LTO (Link Time Optimization) e BOLT (Binary Optimization and Layout Tool) per aumentare le prestazioni del codice risultante e ridurre il consumo di memoria.
  • Supporto di livello 5 implementato per le piattaforme armv5te-none-eabi e thumbvXNUMXte-none-eabi. Il terzo livello implica il supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali e verifica della capacitΓ  di compilare il codice.
  • Aggiunto il supporto per il collegamento alle librerie generiche macOS.

Inoltre, possiamo notare l'inclusione nel codice GCC del compilatore front-end del linguaggio Rust (gccrs). Il frontend Γ¨ incluso nel ramo GCC 13, che verrΓ  rilasciato a maggio 2023. A partire da GCC 13, il toolkit GCC standard potrΓ  essere utilizzato per compilare programmi Rust senza la necessitΓ  di installare il compilatore rustc creato utilizzando gli sviluppi LLVM. L'implementazione di Rust in GCC 13 sarΓ  in stato beta, non abilitata per impostazione predefinita.

Fonte: opennet.ru

Aggiungi un commento