Lingua di prugrammazione Rust versione 1.60

A liberazione di a lingua di prugrammazione Rust 1.60 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:

  • U compilatore rustc hà un sistema stabilizatu basatu in LLVM per generà dati di copertura utilizati per valutà a copertura di codice durante a prova. Per attivà i dati di copertura durante l'assemblea, duvete aduprà a bandiera "-Cinstrument-coverage", per esempiu, principiendu l'assemblea cù u cumandimu "RUSTFLAGS="-C instrument-coverage" cargo build". Dopu avè eseguitu u schedariu eseguibile compilatu in questu modu, u schedariu default.proraw serà salvatu in u cartulare attuale, per u processu chì pudete aduprà l'utilità llvm-profdata da u cumpunente llvm-tools-preview. L'output processatu da llvm-profdata pò esse passatu à llvm-cov per generà un rapportu di copertura di codice annotatu. L'infurmazione nantu à u ligame à u codice fonte hè presa da u schedariu eseguibile chì hè esaminatu, chì include i dati necessarii nantu à a cunnessione trà i contatori di copertura è u codice. 1| 1|fn main() { 2| 1| println!("Salutu, mondu!"); 3| 1|}
  • In u gestore di pacchetti di carica, u supportu per a bandiera "-timings" hè statu stabilizatu, chì include a generazione di un rapportu detallatu nantu à u prugressu di a custruzzione è u tempu di esecuzione di ogni passu. U rapportu pò esse utile per ottimisà u rendiment di u prucessu di assemblea.
  • U gestore di pacchettu di carica offre una nova sintassi per u mecanismu di compilazione cundizionale è selezzione di dipendenze opzionali, cunfigurate in u schedariu Cargo.toml elencu una lista di proprietà chjamate in a sezione [caratteristiche] è attivata per attivà e proprietà durante a custruzione di pacchettu. utilizendu a bandiera "--caratteristiche". A nova versione aghjusta u supportu per e dependenzii in spazii di nomi separati è dipendenze debuli.

    In u primu casu, hè pussibule aduprà elementi cù u prefissu "dep:" in a sezione "[caratteristiche]" per ligà esplicitamente à una dependenza facultativa senza rapprisintà implicitamente sta dependenza cum'è una funzione. In u sicondu casu, u supportu per a marcatura cù u segnu "?" hè statu aghjuntu. ("nome-pacchetto?/nome-funzione") dipendenze opzionali chì duveranu esse incluse solu se qualchì altra pruprietà include a dependenza facultativa data. Per esempiu, in l'esempiu sottu, l'attivazione di a pruprietà serde permetterà a dependenza "serde", è ancu a pruprietà "serde" per a dependenza "rgb", ma solu se a dependenza "rgb" hè attivata in altrò: [dependenze] serde = { version = " 1.0.133 ", optional = true } rgb = { version = "0.8.25", optional = true } [caratteristiche] serde = ["dep:serde", "rgb?/serde"]

  • U supportu per a compilazione incrementale, chì hè stata disattivata in l'ultima versione, hè stata tornata. U bug di compilatore chì hà causatu a funzione per esse disattivata hè stata risolta.
  • Risolviu qualchi prublemi cù furnisce i timers Instant cù una guaranzia di timing monotonicu, chì piglia in contu u tempu passatu da u sistema in modu di sonnu. Nanzu, l'API OS hè stata utilizata ogni volta chì hè pussibule per uperà u cronometru, chì ùn hà micca pigliatu in cunsiderà situazioni problematiche chì rompenu a monotunia di u tempu, cum'è i prublemi di hardware, l'usu di virtualizazione, o errori in u sistema operatore.
  • Una nova parte di l'API hè stata trasferita à a categuria di stabile, cumprese i metudi è l'implementazione di i tratti sò stati stabilizzati:
    • Arc::novu_ciclicu
    • Rc::novu_ciclicu
    • slice::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • ForseUninit::assume_init_drop
    • ForseUninit::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
    • usu::abs_diff
    • Display per io::ErrorKind
    • Da per ExitCode
    • Micca per ! (tipo "mai")
    • _Op_Assegna<$t>
    • arch::is_aarch64_feature_detected!
  • U terzu livellu di supportu hè statu implementatu per e plataforme mips64-openwrt-linux-musl * è armv7-unknown-linux-uclibceabi (softfloat). U terzu livellu implica un supportu basicu, ma senza teste automatizate, publicà custruzzioni ufficiali, o cuntrollà se u codice pò esse custruitu.
  • U compilatore hè statu cambiatu per utilizà LLVM 14.

Inoltre, pudete nutà:

  • Aghjunghje supportu per bootstrapping u compilatore rustc utilizendu u backend rustc_codegen_gcc, chì vi permette di utilizà a biblioteca libgccjit da u prughjettu GCC cum'è generatore di codice in rustc, chì permette à Rustc di furnisce supportu per l'architetture è ottimisazioni dispunibili in GCC. A prumuzione di u compilatore significa a capacità di utilizà un generatore di codice basatu in GCC in rustc per custruisce u compilatore rustc stessu. In u latu praticu, sta funzione permette di custruisce prugrammi di rust per architetture chì ùn eranu micca supportati prima in rustc.
  • A liberazione di u toolkit uutils coreutils 0.0.13 hè dispunibule, in u quale hè sviluppatu un analogu di u pacchettu GNU Coreutils, riscritto in a lingua Rust. Coreutils vene cun più di centu utilità, cumprese sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln, è ls. L'obiettivu di u prugettu hè di creà una implementazione alternativa multipiattaforma di Coreutils, capace di eseguisce nantu à e plataforme Windows, Redox è Fuchsia, è ancu di distribuzione sottu a licenza permissiva MIT, invece di a licenza copyleft GPL.

    A nova versione hà migliuratu l'implementazione di parechje utilità, cumprese a cumpatibilità significativamente mejorata di l'utilità cp, dd, df, split è tr cù i so contraparti di u prughjettu GNU. Documentazione in linea furnita. U parser clap hè utilizatu per analizà l'argumenti di a linea di cummanda, chì hà migliuratu l'output per a bandiera "--help" è aghjunghjenu supportu per l'abbreviazioni di cumandamenti longu (per esempiu, pudete specificà "ls -col" invece di "ls -color". ").

Source: opennet.ru

Add a comment