Lingua di prugrammazione Rust versione 1.34

A lingua di prugrammazione di u sistema Rust 1.34, sviluppata da u prughjettu Mozilla, hè stata liberata. A lingua fucalizza nantu à a sicurità di a memoria, furnisce una gestione automatica di a memoria, è furnisce un mezzu per ottene un parallelismu elevatu di u travagliu senza usà un cullettore di basura o runtime.

A gestione automatica di a memoria di Rust libera u sviluppatore da a manipulazione di u puntatore è prutegge contr'à i prublemi derivanti da a manipulazione di memoria di livellu bassu, cum'è l'accessu di memoria dopu senza, dereferences di puntatore nulla, buffer overruns, è simili. Per distribuisce e biblioteche, assicurà l'assemblea è gestisce e dipendenze, u prugettu sviluppa u gestore di pacchetti Cargo, chì permette di ottene e librerie necessarie per u prugramma in un clic. U repository crates.io hè supportatu per l'ospitu di biblioteche.

Innuvazioni principali:

  • U gestore di pacchetti Cargo hà aghjustatu arnesi per travaglià cù registri di pacchetti alternativi chì ponu coexiste cù u registru publicu crates.io. Per esempiu, i sviluppatori di l'applicazioni pruprietariu ponu avà usà u so propiu registru privatu, chì pò esse usatu quandu elencu dipendenze in Cargo.toml, è applicà un mudellu di versioning simili à crates.io per i so prudutti, è ancu riferite dipendenze à i dui crati. io è à u vostru propiu registru.

    Per aghjunghje un registru esternu à ~/.cargo/config
    una nova opzione "my-registry" hè furnita in a sezione "[registries]", è una opzione "other-crate" hè stata aghjunta per mintuvà u registru esternu in dependenzii in Cargo.toml in a sezione "[dependencies]". Per cunnette à un registru supplementu, simpricimenti mette u token di autentificazione in u ~/.cargo/credentials file è eseguite u cumandimu.
    "cargo login --registry=my-registry" è per publicà un pacchettu -
    "cargo publish -registry=my-registry";

  • Hè aghjuntu un supportu tutale per l'usu di l'operatore "?". in doctests, chì permettenu di utilizà codice di esempiu da a documentazione cum'è testi. Operatore prima
    "?" puderia esse usatu per trattà l'errori durante l'esekzione di a prova solu in presenza di a funzione "fn main()" o in e funzioni "#[test]";

  • In l'attributi persunalizati definiti utilizendu macros procedurali, hè pussibule aduprà setti arbitrarii di tokens ("#[attr($tokens)]", "#[attr[$tokens]] è #[attr{$tokens}]"). Nanzu, l'elementi puderanu esse specificati solu in un arbre / forma recursiva usendu litterali di stringa, per esempiu "#[foo(bar, baz(quux, foo = "bar")]", ma avà hè pussibule aduprà enumerazioni (' #[range(0. .10)]') è custruzzioni cum'è "#[bound(T: MyTrait)]";
  • I tratti TryFrom è TryInto sò stati stabilizati, chì permettenu cunversione di tipu cù a gestione di l'errore. Per esempiu, metudi cum'è from_be_bytes cù tipi interi utilizanu arrays cum'è input, ma i dati spessu venenu in un tipu Slice, è a cunversione trà arrays è fette hè problematicu per fà manualmente. Cù l'aiutu di novi caratteristiche, l'operazione specificata pò esse realizatu nantu à a mosca attraversu una chjama à .try_into (), per esempiu, "let num = u32::from_be_bytes (slice.try_into ()?)". Per e cunversione chì sempre riescenu (per esempiu, da u tipu u8 à u32), un tipu d'errore infallibile hè statu aghjuntu per permette l'usu trasparente di
    TryFrom per tutte l'implementazioni esistenti di "From";

  • Deprecated the CommandExt::before_exec funzione, chì hà permessu l'esekzione di un gestore prima di exec chì hè stata eseguita in u cuntestu di un prucessu di u zitellu forked dopu a chjama di fork(). In tali cundizioni, certi risorsi di u prucessu parentale, cum'è i descrittori di fugliali è i zoni di memoria mappati, puderanu esse duplicati, chì puderanu purtà à un cumpurtamentu indefinitu è ​​un funziunamentu incorrectu di biblioteche.
    Invece di before_exec, hè cunsigliatu di utilizà a funzione insegura CommandExt::pre_exec.

  • Tipi interi atomici stabilizati firmati è senza signu chì varienu in grandezza da 8 à 64 bits (per esempiu, AtomicU8), è ancu i tipi signati NonZeroI[8|16|32|54|128].
  • Una nova parte di l'API hè stata spustata in a categuria stabile, cumprese Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] è i ​​metudi SystemTime sò stati stabilizati ::checked_[add|sub]. E funzioni iter::from_fn è iter::successori sò stati stabilizati;
  • Per tutti i tipi interi, i metudi checked_pow, saturating_pow, wrapping_pow è overflowing_pow sò implementati;
  • Aggiunta l'abilità di attivà ottimisazioni in u stadiu di ligame specificendu l'opzione di creazione "-C linker-plugin-lto" (rustc compila u codice Rust in u bitcode LLVM, chì permette l'ottimisazioni LTO per esse applicate).

Source: opennet.ru

Add a comment