Lingua di prugrammazione Rust versione 1.66

A liberazione di a lingua di prugrammazione Rust 1.66 generale, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspices di l'urganizazione indipendente Rust Foundation, hè stata publicata. A lingua si focalizeghja nantu à a sicurità di a memoria è furnisce i mezi per ottene un altu parallelismu di u travagliu evitendu l'usu di un cullizzioni di basura è runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di a biblioteca standard).

I metudi di gestione di a memoria di Rust salvanu u sviluppatore da l'errore quandu manipulanu i puntatori è prutegge da i prublemi chì si sviluppanu per via di a gestione di memoria di pocu livellu, cum'è l'accessu à una zona di memoria dopu chì hè stata liberata, dereferencing null pointers, buffer overruns, etc. Per distribuisce biblioteche, furnisce e custruzzioni è gestisce e dipendenze, u prughjettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per l'ospitu di biblioteche.

A sicurezza di a memoria hè furnita in Rust à u tempu di compilazione attraversu a verificazione di riferimentu, u seguimentu di a pruprietà di l'ughjettu, a traccia di a vita di l'ughjettu (scopi), è a valutazione di a correttezza di l'accessu di memoria durante l'esekzione di codice. Rust furnisce ancu prutezzione contra i overflows integer, esige l'inizializazione obligatoria di i valori variabili prima di l'usu, gestisce l'errori megliu in a biblioteca standard, applica u cuncettu di referenze immutabili è variabili per difettu, offre una forte tipografia statica per minimizzà l'errori lògichi.

Innuvazioni principali:

  • In l'enumerazioni cù rapprisentazione intera (l'attributu "#[repr(Int)]", l'indicazione esplicita di u discriminante (numeru varianti in l'enumerazione) hè permessa, ancu se l'enumerazione cuntene campi. #[repr(u8)] enum Foo { A(u8), # discriminant 0 B(i8), # discriminant 1 C(bool) = 42, # discriminant 42 }
  • A funzione aghjunta core::hint::black_box chì torna solu u valore ricevutu. Siccomu u compilatore pensa chì sta funzione face qualcosa, a funzione black_box pò esse aduprata per disattivà l'ottimisazioni di u compilatore per i loops quandu eseguite teste di rendiment di codice o quandu esaminà u codice generatu di macchina (per chì u compilatore ùn cunsiderà micca u codice inutilizatu è sguassate). Per esempiu, in l'esempiu sottu, black_box(v.as_ptr()) impedisce à u compilatore di pensà chì u vettore v ùn hè micca usatu. aduprà std::hint::black_box; fn push_cap(v: &mut Vec) { per i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
  • U gestore di pacchetti "cargo" offre u cumandamentu "sguassate", chì permette di caccià e dipendenze da u manifestu Cargo.toml da a linea di cummanda.
  • Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
    • proc_macro::Span::source_text
    • u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
    • i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
    • i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
    • BTreeSet::{primu, ultimu, pop_first, pop_last}
    • BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
    • Aghjunghjite implementazioni AsFd per i tipi di bloccu stdio quandu utilizate WASI.
    • impl TryFrom > per Box<[T; N]>
    • core::hint::black_box
    • Durata::try_from_secs_{f32,f64}
    • Opzione:: unzip
    • std::os::fd
  • I intervalli "..X" è "..=X" sò permessi in mudelli.
  • Quandu si custruisce u front end di u compilatore rustc è u backend LLVM, i modi d'ottimisazione LTO (Link Time Optimization) è BOLT (Binary Optimization and Layout Tool) sò usati per aumentà u rendiment di u codice resultanti è riduce u cunsumu di memoria.
  • Implementatu u supportu di livellu 5 per e plataforme armv5te-none-eabi è thumbvXNUMXte-none-eabi. U terzu livellu implica un supportu basicu, ma senza teste automatizati, publicà custruzzioni ufficiali è verificate a capacità di custruisce u codice.
  • Aghjunghje supportu per ligà cù Biblioteche Generiche di macOS.

Inoltre, pudemu nutà l'inclusione in u codice GCC di u compilatore front-end di a lingua Rust (gccrs). U frontend hè inclusu in a filiera GCC 13, chì serà liberata in maghju 2023. Partendu da GCC 13, u toolkit GCC standard pò esse usatu per cumpilà i prugrammi Rust senza a necessità di installà u compilatore rustc custruitu cù sviluppi LLVM. L'implementazione Rust in GCC 13 serà in u statutu beta, micca attivatu per difettu.

Source: opennet.ru

Add a comment