Vydání programovacího jazyka Rust 1.39

zveřejněno vydání systémového programovacího jazyka Rez 1.39, kterou založil projekt 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:

  • Stabilizovaný nová syntaxe asynchronního programování založená na funkci "async", bloku async move { ... } a operátoru ".await", což usnadňuje psaní obslužných programů, které neblokují hlavní tok příkazů. Ve srovnání s dříve nabízeným API pro asynchronní I/O jsou konstrukce async/.await jednoduché na pochopení, vysoce čitelné a umožňují vám implementovat složité asynchronní interakce pomocí známých technik řízení toku založených na smyčkách, podmíněných příkazech a výjimkách.

    Syntaxe Async-await umožňuje vytvářet funkce, které mohou pozastavit jejich provádění, vrátit řízení hlavnímu vláknu a poté pokračovat v provádění od místa, kde skončily. Taková pauza je například vyžadována při zpracování I/O, ve kterém lze dělat jinou práci při čekání na příchod dalšího kusu dat. Funkce a bloky definované pomocí „asynchronního fn“ a „asynchronního přesunu“ vracejí vlastnost Budoucnost, který definuje odloženou asynchronní výpočetní reprezentaci. Můžete přímo iniciovat odložený výpočet a získat výsledek pomocí operátoru „.wait“. Dokud není zavoláno .await, není provedena žádná akce ani předem naplánována žádná akce, což umožňuje vytvářet složité vnořené konstrukce bez další režie.

    async fn first_function() -> u32 { .. }
    ...
    nech budoucnost = prvni_funkce();
    ...
    nech výsledek: u32 = budoucnost.čekej;

  • Stabilizovaný "#![feature(bind_by_move_pattern_guards)]", umožňující použití proměnných s typem vazby "vedlejším tahem" v šablonách a použijte odkazy na tyto proměnné v sekci "if" výrazu "zápas". Nyní jsou například povoleny následující konstrukce:

    fn main() {
    let pole: Box<[u8; 4]> = Box::new([1, 2, 3, 4]);

    shoda pole {
    čísla
    if nums.iter().sum::() == 10

    => {
    drop(nums);
    }
    _ => nedostupný!(),
    }
    }

  • Indikace povolena atributy při definování parametrů funkcí, uzávěrů a ukazatelů funkcí. Podporovány jsou atributy podmíněné kompilace (cfg, cfg_attr), které řídí diagnostiku pomocí lint (povolit, varovat, zakázat a zakázat) a pomocné atributy volání maker.

    fn len(
    #[cfg(windows)] řez: &[u16], // použijte parametr ve Windows
    #[cfg(not(windows))] slice: &[u8], // použití v jiných OS
    ) -> použít {
    slice.len()
    }

  • Upozornění na problémy zjištěné při kontrole výpůjček proměnných (brow checker) pomocí techniky NLL (Non-Lexical Lifetimes), přeloženo do kategorie fatálních chyb. Připomeňme, že ověřovací systém založený na novém mechanismu zohledňování životnosti vypůjčených proměnných umožnil identifikovat některé problémy, které si starý ověřovací kód nevšiml. Protože chybový výstup pro takové kontroly by mohl ovlivnit kompatibilitu s dříve fungujícím kódem, byla zpočátku vydána varování namísto chyb. Varování byla nyní nahrazena chybami při spuštění v režimu Rust 2018. V příštím vydání bude chybový výstup implementován také v režimu Rust 2015, který se konečně zbaví staré kontroly výpůjček;
  • Atribut „const“, který určuje možnost použití v libovolném kontextu místo konstant, se používá pro funkce Vec::new, String::new, LinkedList::new, str::len, [T]::len , str::as_bytes,
    abs, wrapping_abs a overflowing_abs;

  • Do kategorie stable byla převedena nová část API, včetně metod, které byly stabilizovány
    Pin::into_inner, Instant::checked_duration_since a Instant::saturating_duration_since;

  • Správce cargo balíčků má nyní možnost používat pro konfigurační soubory příponu „.toml“. Přidána předběžná podpora pro budování standardní knihovny přímo z Cargo. Přidán příznak „--workspace“, který nahradil kontroverzní příznak „--all“. Do metadat bylo přidáno nové pole "publikovat“, který umožňuje publikovat závislosti zadáním značky git a čísla verze. Přidána testovací možnost "-Ztimings" pro generování HTML zprávy o dobách provádění různých fází kompilace.
  • V kompilátoru rustc diagnostické zprávy zahrnují oříznutí konce kódu, který se nevejde do terminálu. Poskytuje třetí úroveň podpory pro cílové platformy
    i686-unknown-uefi a sparc64-unknown-openbsd. Třetí úroveň zahrnuje základní podporu, ale bez automatického testování a publikování oficiálních sestavení.

Zdroj: opennet.ru

Přidat komentář