Vydanie programovacieho jazyka Rust 1.34

uskutočnilo sa vydanie systémového programovacieho jazyka Hrdza 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. Vyvíja sa správca balíkov na distribúciu knižníc, zabezpečenie zostavenia a správu závislostí v rámci projektu. náklad, čo vám umožní získať knižnice potrebné pre program jedným kliknutím. Hostiteľské knižnice podporujú úložisko crates.io.

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.

    Pridanie externých registrov do súboru .cargo/config (nachádza sa v $HOME alebo v adresári balíka)
    poskytnuté sekcia „[registre]“ a pre použitie externého registra sa v popise každej závislosti v Cargo.toml objavila možnosť „registre“. 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 testoch doctests, čo vám umožňuje 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 zabezpečené schopnosť používať ľ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)]“;
  • Stabilizované typy (vlastnosť) TryFrom и TryInto, ktorý umožňuje konverzie typov so spracovaní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é sa vždy vydaria (napríklad z typu u8 na u32), bol pridaný typ chyby neomylný, čo umožňuje transparentné použitie
    TryFrom pre všetky existujúce implementácie "From";

  • Funkcia bola zastaraná CommandExt::before_exec, ktorý umožnil spustenie obsluhy pred spustením exec, ktorý bol 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. AtomicU8), ako aj podpísané typy NonZeroI[8|16|32|64|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“.

Zdroj: opennet.ru

Pridať komentár