U publikua versioni i gjuhës së programimit të përgjithshme Rust 1.77, e cila është zhvilluar fillimisht nga projekti Mozilla, por tani zhvillohet nën mbikëqyrjen e organizatës jo-fitimprurëse Rust Foundation. Gjuha fokusohet në sigurinë e menaxhimit të memories dhe ofron mjete për të arritur një nivele të lartë të paralelizmit në ekzekutimin e detyrave, pa e përdorur mbledhësin e plehrave dhe runtime (runtime përfshin vetëm inicializimin e bazës dhe menaxhimin e 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 mbështetje për literalët për stringat C (c»tekst»), të cilat ruhen në memorie me një simbol përfundimtar zero dhe janë të asociuar me llojin «CStr». Parashikohet që mbështetja për stringat C do të thjeshtojë shkruan e kodit që ndërvepron me ndërprerës të shkruar në gjuhë programimi që përdorin stringa të përfunduara me një byte zero dhe do të mundësojë verifikimet përkatëse në fazën e kompilimit. const HELLO: &core::ffi::CStr = c»Hello, world!»;
- Në funksionet që ekzekutohen asinkronisht, të shpallura me shprehjen «async fn», është lejuar përdorimi i rekursivitetit, dmth. këto funksione tani mund të thërrasin vetveten. async fn fib(n: u32) -> u32 { match n { 0 | 1 => 1, _ => Box::pin(fib(n-1)).await + Box::pin(fib(n-2)).await } }
- Stabilizuar makron offset_of!, e cila përcakton offset-in në byte të fushave të strukturave, enum-eve, bashkimeve dhe tuples, në lidhje me fillimin e tipit. Në praktikë, makroja mund të jetë e dobishme në situatat kur kërkohet punë në nivelin e offset-eve të fushave pa pasur një instancë të tipit. Në veçanti, funksionaliteti offset_of është i nevojshëm kur zhvilloni komponente të nivelit të ulët, siç janë drejtuesit. use std::mem; #[repr(C)] struct FieldStruct { first: u8, second: u16, third: u8 } assert_eq!(mem::offset_of!(FieldStruct, first), 0); assert_eq!(mem::offset_of!(FieldStruct, second), 2); assert_eq!(mem::offset_of!(FieldStruct, third), 4);
- Në menaxherin e paketave Cargo, në profilet e lëshimit, siç është parazgjedhja, është e aktivizuar pastrimi i skedarëve nga të dhënat e ndihmës (strip = «debuginfo»), nëse në profilin Cargo nuk është aktivizuar qartë mënyra e ndihmës, dmth. nëse parametrat debug = 0.
- Aktivizuar si parazgjedhje opsioni «-Zthir-unsafeck=on», i cili garanton kontrollin e unsafe për përfaqësimin e mesëm THIR («Typed High-Level Intermediate Representation»).
- Shtuar kontrolli lint static_mut_refs për të dhënë tërheqje në përdorimin e referencave në vlera statike të ndryshueshme.
- Implementuar mundĂ«sinĂ« e pĂ«rdorimit tĂ« tipazhit «From<&[T; N]>» pĂ«r tipin «Cow<[T]>». fn foo(data: impl Into<Cow<âstatic, [&âstatic str]>>) { /* ⊠*/ } fn main() { foo(&[«hello», «world»]); }
- Në kompilator është siguruar rreshtimi i tipeve 16-byte i128 dhe u128 për sistemet x86.
- Një sasi e re API është kaluar në kategorinë stabile, përfshirë stabilizimin e metodave dhe implementimeve të tipazheve:
- array::each_ref
- array::each_mut
- core::net
- f32::round_ties_even
- f64::round_ties_even
- mem::offset_of!
- slice::first_chunk
- slice::first_chunk_mut
- slice::split_first_chunk
- slice::split_first_chunk_mut
- slice::last_chunk
- slice::last_chunk_mut
- slice::split_last_chunk
- slice::split_last_chunk_mut
- slice::chunk_by
- slice::chunk_by_mut
- Bound::map
- File::create_new
- Mutex::clear_poison
- RwLock::clear_poison
- Implementuar një nivel të tretë mbështetjeje për platformat aarch64-unknown-illumos, hexagon-unknown-none-elf, riscv32imafc-esp-espidf dhe riscv32im-risc0-zkvm-elf. Nivel i tretë nënkupton mbështetje bazë, por pa testim automatik, publikim të paketave zyrtare dhe kontrollin mbi mundësinë e ndërtimit të kodit.
Burimi: opennet.ru
