Vydanie programovacieho jazyka Rust 1.34

Bol vydaný systémový programovací jazyk Rust 1.34 vyvinutý projektom Mozilla. Jazyk sa zameriava na bezpečnosť pamäte, poskytuje automatickú správu pamäte a poskytuje prostriedky na dosiahnutie vysokej paralelnosti úloh bez použitia garbage collectora alebo runtime.

Automatická správa pamäte Rust oslobodzuje vývojára od manipulácie s ukazovateľmi a chráni pred problémami vznikajúcimi pri manipulácii s pamäťou na nízkej úrovni, ako sú napríklad prístupy do pamäte po uvoľnení, dereferences nulového ukazovateľa, pretečenie vyrovnávacej pamäte a podobne. Na distribúciu knižníc, zabezpečenie montáže a správu závislostí projekt vyvíja správcu balíkov Cargo, ktorý vám umožní získať knižnice potrebné pre program jedným kliknutím. Úložisko crates.io je podporované pre hosťovanie knižníc.

Hlavné inovácie:

  • Správca balíkov Cargo pridal nástroje na prácu s alternatívnymi registrami balíkov, ktoré môžu koexistovať s verejným registrom crates.io. Napríklad vývojári proprietárnych aplikácií môžu teraz používať svoj vlastný súkromný register, ktorý je možné použiť pri uvádzaní závislostí v Cargo.toml, a používať pre svoje produkty verzovací model podobný crates.io, ako aj odkazovať závislosti na obe prepravky. io a do vášho vlastného registra.

    Ak chcete pridať externý register do ~/.cargo/config
    nová možnosť „môj register“ je poskytnutá v sekcii „[registre]“ a bola pridaná možnosť „other-crate“, ktorá uvádza externý register v závislostiach v Cargo.toml v sekcii „[dependencies]“. Ak sa chcete pripojiť k ďalšiemu registru, jednoducho umiestnite autentifikačný token do súboru ~/.cargo/credentials a spustite príkaz
    "cargo login --registry=my-registry" a zverejniť balík -
    "zverejniť náklad -registra=môj-registr";

  • Pridaná plná podpora používania operátora „?“. v doctests, ktoré vám umožňujú použiť vzorový kód z dokumentácie ako testy. Predtým operátor
    "?" možno použiť na spracovanie chýb počas vykonávania testu iba v prítomnosti funkcie „fn main()“ alebo vo funkciách „#[test]“;

  • Vo vlastných atribútoch definovaných pomocou procedurálnych makier je možné použiť ľubovoľné sady tokenov (“#[attr($tokens)]”, “#[attr[$tokens]] a #[attr{$tokens}]”) . Predtým bolo možné prvky špecifikovať iba v stromovej/rekurzívnej forme pomocou reťazcových literálov, napríklad „#[foo(bar, baz(quux, foo = „bar“))]“, ale teraz je možné použiť enumerácie (' #[rozsah(0. .10)]') a konštrukcie ako „#[bound(T: MyTrait)]“;
  • Vlastnosti TryFrom a TryInto boli stabilizované, čo umožňuje konverziu typov s riešením chýb. Napríklad metódy ako from_be_bytes s celočíselnými typmi používajú polia ako vstup, ale údaje často prichádzajú v type Slice a konvertovanie medzi poľami a rezmi je problematické manuálne. S pomocou nových vlastností je možné špecifikovanú operáciu vykonať za behu prostredníctvom volania .try_into(), napríklad „let num = u32::from_be_bytes(slice.try_into()?)“. Pre konverzie, ktoré sú vždy úspešné (napríklad z typu u8 na u32), bol pridaný typ chyby Neomylná, aby sa umožnilo transparentné použitie
    TryFrom pre všetky existujúce implementácie "From";

  • Zastaraná funkcia CommandExt::before_exec, ktorá umožňovala spustenie obsluhy pred exec, ktorá bola vykonaná v kontexte podriadeného procesu rozvetveného po volaní fork(). Za takýchto podmienok by sa niektoré zdroje nadradeného procesu, ako sú deskriptory súborov a mapované oblasti pamäte, mohli duplikovať, čo by mohlo viesť k nedefinovanému správaniu a nesprávnemu fungovaniu knižníc.
    Namiesto before_exec sa odporúča použiť nebezpečnú funkciu CommandExt::pre_exec.

  • Stabilizované typy atómových celých čísel so znamienkom a bez znamienka s veľkosťou od 8 do 64 bitov (napríklad AtomicU8), ako aj typy so znamienkom NonZeroI[8|16|32|54|128].
  • Nová časť rozhrania API bola presunutá do stabilnej kategórie vrátane Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] a metódy SystemTime boli stabilizované ::checked_[add|sub]. Funkcie iter::from_fn a iter::successors boli stabilizované;
  • Pre všetky typy celých čísel sú implementované metódy check_pow, saturating_pow, wrapping_pow a overflowing_pow;
  • Pridaná možnosť povoliť optimalizácie vo fáze prepojenia zadaním možnosti zostavenia „-C linker-plugin-lto“ (rustc kompiluje kód Rust do bitového kódu LLVM, čo umožňuje použiť optimalizáciu LTO).

Zdroj: opennet.ru

Pridať komentár