Vydání programovacího jazyka Rust 1.40

zveřejněno vydání systémového programovacího jazyka Rez 1.40založil projekt Mozilla. Jazyk se zaměřuje na bezpečnou správu paměti, poskytuje automatickou správu paměti a poskytuje prostředky k dosažení vysokého paralelismu úloh a zároveň se vyhýbá použití garbage collectoru a 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:

  • Přidána možnost označovat struktury (struct) a výčty (enum s blokem Variant) pomocí atributu "#[ne_vyčerpávající]", který umožňuje v budoucnu přidat nová pole a možnosti do deklarovaných struktur a výčtů. Například vývojáři modulů, které mají struktury s veřejně deklarovanými poli, mohou použít "#[non_exhaustive]" k označení struktur, které mohou mít v budoucnu přidána nová pole. Dosud byl v této situaci vývojář nucen volit mezi deklarováním polí soukromě a vazbou na neměnný seznam polí. Nový atribut toto omezení odstraňuje a umožňuje vám v budoucnu přidávat nová pole bez rizika porušení dříve zkompilovaného externího kódu. V balíčcích přepravek je při porovnávání možností v sekci „shoda“ vyžadována explicitní definice masky „_ => {...}“, která pokrývá možná budoucí pole, jinak se při přidávání nových polí zobrazí chyba.
  • Přidal schopnost volat procedurální makro mac!() v kontextu typu. Nyní můžete například napsat „type Foo = expand_to_type!(bar);“, pokud je „expand_to_type“ procedurální makro.
  • V blocích "extern { ... }" přidal schopnost používat procedurální a atributová makra, včetně maker „bang!()“, například:

    makro_pravidla! make_item { ($name:ident) => { fn $name(); } }

    externí {
    make_item!(alpha);
    make_item!(beta);
    }

    externí "C" {
    #[moje_identita_makro] fn foo();
    }

  • V makrech implementováno schopnost generovat prvky „macro_rules!“. Generování "macro_rules!" možné jak v makrech podobných funkcím („mac!()“), tak v makrech ve formě atributů („#[mac]“).
  • V prvku mapování $m:meta přidal podpora libovolných hodnot výčtu tokenů („[TOKEN_STREAM]“, „{TOKEN_STREAM}“ a „(TOKEN_STREAM)“), například:

    makro_pravidla! accept_meta { ($m:meta) => {} }
    přijmout_meta!( moje::cesta );
    přijmout_meta!( moje::cesta = "svítí" );
    přijmout_meta!( moje::cesta ( abc ) );
    přijmout_meta!( moje::cesta [ abc ] );
    přijmout_meta!( moje::cesta { abc } );

  • V režimu Rust 2015 je povolen chybový výstup pro problémy zjištěné při kontrole výpůjček proměnných (kontrola výpůjček) pomocí techniky NLL (Non-Lexical Lifetimes). Dříve byla varování při spuštění v režimu Rust 2018 nahrazena chybami.
    Poté, co byla změna rozšířena na režim Rust 2015, byli vývojáři konečně schopni zbav se ze starého půjčovatele.

    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.

  • Atribut „const“, který určuje možnost jeho použití v libovolném kontextu místo konstant, se používá pro funkci is_power_of_two (pro celá čísla bez znaménka).
  • Nová část API byla přesunuta do stabilní kategorie, včetně makra todo!() a slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, metody byly stabilizovány.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes a {f32,f64}::from_ne_bytes.

  • Ve správci balíčků náklad
    implementováno ukládání upozornění kompilátoru na disk. Přidána možnost „metadata nákladu“ do příkazu „metadata nákladu“.--platforma filtru", aby se ve sloupci rozlišení závislostí zobrazily pouze balíčky vázané na zadanou cílovou platformu. Přidána možnost konfigurace http.ssl-version pro definování platných verzí TLS.
    Přidána možnost publikovat sekci "dev-dependencies" bez zadání klíče "verze".

  • Kompilátor rustc poskytuje podporu třetí úrovně pro cílové platformy thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 a mips64el-unknown-linux-muslabi64. 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ář