süsteemse programmeerimise keele väljaanne , mille on loonud Mozilla. Keel keskendub mälu ohutule kasutamisele, tagab automaatse mälu haldamise ja pakub vahendeid kõrge paralleelsuse saavutamiseks ülesannete täitmisel, kasutamata samas prügikorjajat ja runtime'i.
Rustis tagab automaatne mälu haldamine arendajale mälukäitlemise manipuleerimise vabastamise ja kaitseb madala taseme mälu töötlemisega seotud probleemide eest, nagu mälu kasutamine pärast selle vabastamist, nullviidete de-referentsimine, puhverduspiiride ületamine jne. Raamatukogude jagamiseks, koostamise tagamiseks ja sõltuvuste haldamiseks arendatakse pakihaldurit , mis võimaldab vajalikke raamatukogusid ühe klikiga hankida. Raamatukogude paigutamiseks toetatakse hoidlapaiku .
Peamised :
- uus asünkroonse programmeerimise süntaks, mis põhineb funktsiooni „async”, ploki async move { … } ja operaatori „.await” kasutamisel, mis lihtsustab põhivoolu mitte blokeerivate käitlejate kirjutamist. võrreldes varem pakutud API-ga asünkroonse sisendi/väljundi jaoks on async/.await konstruktsioonid kergesti mõistetavad, hästi loetavad ja võimaldavad rakendada keerukaid asünkroonseid interaktsioone tuttavate juhtimisvoo mustrite, näiteks tsüklite, tingimuslausete ja erandite abil.
Async-await süntaks võimaldab luua funktsioone, mis võivad peatada oma täitmise, tagastada juhtimise põhivoolu ning seejärel jätkata täitmist kohast, kus nad peatati. Näiteks on selline peatus nõutav sisendi/väljundi töötlemisel, kus andmete järgmise partii saamise ajal saab teha muud tööd. Funktsioonid ja plokid, mis on määratletud läbi „async fn” ja „async move”, tagastavad tüübi , tuleviku asünkroonsete arvutuste viitmisse määramine. Viidatud arvutuse otsene käivitamine ja tulemus saab kätte operaatori „.await” abil. Kuni „.await” kutsumiseni ei tehta ega kavandata mingeid toiminguid, mis võimaldab luua keerulisi pesakonstruktsioone ilma lisakuludeta.
async fn first_function() -> u32 { .. }
…
let future = first_function();
…
let result: u32 = future.await; - «#![feature(bind_by_move_pattern_guards)]», mis võimaldab kasutada muutujate tüüpi seotust „» mallides ja kasutada viiteid nendele muutujatele „if” väljendi osas „«. Näiteks on nüüd lubatud järgmised konstruktsioonid:
fn main() {
let array: Box = Box::new([1, 2, 3, 4]);match array {
nums
if nums.iter().sum::() == 10=> {
drop(nums);
}
_ => unreachable!(),
}
} - Lubatud on määrata funktsioonide, sulgude ja funktsiooninäidikute parameetrite määramise ajal. Toetatakse tingimusliku kompileerimise atribuute (cfg, cfg_attr), mis juhivad lint-i kaudu diagnostikat (allow, warn, deny ja forbid) ning abiaatribuutide makrode kutsumise jaoks.
fn len(
#[cfg(windows)] slice: &[u16], // использовать параметр в Windows
#[cfg(not(windows))] slice: &[u8], // использовать в остальных ОС
) -> usize {
slice.len()
} - Murede, mis ilmnevad muutuva hulga (borrow checker) kontrollimise käigus NLL (Non-Lexical Lifetimes) tehnika kasutamisel, on muutunud fataalseteks vigadeks. Tuletame meelde, et uue eluea arvestamise mehhanismi põhjal töötav kontrollisüsteem on võimaldanud tuvastada mõningaid probleeme, mis olid vanas kontrollkoodis tähelepanuta jäänud. Kuna vigade väljastamine nende kontrollide jaoks oleks võinud mõjutada ühilduvust varem töötanud koodiga, anti alguses välja hoiatusi. Nüüd on Rust 2018 režiimis hoiatused asendatud vigadega. Järgmises väljaandes rakendatakse ka Rust 2015 režiimis vigade väljastamist, mis võimaldab vanast borrow checkerist lõplikult vabaneda;
- Märgis „const“, mis määratleb võimaluse kasutada igas kontekstis konstantide asemel, on rakendatud funktsioonidele Vec::new, String::new, LinkedList::new, str::len, [T]::len, str::as_bytes,
abs, wrapping_abs ja overflowing_abs; - Uue API partii on tõlgitud stabiilsetesse, sealhulgas on stabiliseeritud meetodid
Pin::into_inner, Instant::checked_duration_since ja Instant::saturating_duration_since; - Cargo pakettihaldurisse on lisatud võimalus kasutada konfiguratsioonifailide laiendusi „.toml”. Lisatud on esialgne tugi standardteegi otse Cargo kaudu kompileerimiseks. Uue lipuna on lisatud „—workspace”, mis asendab ebatäpselt mõistetud lipu „—all”. Metaandmetesse on lisatud uus väli „”, mis võimaldab sõltuvusi avaldades märkida git'i sildi ja versiooninumbri. Lisatud on testimisvõimalus „-Ztimings” erinevate kompileerimise etappide kestuse HTML-aruande genereerimiseks.Rustc kompilaatorisse on diagnostilistes teadetes lisatud koodihäipide kärpimine, mis ei mahu terminali. Kolmanda taseme tugi sihtplatvormidele on tagatud i686-unknown-uefi ja sparc64-unknown-openbsd. Kolmas tase tähendab põhitoetust, kuid ilma automatiseeritud testimise ja ametlike kogude avaldamiseta.
- i686-unknown-uefi ja sparc64-unknown-openbsd. Kolmas tase tähendab baastoetust, kuid ilma automatiseeritud testimise ja ametlikke koguseid avaldamiseta.
i686-unknown-uefi ja sparc64-unknown-openbsd. Kolmas tase tähendab põhitoetust, kuid ilma automatiseeritud testimise ja ametlike kogude avaldamiseta.
Allikas: opennet.ru
