ĂshtĂ« publikuar versioni 1.81 i gjuhĂ«s sĂ« programimit tĂ« pĂ«rgjithshĂ«m Rust, fillimisht bazuar nĂ« projektin Mozilla, tani pĂ«rkrahur nga organizata jofitimprurĂ«se Rust Foundation. Gjuha fokusohet nĂ« sigurinĂ« e punĂ«s me memorien dhe ofron mjete pĂ«r tĂ« arritur paralelizĂ«m tĂ« lartĂ« nĂ« realizimin e detyrave, duke vepruar pa nevojĂ«n pĂ«r njĂ« mbledhĂ«s plehrash dhe runtime (runtime reduktohet nĂ« inicializimin e bazĂ«s dhe mbĂ«shtetje pĂ«r bibliotekĂ«n standarde).
Metodat e punës me kujtesën në Rust e çlirojnë zhvilluesin nga gabimet gjatë manipulimit me treguesit dhe e mbrojnë atë nga problemet që lindin për shkak të punës me kujtesën në nivel të ulët, si qasja në një zonë kujtese pas çlirimit të saj, dereferencimi i treguesve null, dalja jashtë kufijve të buffers etj. Për shpërndarjen e bibliothekave, sigurimin e ndërtimit dhe menaxhimin e varësive, projekti zhvillohet me menaxherin e paketave Cargo. Për mbështetje të bibliothekave, ekziston një repository 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Ă« stabilizuar tipazhi core::error::Error, i cili pĂ«rcakton pĂ«rshkrimet e gabimeve. Ky ndryshim lejon pĂ«rdorimin e njĂ« tipazhi tĂ« vetĂ«m Error nĂ« biblioteka tĂ« ndryshme, pĂ«rveç mjedisit, duke pĂ«rfshirĂ« edhe bibliotekat qĂ« nuk lidhen me bibliotekĂ«n standarde, duke pĂ«rdorur atributin "#![no_std]".
- Funksionet e qĂ«ndrueshme dhe jo tĂ« qĂ«ndrueshme tĂ« ŃĐŸŃŃimi nĂ« bibliotekĂ«n standarde janĂ« pĂ«rkthyer nĂ« pĂ«rdorimin e algoritmeve tĂ« reja, qĂ« demonstrojnĂ« shpejtĂ«si mĂ« tĂ« lartĂ« dhe kohĂ« mĂ« tĂ« shkurtĂ«r kompilimi. NĂ« realizimin e algoritmeve tĂ« reja tĂ« ŃĐŸŃŃimi, Ă«shtĂ« siguruar identifikimi i tipazheve tĂ« papĂ«rcaktuar Ord dhe raportimi nĂ« kĂ«to raste tĂ« gabimit (panic) nĂ« vend tĂ« tĂ« dhĂ«nave tĂ« grupuara rastĂ«sisht.
- Në linter është realizuar një nivel i ri kontrolli "expect" ("#[expect(lint)]"), duke siguruar që kontrolli të realizohet dhe të japë një paralajmërim, nëse kontrolli nuk përfundon (për shkak të një gabimi në realizim ose ndalimi të kontrollit). Për shembull, kur konvertohet baza e kodit për të përdorur kontrollin undocumented_unsafe_blocks përmes Clippy, mund të specifikohet "#[expect(clippy::undocumented_unsafe_blocks)]" për t'u siguruar që gjatë kalimit të gjithë blloqet unsafe do të dokumentohen. Në Clippy gjithashtu janë realizuar kontrolli clippy::allow_attributes dhe clippy::allow_attributes_without_reason, që lehtësojnë zëvendësimin e atributit "#[allow]" me "#[expect(lint)]".
- ĂshtĂ« ofruar mundĂ«sia pĂ«r tĂ« dokumentuar arsyen e zĂ«vendĂ«simit tĂ« niveleve tĂ« kontrollit (lint), qĂ« u jep zhvilluesve tĂ« rinj informacion mbi arsyet e shtimit tĂ« kontrolleve, tĂ« paraqitura si mesazh i kompilatorit. PĂ«r shembull: #![deny(clippy::float_arithmetic, reason = "no hardware float support")]
- Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
- core::error
- hint::assert_unchecked
- fs::exists
- AtomicBool::fetch_not
- Duration::abs_diff
- IoSlice::advance
- IoSlice::advance_slices
- IoSliceMut::advance
- IoSliceMut::advance_slices
- PanicHookInfo
- PanicInfo::message
- PanicMessage
Atributi «const», që përcakton mundësinë e përdorimit në çdo kontekst në vend të konstantëve, aplikohet në funksione:
- char::from_u32_unchecked (funksioni)
- char::from_u32_unchecked (metoda)
- CStr::count_bytes
- CStr::from_ptr
Tipi std::panic::PanicInfo është rinovuar në std::panic::PanicHookInfo (përdorimi i emrit të vjetër mbetet i ruajtur, por që nga versioni i ardhshëm, përdorimi i tij do të rezultojë në një paralajmërim). megjithatë, core::panic::PanicInfo do të mbetet i njëjtë, por do të zhvillohet si një tip i veçantë. Ndara e tipeve do të lejojë implementimin e metodave të ndryshme, specifike për ekzekutimin në kontekstet snd dhe no_std.
- PĂ«rfundimi i kalimit nĂ« ABI C-unwind (âextern «C-unwind»â), i cili ndryshon nga ABI pa sufiksin â-unwindâ (âextern «C»â) duke ruajtur sjelljen e sigurt (safe), nĂ«se procesi i âunwindingâ-ut, i iniciuar nĂ« rast tĂ« njĂ« ndalimi tĂ« tĂ«rĂ«sishĂ«m tĂ« programit ose nĂ« gjenerimin e njĂ« pĂ«rjashtimi nĂ« stilin C++, kalon kufirin e ABI (pĂ«r shembull, kur njĂ« pĂ«rjashtim, i ndodhur nĂ« kodin e njĂ« gjuhe tĂ« programimit, gjatĂ« âunwindingâ prek stekĂ«n e lidhur me kodin e njĂ« gjuhe tjetĂ«r programimi). QĂ« nga lĂ«shimi i Rust 1.81, ABI âextern «C»â aktivizon ndalimin e tĂ«rĂ«sishĂ«m nĂ« rastin e âunwindingâ-ut tĂ« pa-captuar.
- Dëgjohet niveli i tretë i mbështetjes për platformat i686-unknown-redox, xtensa-esp32-none-elf, xtensa-esp32s2-none-elf, xtensa-esp32s3-none-elf, xtensa-esp32-espidf, xtensa-esp32s2-espidf, xtensa-esp32s3-espidf. Niveli i tretë nënkupton mbështetje bazike, por pa testim automatized, publikimin e ndërtimeve zyrtare dhe verifikimin e ndërtimit të kodit.
- Dëgjohet niveli i dytë i mbështetjes për platformat e synuara loongarch64-unknown-linux-musl dhe arm64ec-pc-windows-msvc. Niveli i dytë i mbështetjes nënkupton garancinë e ndërtimit.
- Për sistemet Linux në platformën LoongArch është ofruar një set i plotë mjetesh dhe profilues.
- Vulnerabiliteti (CVE-2024-43402) në std::process::Command është eliminuar, shfaqur vetëm në platformën Windows dhe eliminon një rrugë për shfrytëzimin e një vulnerabiliteti të mëparshëm, BatBadBut, i lidhur me përpunimin e karaktereve speciale gjatë thirrjeve të Command::arg dhe Command::args, të dizajnuara për të kaluar argumentet direkt në proces, pa i trajtuar ato nga interpretoni i komandave. Në praktikë, kur ekzekutoheshin skenaret bat- dhe cmd, procesi cmd.exe, me logjikën e vet për ndarjen e argumenteve, ishte aktivizuar. Koncepti i mbrojtjes bazohet në faktin se Windows i eliminon hapësirat dhe pikat e para në rrugë, pra një skedar me zgjerimin «.bat. .» trajtohet si «.bat».
PĂ«rveç kĂ«saj, mund tĂ« theksohet gjatĂ« largimi i Wedson Almeida Filho nga roli i mbikĂ«qyrĂ«sit tĂ« projektit Rust for Linux, i cili merret me inkorporimin e mjeteve pĂ«r zhvillimin nĂ« gjuhĂ«n Rust nĂ« kernelin Linux. Pas largimit tĂ« Wedson, projekti ka ende dy mbikĂ«qyrĂ«s tĂ« tjerĂ« â Miguel Ojeda, autor dhe zhvillues kryesor i projektit Rust-for-Linux, dhe Alex Gaynor, ish-drejtor i organizatĂ«s Python Software Foundation, i cili Ă«shtĂ« fokusuar nĂ« promovimin e Rust. MbikĂ«qyrĂ«si i larguar, qĂ« u bashkua me projektin 4 vjet mĂ« parĂ«, Ă«shtĂ« punonjĂ«s i kompanisĂ« Microsoft dhe autor i njĂ« drejtuesi eksperimental me implementimin e FS EXT2, tĂ« shkruar nĂ« gjuhĂ«n Rust. KohĂ«t e fundit, puna e Almeida ishte pĂ«rqendruar nĂ« krijimin e mjeteve pĂ«r zhvillimin e sistemeve tĂ« skedave nĂ« gjuhĂ«n Rust. Vitin e kaluar Almeida kontribuoi nĂ« repositorin Rust-for-Linux me 17 komitĂ« (pĂ«r krahasim, Miguel Ojeda ka kontribuar me 53 komitĂ«).
Si arsye për largimin përmendet mungesa e forcës dhe entuziazmit, të cilat dikur ishin të nevojshme për të reaguar ndaj disa absurditeteve joteknike (nontechnical nonsense). Sipas Almeida, zhvilluesit janë të detyruar të shpenzojnë shumë energji në polemika mbi çështje jo thelbësore, që e minojnë një qëllim më të rëndësishëm global. Almeida vazhdon të besojë se e ardhmja e kernelit është përdorimi i gjuhëve që sigurojnë punë të sigurt me memorien, dhe nëse komuniteti i zhvilluesve të Linux nuk e kupton këtë, Linux do të zëvendësohet nga një kernel tjetër, siç ndodhi dikur me Unix.
Përkrahësit e projektit Rust-for-Linux u përballën me nevojën për të përballuar rezistencën nga zhvilluesit e njohur të vetërdhëkës, të cilët nuk shohin nevojën për të mësuar një gjuhë të re. Në letrën e tij të dorëheqjes, Almeida përmend si shembull një diskutim që ndodhi gjatë paraqitjes së tij dhe Kent Overstreet në konferencën "Linux Storage, Filesystem, Memory-Management, and BPF Summit", e cila ishte e dedikuar për përdorimin e Rust për zhvillimin e sistemeve të skedarëve. Aktivitetin e implementimit të Rust e kritikoi Ted Ts'o, autori i sistemeve të skedarëve ext2/ext3/ext4, i cili e krahasoi nismën Rust-for-Linux me përpjekjen për të bërë që të gjithë të pranojnë fenë e Rust.
Në përgjigje të qëllimit të Almeida-s për të krijuar një mbështetje mbi ndërfaqet e sistemit të skedarëve të shkruara në gjuhën C për t'i përdorur ato në kodin e gjuhës Rust, Ted Ts'o theksoi se një mbështetje e tillë do të shkaktonte probleme, pasi çdo ndryshim në ndërfaqet C dhe zhvillimi do të kërkonte ndryshimin e mbështetjes për Rust dhe ai nuk dëshiron të marrë mbi vete përgjegjësi të tepërta për të rregulluar problemet që lindin në kodin Rust dhe për të ndjekur statusin e mbështetjes Rust. Kodi në C vazhdon të zhvillohet dhe nëse ndryshimi i tij prish funksionin e mbështetjes për Rust, kjo do të çonte në prishjen e gjithë sistemeve të skedarëve të lidhura me këtë mbështetje.
Ted gjithashtu beson se nĂ« tĂ« ardhmen e afĂ«rt mbĂ«shtetja pĂ«r Rust do tĂ« mbetet e dorĂ«s sĂ« dytĂ« dhe shfaqja e problemeve nĂ« lidhjet do tĂ« jetĂ« njĂ« dhimbje koke vetĂ«m pĂ«r zhvilluesit e Rust-for-Linux, e jo pĂ«r komunitetin e zhvilluesve tĂ« sistemeve tĂ« skedarĂ«ve nĂ« kernel. ĂshtĂ« theksuar se jo tĂ« gjithĂ« zhvilluesit kanĂ« nĂ« plan tĂ« mĂ«sojnĂ« Rust dhe prandaj, pas bĂ«rjes sĂ« ndryshimeve qĂ« ndikojnĂ« nĂ« kodin e tjetĂ«r, ata do tĂ« jenĂ« nĂ« gjendje tĂ« pĂ«rditĂ«sojnĂ« vetĂ«m kodin e varur nĂ« C, por nuk do tĂ« mund tĂ« rregullojnĂ« mbĂ«shtetjet Rust, sepse nuk dinĂ« Rust. NĂ« diskutim u bashkua gjithashtu James Bottomley, i cili mbikĂ«qyr sistemin e nĂ«nkomponentit SCSI, i cili tha se sa mĂ« shumĂ« semantika tĂ« koduar nĂ« mbĂ«shtetje, aq mĂ« tĂ« brishta ato bĂ«hen nĂ« aspektin e ruajtjes sĂ« sinkronizimit.
Ndërkohë, kompania Google, e cila vitin e kaluar e ripërshtati firmware pvmfm në gjuhën Rust, e përdorur në makina virtuale, të cilat drejtohen në platformën Android, ndau përvojën e integrimit gradual të kodit në Rust në firmware ekzistues, fillimisht të shkruar në C ose C++. Tregohet se si mund të rritet ndjeshëm siguria e firmware-z, duke krijuar komponentë zëvendësues identikë në funksionalitet, të shkruar në Rust. Theksi kryesor gjatë implementimit të Rust sugjerohet të vendoset në përdorimin e Rust për kodin e ri dhe për kodin që kryen funksione kritike për sigurinë (p.sh., kodi për përpunimin e të dhënave të jashtme, të marra nga burime të pasigurta). Për integrimin e kodit në Rust dhe C, sugjerohet të përdoren shim, që transletojnë thirrjet midis API-ve në Rust dhe C (API C eksportohet për përdorim në kodin në Rust dhe anasjelltas), që lejojnë të riprogramohen gradualisht elementët e API-së në Rust.
Burimi: opennet.ru
