Lini i programimit Rust 1.99 është publikuar, i bazuar në projektin Mozilla, por tani po zhvillohet nën mbikëqyrjen e një organizate të pavarur jofitimprurëse, Rust Foundation. Gjuha fokusohet në punën e sigurt me kujtesën dhe ofron mjete për të arritur një paralelizëm të lartë në ekzekutimin e detyrave, duke u menaxhuar pa përdorimin e mbledhësit të plehrave dhe runtime (runtime reduktohet në inicializimin bazë dhe mbështetje për bibliotekën standarde).
Metodat e punës me memorie në Rust janë të orientuara për të eliminuar gabimet gjatë manipulimit të treguesve dhe për të mbrojtur nga problemet që lindin nga puna me nivel të ulët me memorinë, siç janë akseset në zona memorien pas lirimit të saj, dereferencimi i treguesve null, tejkalimi i kufijve të bufeve etj. Për shpërndarjen e bibliotekave, sigurinë e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me ndihmën e menaxherit të paketave Cargo. Mbështetet një depo për bibliotekat, crates.io.
Puna e sigurt me kujtesën sigurohet në Rust gjatë kompilimit përmes verifikimit të referencave, ndjekjes së pronësisë së objekteve, llogaritjes së kohëzgjatjes së jetës së objekteve (fushave të dukshmërisë) dhe vlerësimit të saktësisë së qasjes në kujtesë gjatë ekzekutimit të kodit. Rust gjithashtu ofron mjete për mbrojtjen nga tejkalimet e numrave të plotë, kërkon inicializimin e detyrueshëm të vlerave të variablave para përdorimit, trajton më mirë gabimet në bibliotekën standarde, aplikon konceptin e referencave dhe variablave të pandryshueshëm (immutable) si standard dhe ofron tipizimin e fortë statik për të minimizuar gabimet logjike.
Novitetet kryesore:
- ĂshtĂ« ofruar mundĂ«sia pĂ«r krijimin e funksioneve nĂ« gjuhĂ«n Rust me numĂ«r variativ argumentesh (variadic), tĂ« eksportuara pĂ«r thirrje nga projekte nĂ« gjuhĂ«n C (C ABI). Si elementi pĂ«rfundimtar i listĂ«s sĂ« parametrave nĂ« kĂ«to funksione mund tĂ« pĂ«rdoret konstrukti «âŠÂ», i cili trajtohet nĂ« Rust me njĂ« tip tĂ« veçantĂ« VaList, qĂ« funksionon nĂ« mĂ«nyrĂ« tĂ« ngjashme me va_list nĂ« C. unsafe extern «C» fn sum(mut args: âŠ) -> i32 { let a = unsafe { args.next_arg::() }; let b = unsafe { args.next_arg::() }; a + b } fn foo() -> i32 { unsafe { sum(0i32, 2i32) } }
- Janë stabilizuar funksionet Layout::for_value_raw, mem::size_of_val_raw dhe mem::align_of_val_raw, të cilat lejojnë të përcaktohet sigurtë madhësia dhe përputhshmëria për treguesit e papërpunuar (raw pointer), duke përfshirë përdorimin e llojeve me madhësi dinamike, siç janë slices, pa nevojën për të krijuar referenca për të dhënat.
- Në dokumentacion është shtuar rekomandimi për të shmangur çlirimin e kujtesës, për të cilën është marrë një referencë statike me një kohë të pakufizuar ( &'static) përmes thirrjes Box::leak (round-trip unleaking), pasi një veprim i tillë potencialisht mund të shkaktojë probleme për shkak të mos përputhshmërisë me optimizimet e ardhshme të kompajlerit dhe mekanizmat e lidhur për alokimin e kujtesës. Në vend të krijimit të një referencë statike për një transferim të përkohshëm të pronës, rekomandohet përdorimi i treguesve të papërpunuar, për shembull, përmes thirrjes Box::into_non_null.
- Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
- IntoIterator për Box
- IntoIterator për &Box
- IntoIterator për &mut Box
- VecDeque::retain_back
- core::ffi::VaList
- Box::into_non_null
- Box::from_non_null
- Vec::into_parts
- Vec::from_parts
- core::mem::size_of_val_raw
- core::mem::align_of_val_raw
- core::alloc::Layout::for_value_raw
- String::from_utf8_lossy_owned
- string::FromUtf8Error::into_utf8_lossy
- FusedIterator për StepBy
- std::fs::set_times
- std::fs::set_times_nofollow
- Në menaxherin e paketave cargo është implementuar një profil i ri i integruar "debug", i ngjashëm me profilin "dev" (në të ardhmen, mundësitë për debugs dhe zhvillim planifikohen të ndahen). Kur ndërtohet në CI, kompulimi inkremental është i çaktivizuar si standard.
- Platformat e synuara riscv64-unknown-linux-musl janë e kaluar në nivelin e dytë të mbështetjes, i cili nënkupton garantimin e ndërtimit, por pa garanci gjatë kalimit të setit të testeve.
Gjithashtu mund të theksohet projektet dhe ngjarjet e shpallura së fundmi të lidhura me Rust:
- Kompania Microsoft e ka kaluar Rust në gjuhët e nivelit të parë dhe do të ofrojë mbështetje të plotë për të në të gjitha fazat e zhvillimit brenda kompanisë. Deri tani, niveli i parë i mbështetjes brenda kompanisë ishte ofruar për gjuhët C++, C# dhe TypeScript. Vërehet se Rust tashmë përdoret në më shumë se 100 repo të Microsoft. Ndër të tjera, komponentët në Rust janë tashmë të implementuar në produkte të tilla si Microsoft 365 dhe Copilot, dhe për kompilatorin MSVC është përgatitur një backend i veçantë rustc_codegen_utc për Rust, i bazuar në kompilatorin rustc.
Si qëllim kryesor për përdorimin e Rust në Microsoft përmendet forcimi i sigurisë së kodit, i rëndësishëm për sigurinë. Sipas drejtorit teknik të Microsoft Azure, rreth 70% e të gjitha vulnerabiliteteve në Windows shkaktohen nga probleme në menaxhimin e memories, të cilat mund të shmangen duke përdorur Rust.
- Kompania Google e ka hequr nga bërthama Linux implementimin e vjetër të mekanizmit të ndërveprimit midis proceseve Binder, të shkruar në gjuhën C, në favor të një drejtorie të re Binder IPC, e shkruar në Rust. Vërehet se gjatë 15 viteve ekzistencë të drejtorisë së vjetër, janë grumbulluar një borxh i madh teknik dhe një bollëk ndërlikimesh, që e kanë vështirësuar gjetjen e gabimeve, mbështetje dhe shtimin e funksionaliteteve të reja. Drejtoria Binder IPC në Rust është pranuar si kryesorja dhe nuk ofrohet më si një zhvillim eksperimental.
- ĂshtĂ« publikuar versioni Arti 2.7.0, njĂ« implementim i mjetit Tor, i shkruar nĂ« gjuhĂ«n Rust. Kur kodi Arti tĂ« arrijĂ« njĂ« nivel qĂ« mund tĂ« zĂ«vendĂ«sojĂ« plotĂ«sisht versionin nĂ« C, zhvilluesit e Tor kanĂ« nĂ« plan t'i japin Arti statusin e implementimit kryesor tĂ« Tor-it dhe gradualisht tĂ« ndalojnĂ« mbĂ«shtetje pĂ«r implementimin nĂ« C. NĂ« versionin e ri Ă«shtĂ« ngritur zhvillimi i funksionaliteteve pĂ«r relay. serverĂ«sh autoriteti i dosjeve (Directory Authority), i lidhur me analizimin e dokumenteve, mbĂ«shtetje pĂ«r pasqyrimin e serverĂ«ve tĂ« dosjeve dhe pĂ«rpunimin e trafikut DNS. ĂshtĂ« shtuar implementimi i RPC pĂ«r ndryshimin dhe verifikimin e konfiguracionit. JanĂ« eliminuar disa vulnerabilitete - administratorĂ«t e shĂ«rbimeve onion rekomandohet tĂ« azhurnojnĂ« menjĂ«herĂ« sistemet e tyre.
Burimi: opennet.ru
