Bol vydaný univerzálny programovací jazyk Rust 1.66, založený projektom Mozilla, ale teraz vyvinutý pod záštitou nezávislej neziskovej organizácie Rust Foundation. Jazyk sa zameriava na bezpečnosť pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh, pričom sa vyhýba používaniu zberača odpadu a runtime (beh je zredukovaný na základnú inicializáciu a údržbu štandardnej knižnice).
Metódy spracovania pamäte Rustu chránia vývojára pred chybami pri manipulácii s ukazovateľmi a chránia pred problémami, ktoré vznikajú v dôsledku nízkoúrovňového spracovania pamäte, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencovanie nulových ukazovateľov, pretečenie vyrovnávacej pamäte atď. Na distribúciu knižníc, poskytovanie zostáv a správu závislostí projekt vyvíja správcu balíkov Cargo. Úložisko crates.io je podporované pre hosťovanie knižníc.
Bezpečnosť pamäte je v Rust zabezpečená v čase kompilácie prostredníctvom kontroly referencií, sledovania vlastníctva objektu, sledovania životnosti objektov (rozsahov) a hodnotenia správnosti prístupu do pamäte počas vykonávania kódu. Rust tiež poskytuje ochranu proti pretečeniu celých čísel, vyžaduje povinnú inicializáciu hodnôt premenných pred použitím, lepšie zvláda chyby v štandardnej knižnici, štandardne aplikuje koncept nemenných referencií a premenných, ponúka silné statické typovanie na minimalizáciu logických chýb.
Hlavné inovácie:
- V enumeráciách s celočíselnými reprezentáciami (atribút “#[repr(Int)]” je povolené explicitné označenie diskriminantu (číslo voľby v enumerácii), aj keď enumerácia obsahuje polia. #[repr(u8)] enum Foo { A(u8), # diskriminant 0 B(i8), # diskriminant 1 C(bool) = 42, # diskriminant 42 }
- Pridaná funkcia core::hint::black_box, ktorá jednoducho vráti prijatú hodnotu. Pretože kompilátor verí, že daná funkcia robí konkrétnu vec, funkciu black_box možno použiť na zakázanie optimalizácie slučiek kompilátora pri vykonávaní testovania výkonu kódu alebo pri skúmaní generovaného strojového kódu (takže kompilátor nepovažuje kód za nepoužiteľný a neodstráni to). Napríklad v nižšie uvedenom príklade zadanie black_box(v.as_ptr()) bráni kompilátoru predpokladať, že vektor v sa nepoužíva. použite std::hint::black_box; fn push_cap(v: &mut Vec) { for i in 0..4 { v.push(i); black_box(v.as_ptr()); } }
- Správca balíkov „cargo“ ponúka príkaz „remove“, ktorý umožňuje odstrániť závislosti z manifestu Cargo.toml z príkazového riadku.
- Nová časť API bola presunutá do kategórie stabilných, vrátane metód a implementácií vlastností boli stabilizované:
- proc_macro::Span::source_text
- u*::{checked_add_signed, overflowing_add_signed, saturating_add_signed, wrapping_add_signed}
- i*::{checked_add_unsigned, overflowing_add_unsigned, saturating_add_unsigned, wrapping_add_unsigned}
- i*::{checked_sub_unsigned, overflowing_sub_unsigned, saturating_sub_unsigned, wrapping_sub_unsigned}
- BTreeSet::{first, last, pop_first, pop_last}
- BTreeMap::{first_key_value, last_key_value, first_entry, last_entry, pop_first, pop_last}
- Pri použití WASI pridajte implementácie AsFd pre typy zámkov stdio.
- impl TryFrom > pre Box<[T; N]>
- core::hint::black_box
- Trvanie::try_from_secs_{f32,f64}
- Možnosť::rozzipsovať
- std::os::fd
- V šablónach je povolené použitie rozsahov „..X“ a „..=X“.
- Pri zostavovaní frontendu rustc kompilátora a backendu LLVM sa využívajú optimalizačné režimy LTO (Link Time Optimization) a BOLT (Binary Optimization and Layout Tool), ktoré umožňujú zvýšiť výkon výsledného kódu a znížiť spotrebu pamäte.
- Tretia úroveň podpory bola implementovaná pre platformy armv5te-none-eabi a thumbv5te-none-eabi. Tretia úroveň zahŕňa základnú podporu, ale bez automatického testovania, zverejňovania oficiálnych verzií alebo kontroly, či je možné kód zostaviť.
- Pridaná podpora pre prepojenie s univerzálnymi knižnicami macOS.
Okrem toho si môžeme všimnúť zahrnutie prednej časti kompilátora jazyka Rust (gccrs) do základne kódu GCC. Frontend je súčasťou vetvy GCC 13, ktorá bude vydaná v máji 2023. Počnúc GCC 13 je možné použiť natívne nástroje GCC na kompiláciu programov v jazyku Rust bez potreby inštalácie kompilátora rustc, vytvoreného pomocou vývoja LLVM. Implementácia Rustu GCC 13 bude beta verzia, ktorá nie je predvolene povolená.
Zdroj: opennet.ru