lansarea limbajului de programare a sistemului , fondată de proiectul Mozilla. Limbajul se concentrează pe siguranța memoriei, oferă gestionarea automată a memoriei și oferă instrumente pentru realizarea unui paralelism ridicat al sarcinilor fără a utiliza un colector de gunoi și .
Gestionarea automată a memoriei Rust eliberează dezvoltatorul de manipularea pointerului și protejează împotriva problemelor care decurg din manipularea memoriei de nivel scăzut, cum ar fi accesările la memorie după eliberarea, dereferențele pointerului nul, depășirile de buffer și altele asemenea. Se dezvoltă un manager de pachete pentru a distribui biblioteci, a asigura asamblarea și a gestiona dependențele de către proiect. , permițându-vă să obțineți bibliotecile necesare pentru program cu un singur clic. Un depozit este acceptat pentru a găzdui biblioteci .
Principalul :
- A fost adăugată capacitatea de a marca structuri (struct) și enumerare (enum cu bloc Variant) folosind atributul "]", care în viitor, adăugați noi câmpuri și opțiuni la structurile și enumerațiile declarate. De exemplu, dezvoltatorii de module care au structuri cu câmpuri declarate public pot folosi „#[non_exhaustive]” pentru a marca structurile care pot avea noi câmpuri adăugate în viitor. Până acum, în această situație, dezvoltatorul era nevoit să aleagă între declararea câmpurilor în mod privat și legarea la o listă imuabilă de câmpuri. Noul atribut elimină această limitare și vă permite să adăugați noi câmpuri în viitor fără riscul de a rupe codul extern compilat anterior. În pachetele crate, la potrivirea opțiunilor din secțiunea „potrivire”, este necesară o definiție explicită a măștii „_ => {...}”, acoperind posibilele câmpuri viitoare, altfel va fi afișată o eroare la adăugarea de noi câmpuri.
- abilitatea de a apela macro-ul procedural mac!() într-un context de tip. De exemplu, acum puteți scrie „type Foo = expand_to_type!(bar);” dacă „expand_to_type” este o macrocomandă procedurală.
- În blocurile „externe { ... }”. abilitatea de a utiliza macrocomenzi procedurale și cu atribute, inclusiv macrocomenzi „bang!()”, de exemplu:
macro_reguli! make_item { ($nume:ident) => { fn $nume(); } }
extern {
make_item!(alfa);
make_item!(beta);
}extern "C" {
#[macro_identitatea_mea]
fn foo();
} - În macro-uri capacitatea de a genera elemente „macro_rules!”. Se generează „macro_rules!” posibil atât în macro-uri asemănătoare funcțiilor (“mac!()”), cât și în macro-uri sub formă de atribute (“#[mac]”).
- În elementul de mapare $m:meta suport pentru valori arbitrare de enumerare a simbolurilor ("[TOKEN_STREAM]", "{TOKEN_STREAM}" și "(TOKEN_STREAM)"), de exemplu:
macro_reguli! accept_meta { ($m:meta) => {} }
accept_meta!( my::path );
accept_meta!( my::path = "lit" );
accept_meta!( my::path ( abc ) );
accept_meta!( my::path [ abc ] );
accept_meta!( my::path { abc } ); - În modul Rust 2015, ieșirea erorilor este activată pentru problemele identificate la verificarea împrumutării variabilelor (verificatorul de împrumut) folosind tehnica NLL (Non-Lexical Lifetimes). Anterior, avertismentele au fost înlocuite cu erori la rularea în modul Rust 2018.
După ce schimbarea a fost extinsă la modul Rust 2015, dezvoltatorii au putut în sfârșit să o facă de la vechiul verificator de împrumuturi.Să reamintim că sistemul de verificare bazat pe un nou mecanism de luare în considerare a duratei de viață a variabilelor împrumutate a făcut posibilă identificarea unor probleme care au trecut neobservate de vechiul cod de verificare. Deoarece ieșirea erorilor pentru astfel de verificări ar putea afecta compatibilitatea cu codul funcțional anterior, avertismentele au fost emise inițial în loc de erori.
- Atributul „const”, care determină posibilitatea utilizării lui în orice context în loc de constante, este utilizat pentru funcția is_power_of_two (pentru numere întregi fără semn).
- O nouă porțiune a API-ului a fost mutată în categoria stabilă, inclusiv macro-ul todo!() și metodele slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, au fost stabilizate.
Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32,f64} f32}::from_be_bytes, {f64,f32}::from_le_bytes și {f64,fXNUMX}::from_ne_bytes. - În managerul de pachete cargo
memorarea în cache a avertismentelor compilatorului pe disc. S-a adăugat opțiunea „metadate de marfă” la comanda „metadate de marfă”." pentru a afișa numai pachetele legate la platforma țintă specificată în coloana de rezoluție a dependenței. S-a adăugat opțiunea de configurare a versiunii http.ssl pentru a defini versiunile TLS valide.
S-a adăugat posibilitatea de a publica secțiunea „" fără a specifica cheia "versiune". - Compilatorul rustc oferă suport de nivel al treilea pentru platformele țintă thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 și mips64el-unknown-linux-muslabi64. Al treilea nivel implică suport de bază, dar fără testarea automată și publicarea versiunilor oficiale.
Sursa: opennet.ru
