Rilascio del linguaggio di programmazione Rust 1.60

È stato rilasciato il linguaggio di programmazione generale Rust 1.60, inizialmente sviluppato da Mozilla, ma attualmente gestito dalla Rust Foundation, un'organizzazione indipendente senza scopo di lucro. Il linguaggio è focalizzato sulla sicurezza della gestione della memoria e offre strumenti per raggiungere un'elevata parallelizzazione nell'esecuzione dei compiti, il tutto senza l'uso di un garbage collector e di un runtime (il runtime si riduce a una semplice inizializzazione e al supporto 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:

  • Nel compilatore rustc è stata stabilizzata una nuova sistema basata su LLVM per la generazione di dati di copertura, utilizzati per valutare la copertura del codice durante i test. Per includere i dati di copertura durante la compilazione, è necessario utilizzare il flag "-Cinstrument-coverage", ad esempio eseguendo la compilazione con il comando "RUSTFLAGS="-C instrument-coverage" cargo build". Dopo aver eseguito il file eseguibile in questo modo, verrà salvato un file default.profraw nella directory corrente, che può essere elaborato utilizzando l'utilità llvm-profdata del componente llvm-tools-preview. L'output elaborato dall'utlità llvm-profdata può quindi essere passato al programma llvm-cov per generare un rapporto annotato contenente informazioni sulla copertura del codice. Le informazioni sui legami con i file sorgente vengono tratte dal file eseguibile in esame, nel quale sono inclusi i dati necessari per collegare i contatori di copertura al codice. 1| 1|fn main() { 2| 1| println!("Hello, world!"); 3| 1|}
  • Nel gestore di pacchetti cargo è stata stabilizzata la supporto per il flag "--timings", che include la generazione di un rapporto dettagliato sul progresso della compilazione e sul tempo di esecuzione di ciascun passaggio. Il rapporto può risultare utile per ottimizzare le prestazioni del processo di compilazione.
  • Il gestore di pacchetti cargo offre una nuova sintassi per il meccanismo di compilazione condizionale e la selezione delle dipendenze opzionali, configurabile nel file Cargo.toml attraverso l'elenco dei nomi delle proprietà nella sezione [features] e attivabile tramite l'inclusione delle proprietà durante la compilazione del pacchetto utilizzando il flag "—features". Nella nuova versione è stata aggiunta la supporto per le dipendenze in spazi dei nomi separati e per le dipendenze deboli (weak).

    Nel primo caso, è stata implementata la possibilità di utilizzare all'interno della sezione «[features]» elementi con il prefisso «dep:» per un legame esplicito a una dipendenza opzionale, senza rappresentare implicitamente questa dipendenza come proprietà (feature). Nel secondo caso, è stata aggiunta la compatibilità con l'etichetta «?» («package-name?/feature-name») per le dipendenze opzionali, che devono essere incluse solo se un'altra proprietà include tale dipendenza opzionale. Ad esempio, nell'esempio sottostante, includere la proprietà serde porterà all'inclusione della dipendenza «serde», e anche della proprietà «serde» per la dipendenza «rgb», ma solo se da qualche altra parte è inclusa la dipendenza «rgb»: [dependencies] serde = { version = «1.0.133», optional = true } rgb = { version = «0.8.25», optional = true } [features] serde = [«dep:serde», «rgb?/serde»]

  • È stata ripristinata la supporto per la compilazione incrementale disattivata nella versione precedente. È stato corretto un errore nel compilatore che aveva causato la disattivazione della funzione.
  • Sono stati risolti alcuni problemi con la fornitura di timer Instant che garantiscono un calcolo del tempo monotono, tenendo conto del tempo trascorso nel sonno da parte del sistema. In precedenza, per il funzionamento del timer, veniva utilizzata l'API di sistema operativo che non considerava situazioni problematiche che compromettevano la monotonia del tempo, come problemi hardware, utilizzo di virtualizzazione o errori nel sistema operativo.
  • Una nuova serie di API è stata traslata nella categoria stabile, stabilizzando i metodi e le implementazioni dei tipi:
    • Arc::new_cyclic
    • Rc::new_cyclic
    • slice::EscapeAscii
    • ::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • MaybeUninit::assume_init_drop
    • MaybeUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • usize::abs_diff
    • Display per io::ErrorKind
    • From per ExitCode
    • Not per ! (tipo «never»)
    • _Op_Assign
    • arch::is_aarch64_feature_detected!
  • È stato implementato il terzo livello di supporto per le piattaforme mips64-openwrt-linux-musl* e armv7-unknown-linux-uclibceabi (softfloat). Il terzo livello implica supporto di base, ma senza test automatizzati, pubblicazione di build ufficiali e verifica della possibilità di compilare il codice.
  • Il compilatore è stato aggiornato per utilizzare LLVM 14.

In aggiunta si può notare:

  • È stata aggiunta la supporto per il bootstrap del compilatore (bootstrapping) rustc tramite il backend rustc_codegen_gcc, che consente di utilizzare la libreria libgccjit del progetto GCC come generatore di codice in rustc, permettendo così il supporto delle architetture e delle ottimizzazioni disponibili in GCC all'interno di rustc. Con 'bootstrap' del compilatore si intende la possibilità di utilizzare un generatore di codice basato su GCC per costruire lo stesso compilatore rustc. Da un punto di vista pratico, questa possibilità permette di compilare programmi Rust per architetture precedentemente non supportate in rustc.
  • È disponibile la versione 0.0.13 dell'insieme di strumenti uutils coreutils, che sviluppa un'analoga del pacchetto GNU Coreutils, riscritta in Rust. Il coreutils include più di cento utilità, tra cui sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln e ls. L'obiettivo del progetto è creare un'implementazione alternativa di Coreutils cross-platform in grado di funzionare anche su piattaforme come Windows, Redox e Fuchsia, e di distribuirla sotto una licenza permissiva MIT, invece della licenza copyleft GPL.

    Nella nuova versione sono state migliorate le implementazioni di molte utility, inclusa una notevole compatibilità delle utility cp, dd, df, split e tr con i loro equivalenti del progetto GNU. È fornita documentazione online. Per l'analisi degli argomenti della riga di comando è stato utilizzato il parser clap, il che ha permesso di migliorare l'output per il flag «—help» e aggiungere supporto per le abbreviazioni delle lunghe comandi (ad esempio, è possibile utilizzare «ls —col» invece di «ls —color»).

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