Vydání programovacího jazyka Rust 1.34

odehrál se vydání systémového programovacího jazyka Rez 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ě. Vyvíjí se správce balíčků pro distribuci knihoven, zajištění sestavení a správu závislostí v rámci projektu. Náklad, což vám umožní získat knihovny, které potřebujete pro program, jedním kliknutím. Hostitelské knihovny podporují úložiště crates.io.

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.

    Přidání externích registrů do .cargo/config (umístěné v $HOME nebo v adresáři balíčku)
    pokud sekce „[registry]“ a pro použití externího registru se v popisu každé závislosti v Cargo.toml objevila možnost „registr“. 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 testech doctests, což vám umožní 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]“;

  • Ve vlastních atributech definovaných pomocí procedurálních maker zajištěno schopnost používat 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)]“;
  • Stabilizované typy (vlastnost) TryFrom и ZkusteInto, umožňující 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 prostřednictvím volání .try_into(), například „let num = u32::from_be_bytes(slice.try_into()?)“. Pro převody, které se vždy podaří (například z typu u8 na u32), byl přidán typ chyby Neomylný, což umožňuje transparentní použití
    TryFrom pro všechny existující implementace "Od";

  • Funkce byla zastaralá CommandExt::before_exec, což umožnilo spustit obslužnou rutinu před spuštěním exec, který byl proveden 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 atomových celých čísel se znaménkem a bez znaménka o velikosti od 8 do 64 bitů (např. AtomicU8), stejně jako podepsané typy NonZeroI[8|16|32|64|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“.

Zdroj: opennet.ru

Přidat komentář