ĂshtĂ« publikuar versioni Rust 1.98 i gjuhĂ«s sĂ« programimit, e krijuar fillimisht nga projekti Mozilla, por qĂ« tani zhvillohet nĂ«n kujdesin e organizatĂ«s sĂ« pavarur jofitimprurĂ«se Rust Foundation. Gjuha fokusohet nĂ« punĂ« tĂ« sigurt me memorien dhe ofron mjete pĂ«r arritjen e njĂ« niveli tĂ« lartĂ« paralelizmi nĂ« ekzekutimin e detyrave, pa pĂ«rdorur garbage collector dhe runtime (runtime kufizohet nĂ« inicializimin bazĂ« dhe mirĂ«mbajtjen e bibliotekĂ«s 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:
- Për tipet me presje lëvizëse f32 dhe f64 janë implementuar metoda algjebrike për mbledhje, zbritje, shumëzim, pjesëtim dhe gjetjen e mbetjes, që ofrojnë optimizim të ngjashëm me opsionin «-ffast-math» në kompilatorët C/C++. Këto metoda lejojnë ndryshimin e rendit të operacioneve kur kjo është e nevojshme për optimizime si vektorizimi i cikleve. Për shembull, gjatë llogaritjes së «a + b + c + d», me mbledhje të zakonshme kompilatori gjithmonë do ta kryejë llogaritjen në një rend të vetëm «((a + b) + c) + d», ndërsa me metodën algebraic_add mund ta grupojë shprehjen si «(a + b) + (c + d)» dhe të ekzekutojë «(a + b)» dhe «(c + d)» paralelisht me ndihmën e instruksioneve SIMD. Kostoja e përdorimit të metodave algjebrike është jodeterminizmi i rezultateve të llogaritjes, të cilat mund të ndryshojnë brenda kufirit të gabimit.
- Për të gjitha tipet primitive të numrave të plotë është implementuar metoda e integruar «format_into» për shndërrimin e numrave në vargje, e cila mund të përdoret në vend të paketës itoa. Si parametër jepet buferi NumBuffer, madhësia e të cilit garantohet të jetë e mjaftueshme për të shkruar çdo vlerë të tipit të përdorur në formë dhjetore. Në dalje kthehet vargu i formatuar &str, jetëgjatësia e të cilit është e lidhur me buferin.
- Ndërveprimi mes mbështjellësit ManuallyDrop dhe smart pointer-it Box tani nuk çon më në sjellje të papërcaktuar.
- Një grup i ri API u kalua në kategorinë e stabilizuar, përfshirë stabilizimin e metodave dhe implementimeve të trait-ëve:
- str::substr_range
- [T]::subslice_range
- core::fmt::NumBuffer
- ::format_into
- Send/Sync për std::process::CommandArgs
- {fN}::algebraic_add
- {fN}::algebraic_sub
- {fN}::algebraic_mul
- {fN}::algebraic_div
- {fN}::algebraic_rem
- NonZero::from_str_radix
- String::from_utf16le
- String::from_utf16le_lossy
- String::from_utf16be
- String::from_utf16be_lossy
- [T]::strip_circumfix
- str::strip_circumfix
- Atomic::from_mut
- Atomic::get_mut_slice
- Atomic::from_mut_slice
- std::range::legacy
- Platformat e synuara thumbv7a-none-eabi, thumbv7a-none-eabihf, thumbv7r-none-eabi, thumbv7r-none-eabihf dhe thumbv8r-none-eabihf janë kaluar në nivelin e dytë të mbështetjes, i cili garanton ndërtimin, por nuk jep garanci për kalimin e paketës së testeve.
- ĂshtĂ« shtuar mbĂ«shtetja pĂ«r platformat powerpc64-unknown-linux-gnuelfv2 dhe aarch64-unknown-linux-pauthtest, pĂ«r tĂ« cilat ofrohet niveli i tretĂ« i mbĂ«shtetjes. Niveli i tretĂ« pĂ«rfshin mbĂ«shtetje bazĂ«, por pa testim tĂ« automatizuar, publikim tĂ« build-eve zyrtare dhe verifikim tĂ« mundĂ«sisĂ« sĂ« ndĂ«rtimit tĂ« kodit.
Gjithashtu vlen të theksohet komprometimi i crate-paketës së njohur arrayref, e cila ka regjistruar mbi 53 milionë shkarkime gjatë 90 ditëve të fundit dhe përdoret si varësi nga 403 paketa. Sulmuesit publikuan në depozitën crates.io paketa të reja proc-macro1, proc-macro-en, aovine, arone, aronenao dhe tinymember, që përmbanin kod keqdashës. Më pas, në depozitë u publikuan versione të reja të paketave arrayref 0.3.10, internment 0.8.7 dhe append-only-vec 0.1.9, ku si varësi u shtua paketa keqdashëse proc-macro1. Versioni keqdashës i paketës arrayref u publikua më 20 gusht në orën 10:15 (MSK) dhe mbeti i disponueshëm deri në 11:41, pas së cilës u hoq nga administratorët e crates.io.
Me mirĂ«mbajtĂ«sin e arrayref ende nuk Ă«shtĂ« arritur tĂ« vendoset kontakt pĂ«r tĂ« sqaruar situatĂ«n, por supozohet se kredencialet e tij janĂ« komprometuar nga keqbĂ«rĂ«sit. NĂ« paketĂ«n proc-macro1, ndryshimi keqdashĂ«s ndodhej nĂ« skriptin e build-it dhe kryente shkarkimin e njĂ« skedari tĂ« ekzekutueshĂ«m nga njĂ« burim i jashtĂ«m serverĂ«. Skedari i shkarkuar nĂ« sistemet Unix ruhej si /tmp/rust-setup, ndĂ«rsa nĂ« Windows â %TEMP%\rust-setup.ps1 ose %TEMP%\rust-setup-launch.vbs.
Burimi: opennet.ru
