Vydání programovacího jazyka Rust 1.58

Bylo zveřejněno vydání univerzálního programovacího jazyka Rust 1.58, založeného projektem Mozilla, ale nyní vyvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Jazyk se zaměřuje na bezpečnost paměti, poskytuje automatickou správu paměti a poskytuje prostředky k dosažení vysokého paralelismu úloh bez použití garbage collectoru nebo runtime (runtime je redukováno na základní inicializaci a údržbu standardní knihovny).

Automatická správa paměti Rust eliminuje chyby při manipulaci s ukazateli a chrání před problémy vyplývajícími z manipulace s pamětí na nízké úrovni, jako je přístup k oblasti paměti po jejím uvolnění, dereference nulového ukazatele, přetečení vyrovnávací paměti atd. Pro distribuci knihoven, zajištění sestavování a správu závislostí projekt vyvíjí správce balíčků Cargo. Úložiště crates.io je podporováno pro hostování knihoven.

Hlavní inovace:

  • V blocích pro formátování řádků je kromě dříve dostupné možnosti nahradit proměnné explicitně uvedené za řádkem číslem a názvem implementována možnost nahradit libovolné identifikátory přidáním výrazu „{identifikátor}“ na řádek. Například: // Dříve podporované konstrukce: println!("Ahoj, {}!", get_person()); println!("Dobrý den, {0}!", get_person()); println!("Dobrý den, {osoba}!", osoba = get_person()); // nyní můžete zadat let person = get_person(); println!("Dobrý den, {osoba}!");

    Identifikátory lze také zadat přímo v možnostech formátování. let (šířka, přesnost) = get_format(); for (jméno, skóre) v get_scores() { println!("{jméno}: {skóre:šířka$.přesnost$}"); }

    Nová náhrada funguje ve všech makrech, která podporují definici formátu řetězce, s výjimkou makra „panika!“. ve verzích jazyka Rust 2015 a 2018, ve kterých je panika!("{ident}") považováno za běžný řetězec (v Rust 2021 substituce funguje).

  • Chování struktury std::process::Command na platformě Windows bylo změněno tak, že při provádění příkazů již z bezpečnostních důvodů nehledá spustitelné soubory v aktuálním adresáři. Aktuální adresář je vyloučen, protože by mohl být použit ke spuštění škodlivého kódu, pokud jsou programy spouštěny v nedůvěryhodných adresářích (CVE-2021-3013). Nová logika detekce spustitelných souborů zahrnuje prohledávání adresářů Rust, adresáře aplikace, systémového adresáře Windows a adresářů zadaných v proměnné prostředí PATH.
  • Standardní knihovna rozšířila počet funkcí označených „#[must_use]“, aby vydala varování, pokud je vrácená hodnota ignorována, což pomáhá identifikovat chyby způsobené za předpokladu, že funkce změní hodnoty místo toho, aby vrátila novou hodnotu.
  • Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
    • Metadata::is_symlink
    • Cesta::je_symlink
    • {integer}::saturating_div
    • Option::unwrap_unchecked
    • Výsledek::unwrap_unchecked
    • Výsledek::unwrap_err_unchecked
  • Atribut "const", který určuje možnost jeho použití v libovolném kontextu místo konstant, se používá ve funkcích:
    • Trvání::nové
    • Duration::checked_add
    • Duration::saturating_add
    • Duration::checked_sub
    • Duration::saturating_sub
    • Trvání::checked_mul
    • Duration::saturating_mul
    • Trvání::checked_div
  • Povolené dereferencování ukazatelů "*const T" v kontextech "const".
  • Ve správci balíčků Cargo bylo do metadat balíčku přidáno pole rust_version a do příkazu „cargo install“ byla přidána možnost „--message-format“.
  • Kompilátor implementuje podporu ochranného mechanismu CFI (Control Flow Integrity), který před každým nepřímým voláním přidává kontroly k detekci některých forem nedefinovaného chování, které by potenciálně mohlo vést k porušení normálního prováděcího příkazu (kontrolního toku) v důsledku použití exploitů, které mění ukazatele uložené v paměti na funkce.
  • Kompilátor přidal podporu pro verze 5 a 6 formátu porovnání pokrytí LLVM, který se používá k vyhodnocení pokrytí kódu během testování.
  • V kompilátoru jsou požadavky na minimální verzi LLVM zvýšeny na LLVM 12.
  • Byla implementována třetí úroveň podpory pro platformu x86_64-unknown-none. Třetí úroveň zahrnuje základní podporu, ale bez automatického testování, publikování oficiálních sestavení nebo kontroly, zda lze kód sestavit.

Kromě toho si můžeme všimnout publikace společnosti Microsoft o vydání knihoven Rust pro Windows 0.30, které vám umožňují používat jazyk Rust k vývoji aplikací pro OS Windows. Sada obsahuje dva balíčky přepravek (windows a windows-sys), přes které se dostanete k Win API v programech Rust. Kód pro podporu API je generován dynamicky z metadat popisujících API, což umožňuje implementovat podporu nejen pro stávající volání Win API, ale i pro volání, která se objeví v budoucnu. Nová verze přidává podporu pro cílovou platformu UWP (Universal Windows Platform) a implementuje typy Handle a Debug.

Zdroj: opennet.ru

Přidat komentář