Vydání programovacího jazyka Rust 1.34

Byl vydán systémový programovací jazyk Rust 1.34 vyvinutý projektem Mozilla. 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.

Automatická správa paměti Rust osvobozuje vývojáře od manipulace s ukazateli a chrání před problémy vyplývajícími z manipulace s pamětí na nízké úrovni, jako jsou například přístupy k paměti po volném čase, dereference nulového ukazatele, přetečení vyrovnávací paměti a podobně. Pro distribuci knihoven, zajištění sestavování a správu závislostí projekt vyvíjí správce balíčků Cargo, který umožňuje získat knihovny potřebné pro program jedním kliknutím. Úložiště crates.io je podporováno pro hostování knihoven.

Hlavní inovace:

  • Správce balíčků Cargo přidal nástroje pro práci s alternativními registry balíčků, které mohou koexistovat s veřejným registrem crates.io. Například vývojáři proprietárních aplikací mohou nyní používat svůj vlastní soukromý registr, který lze použít při výpisu závislostí v Cargo.toml, a aplikovat na své produkty verzovací model podobný crates.io a také odkazovat závislosti na obě bedny. io a do vašeho vlastního registru.

    Chcete-li přidat externí registr do ~/.cargo/config
    nová možnost „můj-registr“ je k dispozici v sekci „[registry]“ a byla přidána možnost „jiná přepravka“, která zmiňuje externí registr v závislostech v Cargo.toml v sekci „[dependencies]“. Chcete-li se připojit k dalšímu registru, jednoduše vložte ověřovací token do souboru ~/.cargo/credentials a spusťte příkaz
    "cargo login --registry=my-registry" a publikovat balíček -
    "publikovat náklad -registr=můj-registr";

  • Přidána plná podpora pro použití operátoru „?“. v doctests, které umožňují použít ukázkový kód z dokumentace jako testy. Dříve operátor
    "?" lze použít ke zpracování chyb během provádění testu pouze v přítomnosti funkce „fn main()“ nebo ve funkcích „#[test]“;

  • V uživatelských atributech definovaných pomocí procedurálních maker je možné použít libovolné sady tokenů („#[attr($tokens)], „#[attr[$tokens]] a #[attr{$tokens}]“). Dříve bylo možné prvky specifikovat pouze ve stromové/rekurzivní podobě pomocí řetězcových literálů, například „#[foo(bar, baz(quux, foo = „bar“))]“, ale nyní je možné používat výčty (' #[rozsah(0. .10)]') a konstrukce jako „#[bound(T: MyTrait)]“;
  • Vlastnosti TryFrom a TryInto byly stabilizovány, což umožňuje převody typů se zpracováním chyb. Například metody jako from_be_bytes s celočíselnými typy používají pole jako vstup, ale data často přicházejí v typu Slice a převod mezi poli a řezy je problematické provádět ručně. S pomocí nových vlastností lze zadanou operaci provádět za běhu voláním .try_into(), například „let num = u32::from_be_bytes(slice.try_into()?)“. Pro převody, které vždy uspěly (například z typu u8 na u32), byl přidán typ chyby Infallible, který umožňuje transparentní použití
    TryFrom pro všechny existující implementace "Od";

  • Zastaralá funkce CommandExt::before_exec, která umožňovala spuštění obslužné rutiny před exec, která byla provedena v kontextu podřízeného procesu rozvětveného po volání fork(). Za takových podmínek by některé zdroje nadřazeného procesu, jako jsou deskriptory souborů a mapované oblasti paměti, mohly být duplikovány, což by mohlo vést k nedefinovanému chování a nesprávnému fungování knihoven.
    Místo before_exec se doporučuje použít nebezpečnou funkci CommandExt::pre_exec.

  • Stabilizované typy atomických celých čísel se znaménkem a bez znaménka o velikosti od 8 do 64 bitů (například AtomicU8), stejně jako typy se znaménkem NonZeroI[8|16|32|54|128].
  • Nová část rozhraní API byla přesunuta do stabilní kategorie, včetně Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] a metody SystemTime byly stabilizovány ::checked_[add|sub]. Funkce iter::from_fn a iter::successors byly stabilizovány;
  • Pro všechny typy celých čísel jsou implementovány metody check_pow, saturating_pow, wrapping_pow a overflowing_pow;
  • Přidána možnost povolit optimalizace ve fázi propojení zadáním možnosti sestavení „-C linker-plugin-lto“ (rustc kompiluje kód Rust do bitového kódu LLVM, což umožňuje použití optimalizace LTO).

Zdroj: opennet.ru

Přidat komentář