Bol vydaný release programovacieho jazyka Rust 1.89, ktorý založil projekt Mozilla, ale teraz sa rozvíja pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečné spravovanie pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelizácie vykonávania úloh, pritom sa zaobíde bez použitia garbage collectora a runtime (runtime sa znižuje na základnú inicializáciu a údržbu štandardnej knižnice).
Metódy práce s pamäťou v Rust zbavujú vývojára chýb pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú z nízkoúrovňovej práce s pamäťou, ako je prístup do oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, prekročenie hraníc bufra atď. Na distribúciu knižníc, zabezpečenie zostavy a správu závislostí sa vyvíja balíčkový manažér Cargo. Pre umiestnenie knižníc sa podporuje repozitár crates.io.
Bezpečné zaobchádzanie s pamäťou je v Rust zabezpečené už pri kompilácii prostredníctvom kontroly odkazov, sledovania vlastníctva objektov, zohľadňovania životnosti objektov (rozsah viditeľnosti) a posudzovania správnosti prístupu k pamäti počas vykonávania kódu. Rust tiež poskytuje prostriedky na ochranu pred celočíselnými pretečeniami, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie spracováva chyby v štandardnej knižnici, aplikuje koncept nemennosti (immutable) odkazov a premenných ako predvolené a ponúka silnú statickú typizáciu na minimalizáciu logických chýb.
Hlavné novinky:
- Bola poskytnutá možnosť používať znak „_“ ako argument generických parametrov s označením „const“ na odvodenie hodnôt týchto parametrov na základe okolia. pub fn all_false() -> [bool; LEN] { [false; _] }
- Pridalo sa nové lint upozornenie „mismatched_lifetime_syntaxes“ na riešenie problému nejednoznačného určovania životnosti v podpisoch funkcií pri použití mechanizmu „lifetime elision“ (automaticky určuje dobu života odkazov, čo umožňuje obísť jeho ručné uvádzanie). Upozornenie vykonáva kontrolu, že vstupné a výstupné parametre funkcie patria do rovnakej skupiny typov. Skupiny sú vytvárané na základe podpory explicitného určenia doby života a možnosti automatického odvodenia doby života kompilátorom (napríklad v typoch „&’a T“ a „ContainsLifetime“ môže byť explicitne prítomná doba života, ale kompilátor nemôže automaticky určiť dobu života, zatiaľ čo v typoch „&T“, „&’_ T“ a „ContainsLifetime“ je povolené ako explicitné určenie, tak aj automatické určenie).
- V atribúte „target_feature“ pre systémy x86 bola implementovaná možnosť kontroly podpory rozšírených inštrukčných súprav sha512, sm3, sm4, kl a widekl, ako aj jednotlivých funkcií avx512. #[target_feature(enable = „avx512bw“)] pub fn cool_simd_code(/* .. */) -> /* … */ { /* … */ }
- Zabezpečené spustenie doctest (testy zabudované do dokumentácie) nielen pre aktuálnu cieľovú platformu, ale aj pre iné platformy uvedené pri spúšťaní balíkového manažéra „cargo“ („cargo test --doc --target other_target“).
- Pre funkcie ‘extern „C“‘ pri kompilácii pre cieľovú platformu „wasm32-unknown-unknown“ bol implementovaný štandardný C ABI pre WebAssembly.
- S niektorými výhradami týkajúcimi sa kompatibility typov je povolené používanie typov i128 a u128 vo vonkajších C funkciách (extern "C"), pre ktoré sa predtým zobrazilo varovanie lint „improper_ctypes_definitions“.
- Do oblasti stabilných bol prenesený nový balík API, vrátane stabilizovaných metód a implementácií traitov:
- Mnohé vstavané funkcie v kompilátore (Intrinsics) pre procesory x86, vrátane funkcií pre AVX512, SHA512, SM3 a SM4.
- NonZero
- File::lock
- File::lock_shared
- File::try_lock
- File::try_lock_shared
- File::unlock
- NonNull::from_ref
- NonNull::from_mut
- NonNull::without_provenance
- NonNull::with_exposed_provenance
- NonNull::expose_provenance
- OsString::leak
- PathBuf::leak
- Result::flatten
- std::os::linux::net::TcpStreamExt::quickack
- std::os::linux::net::TcpStreamExt::set_quickack
Príznak „const“ bol použitý v funkciách:
- ::as_mut_slice
- ::eq_ignore_ascii_case
- str::eq_ignore_ascii_case
- Začal sa proces prechodu cieľovej platformy „x86_64-apple-darwin“ z prvého stupňa podpory na druhý (Apple plánuje ukončiť podporu architektúry x86_64). Prvý stupeň podpory predpokladá vytváranie binárnych zostavení, dôkladné testovanie a poskytovanie najvyššej záruky podpory platformy – každá zmena v kompilátore sa overuje vykonaním celého testovacieho súboru. Druhý stupeň podpory predpokladá záruku zostavenia, ale bez záruk pri prechode testovacím súborom.
- Bol implementovaný tretí stupeň podpory platforiem „loongarch32-unknown-none“ a „loongarch32-unknown-none-softfloat“. Tretí stupeň predpokladá základnú podporu, ale bez automatizovaného testovania, publikácie oficiálnych zostavení a overenia možnosti zostavenia kódu.
Ďalej je možné spomenúť súvisiace udalosti a projekty s Rustom:
- Bola zverejnená správa o stave balíkov v jazyku Rust v Debian. Uvádza sa, že vo vetve Debian Unstable (Sid) približne 8% src-balení v repozitári main je spojených so závislosťami na zostavenie s minimálne jedným balíkom „librust-*“. V Debiane 12 bolo podobných balíkov 4,5%. Tiež bolo poznamenané, že viac ako 3 tisíc balíkov obsahuje kód v jazyku Rust, ktorý bol presunutý do balíkov librust-..-dev, a 150 src-balení dodáva skompilované spustiteľné súbory alebo knižnice Rust.
Medzi zaujímavé balíky pre Debian patrí sudo-rs, ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d a fish. Voliteľná podpora Rustu bola implementovaná v APT, QEMU (virtiofsd), jadre Linuxu a Mesa, a taktiež sa očakáva v LibreOffice. Na prevod crate-balení na src-balenia Debian bol vyvinutý nástroj debcargo.
- Bol predstavený projekt tmux-rs, ktorý rozvíja klon multiplexora terminálu tmux (konzolový správca okien), prepisovaný z C na Rust.
- Vývojár ovládača Tyr z spoločnosti Collabora zverejnil článok o zariadeniach pracujúcich na úrovni jadra ovládačov pre GPU a princípoch vývoja takýchto ovládačov v jazyku Rust.
- Bol demonštrovaný univerzálny aplikácia v jazyku Rust, schopná bežať ako na CPU, tak aj na rôznych GPU platformách: CUDA pre NVIDIA, SPIR-V pre GPU s podporou Vulkan, Metal pre Apple, DirectX 12 pre Windows, WebGPU pre prehľadávače.
Zdroj: opennet.ru
