lëshimi 1.47 i gjuhës së programimit sistemor , i bazuar në projektin Mozilla. Gjuha është e fokusuar në punën e sigurt me memorie, siguron menaxhim automatik të memories dhe ofron mjete për arritjen e një paralelizmi të lartë të ekzekutimit të detyrave, ndërsa eviton përdorimin e dhe (runtime përbakohet në inicializimin bazë dhe mbështetje të bibliotekës standarde).
Menaxhimi automatizuar i memories në Rust e çliron zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbron nga problemet që lindin nga puna e ulët me kujtesën, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers dhe të tjera. Për shpërndarjen e bibliotekave, sigurimin e ndërtimit dhe menaxhimin e varësive, po zhvillohet menaxheri i paketave. . Për vendosjen e librarive mbështetet një depo .
Ndryshimet kryesore :
- ĂshtĂ« realizuar mbĂ«shtetje pĂ«r tipazhe pĂ«r me madhĂ«si tĂ« rastĂ«sishme. MĂ« parĂ«, pĂ«r shkak tĂ« pamundĂ«sisĂ« pĂ«r tĂ« pĂ«rcaktuar funksione generike pĂ«r tĂ« gjitha vlerat e plota, biblioteka standarde ofronte mbĂ«shtetje tĂ« integruar pĂ«r tipazhe vetĂ«m pĂ«r array qĂ« nuk kalonin 32 elemente (tipazhet pĂ«r çdo madhĂ«si ishin tĂ« definuara statikisht). FalĂ« krijimit tĂ« funksionalitetit tĂ« gjenerikĂ«ve konstantĂ« («const generics») u krijua mundĂ«sia pĂ«r tĂ« pĂ«rcaktuar funksione generike pĂ«r çdo madhĂ«si array, por ato akoma nuk janĂ« pĂ«rfshirĂ« nĂ« mundĂ«sitĂ« stabile tĂ« gjuhĂ«s, megjithatĂ« janĂ« realizuar nĂ« kompilator dhe tani nĂ« bibliotekĂ«n standarde pĂ«r tipazhe tĂ« array tĂ« çdo madhĂ«sie.
Për shembull, kjo konstruktion në Rust 1.47 do të sjellë në daljen e përmbajtjes së array, ndonëse më parë do të kishte rezultuar në një gabim:
fn main() {
let xs = [0; 34];println!(«{:?}», xs);
} - Sigurohet një dalje më e shkurtër e gjurmëve (backtrace), të cilat printohen në situata jashtëzakonisht. Nga gjurmat përjashtohen elemente që nuk paraqesin interes në shumicën e situatave, por mbushin daljen dhe shpërqendrojnë vëmendjen nga arsyet kryesore të problemit. Për të kthyer gjurmën e plotë mund të përdoret variabla e ambientit «RUST_BACKTRACE=full». Për shembull, për kodin
fn main() {
panic!();
}më parë printohej një gjurmë në 23 etapa, tani ajo do të reduktohet në
3 etapa, tĂ« cilat lejojnĂ« tĂ« kapet menjĂ«herĂ« thelbi:thread âmainâ panicked at âexplicit panicâ, src/main.rs:2:5
stack backtrace:
0: std::panicking::begin_panic
at /rustc/dâŠd75a/library/std/src/panicking.rs:497
1: playground::main
at ./src/main.rs:2
2: core::ops::function::FnOnce::call_once
at /rustc/dâŠd75a/library/core/src/ops/function.rs:227 - Kompilatorin rustc e ka azhurnuar nĂ« ndĂ«rtimin me pĂ«rdorimin (Rust LLVM si backend pĂ«r ). NĂ« kĂ«tĂ« mĂ«nyrĂ« Ă«shtĂ« ruajtur mundĂ«sia e ndĂ«rtimit me LLVM tĂ« vjetrĂ«ve, deri nĂ« versionin 8, por si parazgjedhje (nĂ« ) tani pĂ«rdoret LLVM 11. LĂ«shimi i LLVM 11 pritet nĂ« ditĂ«t nĂ« vazhdim.
- Në platformën Windows, kompilatori rustc mbështet aktivizimin e kontrolleve të integritetit të rrjedhës së ekzekutimit (Control Flow Guard), aktivizuar përmes flagut «-C control-flow-guard». Në platformat e tjera ky flag akoma injorohet.
- Në kategorinë stabile është përkthyer një grup i ri API-sh, duke stabilizuar
Ident::new_raw,
Range::is_empty,
RangeInclusive::is_empty,
Result::as_deref,
Result::as_deref_mut,
Vec::leak,
pointer::offset_from,
f32::TAU dhe
f64::TAU. - Tregu «const», që përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantave, aplikohet në metodat:
- i ri për të gjithë të plotë, përveç zeros;
- checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub dhe saturating_mul për të gjithë të plota;
- is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace dhe is_ascii_control për llojet char dhe u8.
- Për FreeBSD instrumenti nga FreeBSD 11.4 (FreeBSD 10 nuk mbështet LLVM 11).
Burimi: opennet.ru
