lëshimi i gjuhës së programimit sistemor , i zhvilluar nga projekti Mozilla. Gjuha fokusohet në punën e sigurt me memorien, ofron menaxhim automatik të memories dhe siguron mjete për të arritur një paralelism të lartë në ekzekutimin e detyrave, pa përdorur mbledhës plehrash apo runtime.
Menaxhimi automatik i memories në Rust përmban zhvilluesit nga manipulimi i treguesve dhe mbron ata nga problemet që lindin për shkak të punës me nivel të ulët me memorien, siç janë qasjet në hapësirën e memories pas lirimit të saj, dereferencimi i treguesve nul, dalja jashtë kufijve të tamponit etj. Për shpërndarjen e biblioteka, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti po zhvillohet menaxher për paketat , që lejon shfrytëzimin e bibliotekave të nevojshme për programin me një klik. Për vendosjen e bibliotekave, mbështetet repository .
Ndryshimet kryesore :
- Tipi i stabilizuar (trait) , i cili përfaqëson një vlerë, llogaritja e së cilës mund të mos ketë përfunduar ende gjatë përdorimit të blloqeve async / .await. Vlerat asinkrone të përcaktuara përmes Future mundësojnë vazhdimin e ekzekutimit në një fill të punës, duke pritur gjithashtu për përfundimin e llogaritjeve të një vlerë të caktuar;
- Biblioteka e stabilizuar , e cila ofron tregues inteligjentë dhe koleksione për të menaxhuar vlerat e alokuara në memorie. Për alokimin e memories, std tani përdor tipin , i cili ri-eksportohet nga alloc. Përdorimi i veçantë i alloc ka kuptim në aplikacione që nuk janë të lidhura me std («#![no_std]»), si dhe në biblioteka të destinuara për të operuar në programe të tilla pa std;
- Për të anashkaluar verifikimet e inicializimit të duhur të vlerave një tip ndërmjetës , i cili mund të përdoret si një alternativë më të sigurt për funksionin mem::uninitialized. Funksioni mem::uninitialized është i dobishëm për krijimin e shpejtë të masave, por e mashtron kompajlerin për shkak se krijon një përshtypje të inicializimit, ndërsa në të vërtetë vlera mbetet e pa inicializuar. MaybeUninit lejon të shprehet qartë tek kompajleri se vlera është e pa inicializuar, të marrë parasysh sjelljen e mundshme të paqartë të lidhur me të, si dhe të organizojë një kontroll nëpërmjet «maybe_t:» dhe inicializimin në faza me nënshkrimin e përfundimit të saj duke përdorur thirrjen «.assume_init()». Me shfaqjen e MaybeUninit, funksioni mem::uninitialized u shpall i vjetruar dhe nuk rekomandohet për përdorim;
- Teknika NLL (Rrethimi i Jo-Leksikëve), e cila zgjeroi sistemin e llogaritjes së kohës së jetesës së variablave të huazuara, është stabilizuar për gjuhën Rust 2015 (fillimisht NLL mbështetej vetëm nga Rust 2018). Në vend të lidhjes së kohës së jetesës në nivelin leksikor, NLL bën llogaritjen në nivelin e grupit të treguesve në grafikën e fluksit të ekzekutimit. Ky qasje lejon përmirësimin e cilësisë së kontrollit të huazimit të variablave (borrow checker) dhe lejon për të ekzekutuar disa lloje të kodit të saktë, përdorimi i të cilit më parë shkonte në një gabim. Sjellja e re gjithashtu e thjeshton ndjeshëm debugin;
- Ekluzhuar një realizim të ri të skemave asociative , i bazuar në aplikimin e strukturës (automatikisht ngarkohet , nëse nuk është shprehur ndryshe, për shembull, std::HashMap, i cili bazohet në SipHash 1-3). Ndërfaqja programuese mbeti e njëjtë, ndërsa dallimet e dukshme për zhvilluesin përfshijnë një rritje të performancës dhe një reduktim të konsumit të memories;
- NĂ« menaxherin e paketave cargo opcionin «âoffline», qĂ« aktivizon modalitetin e punĂ«s pa lidhje me rrjetin, ku gjatĂ« instalimit tĂ« varĂ«sive pĂ«rdoren vetĂ«m paketat e ruajtura nĂ« sistemin lokal. NĂ«se njĂ« varĂ«si nuk Ă«shtĂ« e pranishme nĂ« cache-in lokal, do tĂ« jepet njĂ« gabim. PĂ«r tĂ« parakaluar varĂ«sitĂ« nĂ« cache-in lokal para kalimit nĂ« offline, mund tĂ« pĂ«rdoret komanda «cargo fetch»;
- Realizuar mundësinë e thirrjes së makros «dbg!» me disa argumente;
- Shenja «const», e cila përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantave, është aplikuar për metodat
Layout::from_size_align_unchecked,
mem::needs_drop,
NonNull::dangling dhe
NonNull::cast; - Në rangun e stabilëve është kaluar një grusht i ri API, përfshirë metodat e stabilizuara
task::Waker, task::Poll,
VecDeque::rotate_left, VecDeque::rotate_right,
Read::read_vectored, Write::write_vectored,
Iterator::copied,
BorrowMut (për vargjet) dhe str::as_mut_ptr.
Burimi: opennet.ru
