Lingua di prugrammazione Rust versione 1.58

A liberazione di a lingua di prugrammazione generale Rust 1.58, fundata da u prughjettu Mozilla, ma avà sviluppata sottu à l'auspice di l'urganizazione indipendente Rust Foundation, hè stata publicata. A lingua fucalizza nantu à a sicurità di a memoria, furnisce una gestione automatica di a memoria, è furnisce i mezi per ottene un parallelismu elevatu di u travagliu senza aduprà un cullizzioni di basura o runtime (u runtime hè ridutta à l'inizializazione basica è u mantenimentu di a biblioteca standard).

A gestione automatica di a memoria di Rust salva u sviluppatore da l'errore durante a manipulazione di puntatori è prutegge da i prublemi chì si sviluppanu per via di a manipulazione di memoria di livellu bassu, 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 prugettu sviluppa u gestore di pacchetti Cargo. U repository crates.io hè supportatu per e biblioteche di hosting.

Innuvazioni principali:

  • In i blocchi di furmatu di linea, in più di l'abilità dispunibile prima di rimpiazzà e variàbili esplicitamente listate dopu una linea per numeru è nome, l'abilità di rimpiazzà identificatori arbitrarii aghjunghjendu l'espressione "{identificatore}" à a linea hè implementata. Per esempiu: // Custruzzioni sustinuti prima: println!("Hello, {}!", get_person()); println!("Hello, {0}!", get_person()); println! ("Hello, {persona}!", person = get_person()); // avà pudete specificà let person = get_person(); println!("Ciao, {persona}!");

    L'identificatori ponu ancu esse specificati direttamente in l'opzioni di furmatu. let (larghezza, precisione) = get_format(); for (name, score) in get_scores() { println!("{name}: {score:width$.precision$}"); }

    A nova sustituzione funziona in tutti i macros chì supportanu a definizione di formatu di stringa, cù l'eccezzioni di a macro "panicu!". in e versioni 2015 è 2018 di a lingua Rust, in quale u panicu !("{ident}") hè trattatu cum'è una stringa regulare (in Rust 2021 a sustituzione funziona).

  • U cumpurtamentu di u std::process::Struttura di cumandamentu nantu à a piattaforma Windows hè stata cambiata in modu chì quandu eseguisce cumandamenti, per ragioni di sicurezza, ùn cerca più file eseguibili in u cartulare attuale. U repertoriu attuale hè escludutu perchè puderia esse usatu per eseguisce codice maliziusu se i prugrammi sò eseguiti in repertorii micca affidabili (CVE-2021-3013). A nova logica di rilevazione eseguibile implica a ricerca di i repertorii Rust, u repertoriu di l'applicazioni, u repertoriu di u sistema di Windows, è i repertorii specificati in a variabile d'ambiente PATH.
  • A biblioteca standard hà allargatu u numeru di funzioni marcate "#[must_use]" per emette un avvisu se u valore di ritornu hè ignuratu, chì aiuta à identificà l'errori causati da assumendu chì una funzione cambierà i valori invece di rinvià un novu valore.
  • Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
    • Metadata::is_symlink
    • Path::is_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Risultatu::unwrap_unchecked
    • Risultatu::unwrap_err_unchecked
  • L'attributu "const", chì determina a pussibilità di usà in ogni cuntestu invece di custanti, hè utilizatu in e funzioni:
    • Durata::nova
    • Duration::checked_add
    • Duration::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Duration::checked_mul
    • Duration::saturating_mul
    • Duration::checked_div
  • Dereferenziazione permessa di puntatori "* const T" in cuntesti "const".
  • In u gestore di pacchettu Cargo, u campu rust_version hè statu aghjuntu à i metadati di u pacchettu, è l'opzione "--message-format" hè stata aghjunta à u cumandamentu "installà di carica".
  • U compilatore implementa u supportu per u mecanismu di prutezzione CFI (Control Flow Integrity), chì aghjunghje cuntrolli prima di ogni chjama indiretta per detectà alcune forme di cumportamentu indefinitu chì puderia purtà à una violazione di l'ordine di esecuzione normale (flussu di cuntrollu) per via di u usu di sfruttamenti chì cambianu i puntatori almacenati in memoria nantu à e funzioni.
  • U compilatore hà aghjustatu supportu per e versioni 5 è 6 di u formatu di cumparazione di a cobertura LLVM, utilizatu per evaluà a cobertura di codice durante a prova.
  • In u compilatore, i requisiti per a versione minima di LLVM sò elevati à LLVM 12.
  • U terzu livellu di supportu per a piattaforma x86_64-unknown-none hè statu implementatu. U terzu livellu implica supportu basicu, ma senza teste automatizati, publicazione di custruzzioni ufficiali, è verificazione di custruzzione di codice.

Inoltre, pudemu nutà a publicazione da Microsoft di a liberazione di Rust for Windows 0.30 biblioteche, chì permettenu di utilizà a lingua Rust per sviluppà applicazioni per u Windows OS. U settore include dui pacchetti di crate (windows è windows-sys), attraversu quale pudete accede à l'API Win in i prugrammi Rust. U codice per u supportu API hè generatu dinamicamente da i metadati chì descrizanu l'API, chì vi permette di implementà u supportu micca solu per i chjamati Win API esistenti, ma per i chjamati chì appariscenu in u futuru. A nova versione aghjusta u supportu per a piattaforma di destinazione UWP (Universal Windows Platform) è implementa i tipi di Handle è Debug.

Source: opennet.ru

Add a comment