U publikua versioni i gjuhës së programimit Rust 1.75, e cila fillimisht u zhvillua nga projekti Mozilla, por tani zhvillohet nën mbikëqyrjen e një organizate jo-fitimprurëse të pavarur, Rust Foundation. Gjuha fokusohet në punën e sigurt me memorien dhe ofron mjete për arritjen e paralelizmit të lartë në ekzekutimin e detyrave, duke shmangur përdorimin e mbledhësve të plehrave dhe runtime (runtime përfshin inicimin themelor dhe mbështetje të bibliotekës standarde).
Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit të treguesve dhe mbrojnë nga problemet që lindin nga puna me nivel të ulët me kujtesën, siç janë referimi në një zonë kujtese pas çlirimit të saj, dereferimi i treguesve null, tejkalimi i kufijve të tamponëve etj. Për shpërndarjen e biblioteka, për të siguruar ndërtimin dhe menaxhimin e varësive, projekti zhvillon menaxherin e paketave Cargo. Për ruajtjen e bibliotekave, mbështetet depoja crates.io.
Përdorimi i sigurt i memories sigurohet në Rust gjatë kompilimit përmes verifikimit të lidhjeve, gjurmimit të pronësisë së objekteve, përllogaritjes së kohëzgjatjes së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në memorie gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtje nga tejkalimet e numrave të plotë, kërkon inicializim të detyrueshëm të vlerave të variablave para përdorimit, menaxhon më mirë gabimet në bibliotekën standarde, aplikon konceptin e lidhjeve dhe variablave të pandryshueshëm (immutable) si parazgjedhje, dhe ofron tipizim të fortë statik për minimizimin e gabimeve logjike.
TĂ« rejat kryesore:
- Shtuar mundësia e përdorimit të «async fn» dhe shënjestrimit «->impl Trait» në tipazhet private. Për shembull, duke përdorur «->impl Trait» mund të shkruhet një metodë tipazhi që kthen një iterator: trait Container { fn items(&self) -> impl Iterator; } impl Container për MyContainer { fn items(&self) -> impl Iterator { self.items.iter().cloned() } }
Gjithashtu, mund të krijohen tipazhe që përdorin «async fn»: trait HttpService { async fn fetch(&self, url: Url) -> HtmlBody; // do të zhvillohet në: // fn fetch(&self, url: Url) -> impl Future; }
- Shtuar API për llogaritjen e zhvendosjeve në bajta në lidhje me treguesit. Kur punoni me tregues të pastër («*const T» dhe «*mut T»), mund të jetë e nevojshme të bëni operacione për të shtuar zhvendosje në tregues. Më parë, për këtë mund të përdorej konstrukti «::add(1)», që shtonte numrin e bajtave që përputhet me madhësinë «size_of::()». API i ri thjeshton këtë operacion dhe lejon manipulimin e zhvendosjeve në bajta pa nevojën për ta konvertuar paraprakisht tipin në «*const u8» ose «*mut u8».
- pointer::byte_add
- pointer::byte_offset
- pointer::byte_offset_from
- pointer::byte_sub
- pointer::wrapping_byte_add
- pointer::wrapping_byte_offset
- pointer::wrapping_byte_sub
- Puna për rritjen e performancës së kompilatorit rustc ka vazhduar. Shtuar optimizuesin BOLT, i cili punon në fazën pas përfundimit të lidhjes dhe përdor informacionin nga një profil i përgatitur më parë. Përdorimi i BOLT lejon të përshpejtohet ekzekutimi i kompilatorit me rreth 2% duke ndryshuar dispozitën e kodit të bibliotekës librustc_driver.so për një përdorim më efikas të cache-it të procesorit.
Aktivizuar ndërtimi i kompilatorit rustc me opsionin «-Ccodegen-units=1», që lejon përmirësimin e cilësisë së optimizimit në LLVM. Testet e kryera tregojnë një rritje të performancës për ndërtimet me «-Ccodegen-units=1» me rreth 1.5%. Optimizimet e shtuara përfshihen si standard vetëm për platformën x86_64-unknown-linux-gnu.
Optimizimet e përmendura më parë ishin testuar nga kompania Google për të shkurtuar kohën e ndërtimit të komponenteve të platformës Android, të shkruara në gjuhën Rust. Përdorimi i «-C codegen-units=1» gjatë ndërtimit të Android lejoi uljen e madhësisë së mjetit me 5.5% dhe rritjen e performancës me 1.8%, ndërkohë që koha e ndërtimit të vetë mjetit u dyfishua pothuajse.
Aktivizimi i mbledhjes sĂ« plehrave gjatĂ« lidhjes («âgc-sections») mundĂ«soi arritjen e njĂ« rritje tĂ« performancĂ«s deri nĂ« 1.9%, aktivizimi i optimizimit nĂ« fazĂ«n e lidhjes (LTO) deri nĂ« 7.7%, dhe optimizimet e bazuara nĂ« profilin e ekzekutimit tĂ« kodit (PGO) deri nĂ« 19.8%. NĂ« fund, u aplikuan optimizime duke pĂ«rdorur utilitarin BOLT, tĂ« cilat lejuan arritjen e njĂ« rritje tĂ« shpejtĂ«sisĂ« sĂ« ndĂ«rtimit deri nĂ« 24.7%, por madhĂ«sia e mjetit u rrit me 10.9%.

- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- Atomic*::from_ptr
- FileTimes
- FileTimesExt
- File::set_modified
- File::set_times
- IpAddr::to_canonical
- Ipv6Addr::to_canonical
- Option::as_slice
- Option::as_mut_slice
- pointer::byte_add
- pointer::byte_offset
- pointer::byte_offset_from
- pointer::byte_sub
- pointer::wrapping_byte_add
- pointer::wrapping_byte_offset
- pointer::wrapping_byte_sub
- Karakteristika «const», që përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantave, është aplikuar në funksionet:
- Ipv6Addr::to_ipv4_mapped
- MaybeUninit::assume_init_read
- MaybeUninit::zeroed
- mem::discriminant
- mem::zeroed
- Implementuar një nivel të tretë mbështetjeje për platformën csky-unknown-linux-gnuabiv2hf, i586-unknown-netbsd dhe mipsel-unknown-netbsd. Një nivel i tretë nënkupton mbështetje bazë, por pa testim automatizimi, publikim të paketave zyrtare dhe verifikim të mundësisë për ndërtimin e kodit.
Gjithashtu, mund të përmendet versioni i ri i projektit Hermit, i cili zhvillon një bërthamë të specializuar (unikernel), e shkruar në gjuhën Rust, duke ofruar mjete për ndërtimin e aplikacioneve të pavarura, të cilat mund të funksionojnë mbi një hipervizor ose në pajisje të palakmuara pa ndërmjetësim shtesë dhe pa sistem operativ. Gjatë ndërtimit, aplikacioni lidhet statikisht me bibliotekën, e cila implementon të gjithë funksionalitetin e nevojshëm, pa u lidhur me bërthamën e OS-së dhe bibliotekat sistemore. Kodi i projektit shpërndahet nën licencat Apache 2.0 dhe MIT. Mbështetet ndërtimi për ekzekutimin e aplikacioneve të shkruara në gjuhët Rust, Go, Fortran, C dhe C++. Po ashtu, projekti zhvillon një ngarkues të vetin, që lejon nisjen e Hermit duke përdorur QEMU dhe KVM.
Burimi: opennet.ru

