izdanje sistemskog programskog jezika , osnovan od strane Mozilla projekta. Jezik se fokusira na sigurnost memorije, pruža automatsko upravljanje memorijom i pruža alate za postizanje visokog paralelizma zadataka bez korištenja sakupljača smeća i .
Rust-ovo automatsko upravljanje memorijom oslobađa programera od manipulacije pokazivačem i štiti od problema koji proizlaze iz manipulacije memorijom na niskom nivou, kao što su pristupi memoriji nakon slobodne upotrebe, dereferenciranje nulte pokazivača, prekoračenje bafera i slično. Razvija se menadžer paketa za distribuciju biblioteka, osiguravanje sklapanja i upravljanje ovisnostima od strane projekta. , što vam omogućava da jednim klikom dobijete biblioteke potrebne za program. Podržano je spremište za hostiranje biblioteka .
Glavni :
- Dodata mogućnost označavanja struktura (struct) i nabrajanja (enum sa blokom Variant) pomoću atributa "]", koji u budućnosti, dodajte nova polja i opcije deklarisanim strukturama i enumeracijama. Na primjer, programeri modula koji imaju strukture s javno deklariranim poljima mogu koristiti "#[non_exhaustive]" da označe strukture koje mogu imati nova polja dodana u budućnosti. Do sada, u ovoj situaciji, programer je bio primoran da bira između privatnog deklarisanja polja i vezivanja za nepromjenjivu listu polja. Novi atribut uklanja ovo ograničenje i omogućava vam da dodate nova polja u budućnosti bez rizika od razbijanja prethodno kompajliranog eksternog koda. U paketima za sanduke, prilikom uparivanja opcija u odjeljku “match”, potrebna je eksplicitna definicija maske “_ => {...}” koja pokriva moguća buduća polja, inače će se prikazati greška prilikom dodavanja novih polja.
- mogućnost pozivanja proceduralnog makroa mac!() u kontekstu tipa. Na primjer, sada možete napisati “type Foo = expand_to_type!(bar);” ako je “expand_to_type” proceduralni makro.
- U blokovima "extern { ... }". mogućnost korištenja proceduralnih i atributnih makroa, uključujući "bang!()" makroe, na primjer:
macro_rules! make_item { ($name:ident) => { fn $name(); } }
extern {
make_item!(alfa);
make_item!(beta);
}eksterni "C" {
#[makro_moj_identitet]
fn foo();
} - U makroima sposobnost generiranja elemenata "macro_rules!". Generisanje "macro_rules!" moguće i u makroima sličnim funkciji (“mac!()”) iu makroima u obliku atributa (“#[mac]”).
- U $m:meta elementu mapiranja podrška za proizvoljne vrijednosti nabrajanja tokena (“[TOKEN_STREAM]”, “{TOKEN_STREAM}” i “(TOKEN_STREAM)”), na primjer:
macro_rules! 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 } ); - U režimu Rust 2015, izlaz greške je omogućen za probleme identifikovane prilikom provjere pozajmljivanja varijabli (provjera zaduživanja) korištenjem tehnike NLL (neleksički vijek trajanja). Ranije su upozorenja zamijenjena greškama kada su radili u Rust 2018 modu.
Nakon što je promjena proširena na Rust 2015 mod, programeri su konačno uspjeli iz stare posude.Podsjetimo da je sistem verifikacije zasnovan na novom mehanizmu za uzimanje u obzir životnog vijeka pozajmljenih varijabli omogućio da se identifikuju neki problemi koji su stari verifikacioni kod ostali neprimijećeni. Budući da bi izlaz greške za takve provjere mogao utjecati na kompatibilnost s prethodno funkcionalnim kodom, u početku su izdavana upozorenja umjesto grešaka.
- Atribut “const”, koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se za funkciju is_power_of_two (za neoznačene cijele brojeve).
- Novi dio API-ja je premješten u stabilnu kategoriju, uključujući todo!() makro i slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metode su stabilizirane.
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_ne32_bytes, f64}::from_be_bytes, {f32,f64}::from_le_bytes, i {f32,f64}::from_ne_bytes. - U paket menadžeru teret
keširanje upozorenja kompajlera na disku. Dodata opcija "metapodaci tereta" naredbi "metapodaci tereta"." da biste prikazali samo pakete vezane za navedenu ciljnu platformu u stupcu rezolucije ovisnosti. Dodata opcija konfiguracije http.ssl-verzije za definiranje važećih TLS verzija.
Dodata mogućnost objavljivanja odjeljka "" bez navođenja ključa "verzija". - Rustc kompajler pruža podršku trećeg nivoa za ciljne platforme thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 i mips64el-unknown-linux-muslabi64. Treći nivo uključuje osnovnu podršku, ali bez automatizovanog testiranja i objavljivanja zvaničnih verzija.
izvor: opennet.ru
