Vydání programovacího jazyka Rust 2021 (1.56)

Bylo zveřejněno vydání systémového programovacího jazyka Rust 1.56, založeného projektem Mozilla, ale nyní vyvíjeného pod záštitou nezávislé neziskové organizace Rust Foundation. Kromě běžného čísla verze má vydání také označení Rust 2021 a znamená stabilizaci změn navržených za poslední tři roky. Rust 2021 bude také sloužit jako základ pro zvýšení funkčnosti během příštích tří let, podobně jako se vydání Rust 2018 stalo základem pro vývoj jazyka v posledních třech letech.

Aby byla zachována kompatibilita, mohou vývojáři ve svých programech používat štítky „2015“, „2018“ a „2021“, které umožňují propojení programů s řezy stavu jazyka odpovídajícími vybraným edicím Rust. Edice byly zavedeny pro oddělení nekompatibilních změn a konfigurují se v metadatech nákladních balíků prostřednictvím pole „edice“ v sekci „[balíček]“. Například edice „2018“ obsahuje funkcionalitu stabilizovanou ke konci roku 2018 a pokrývá také všechny další změny, které nenaruší kompatibilitu. Verze 2021 navíc obsahuje funkce narušující interoperabilitu navržené v aktuální verzi 1.56 a schválené pro budoucí implementaci. Kromě samotného jazyka zohledňují redakce také stav nástrojů a dokumentace.

Hlavní nekompatibility zaznamenané v Rustu 2021:

  • Samostatné zachycení v uzávěrkách – uzávěry nyní mohou zachytit názvy jednotlivých polí namísto celého identifikátoru. Například "|| ax + 1" zachytí pouze "ax" místo "a".
  • Vlastnost IntoIterator pro pole: array.into_iter() vám umožňuje iterovat prvky pole podle hodnot, nikoli podle odkazů.
  • V makro_pravidlech bylo změněno zpracování výrazů „|“. (Booleovské OR) ve vzorech – Specifikátor „:pat“ ve shodách nyní respektuje „A | B".
  • Správce cargo balíčků standardně obsahuje druhou verzi překladače funkcí, jehož podpora se objevila v Rustu 1.51.
  • Vlastnosti TryFrom, TryInto a FromIterator byly přidány do modulu standardní knihovny předehra.
  • Makra panika!(..) a tvrdit!(expr, ..) nyní vždy používají format_args!(..) k formátování řetězců, podobně jako println!().
  • Výrazy ident#, ident»..." a ident'...' jsou vyhrazeny v syntaxi jazyka.
  • Varování bare_trait_objects a ellipsis_inclusive_range_patterns přesunuta na chyby.

Novinka v Rustu 1.56:

  • V Cargo.toml v sekci „[package]“ bylo přidáno pole rust-version, pomocí kterého můžete určit minimální podporovanou verzi Rust pro balíček přepravky. Pokud aktuální verze neodpovídá zadanému parametru, Cargo přestane fungovat s chybovou zprávou.
  • Při porovnávání vzorů pomocí výrazů "binding @ pattern" je poskytována podpora pro specifikaci dalších vazeb (například "let matrix @ Matrix { row_len, .. } = get_matrix();").
  • Nová část API byla přesunuta do kategorie stabilní, včetně metod a implementací vlastností byly stabilizovány:
    • std::os::unix::fs::chroot
    • UnsafeCell::raw_get
    • BufWriter::into_parts
    • core::panic::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • Řetězec::shrink_to
    • OsString::shrink_to
    • PathBuf::shrink_to
    • BinaryHeap::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • Ve funkcích se používá atribut „const“, který určuje možnost použití v libovolném kontextu místo konstant
    • std::mem::transmute
    • [T]:: první
    • [T]::rozdělit_první
    • [T]:: poslední
    • [T]::rozdělit_poslední
  • Kompilátor byl přepnut na LLVM verze 13.
  • Druhá úroveň podpory byla implementována pro platformu aarch64-apple-ios-sim a třetí úroveň pro platformy powerpc-unknown-freebsd a riscv32imc-esp-espidf. Třetí úroveň zahrnuje základní podporu, ale bez automatického testování, zveřejňování oficiálních sestavení a ověřování sestavitelnosti kódu.

Připomeňme, že Rust se zaměřuje na bezpečnost paměti, poskytuje automatickou správu paměti a poskytuje prostředky k dosažení vysoké paralelnosti při provádění ú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.

Zdroj: opennet.ru

Přidat komentář