Vydání programovacího jazyka Rust 1.38

zveřejněno vydání systémového programovacího jazyka Rez 1.38, 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:

  • Přidán režim zřetězené kompilace (zřetězený), ve kterém sestavení závislého balíčku bedny začíná, jakmile jsou k dispozici metadata závislosti, bez čekání na dokončení kompilace. Při kompilaci balíčku není nutné závislosti plně sestavovat, stačí definovat metadata, která zahrnují seznamy typů, závislostí a exportovaných prvků. Metadata jsou zpřístupněna brzy v procesu kompilace, takže propojené balíčky lze nyní zkompilovat mnohem dříve. Při sestavování jednotlivých balíčků nemá navrhovaný režim vliv na výkon, ale pokud sestava pokrývá balíčky s rozvětvenými závislostmi, lze celkovou dobu sestavování zkrátit o 10–20 %;
  • Zajišťuje detekci nesprávného použití funkcí std::mem::neinicializováno и std::mem::nulováno. Například std::mem::uninitialized je vhodný pro rychlé vytváření polí, ale uvádí kompilátor v omyl, protože se zdá být inicializovaný, ale ve skutečnosti zůstává hodnota neinicializovaná. Funkce mem::uninitialized je již označena jako zastaralá a doporučuje se místo ní použít přechodný typ MožnáJednotka. Pokud jde o mem::zeroed, tato funkce může způsobit problémy s typy, které nemohou přijmout nulové hodnoty.

    Aby pomohla identifikovat nedefinované chování, přidává nové vydání do kompilátoru kontrolu lint, která detekuje některé problémy s mem::uninitialized nebo mem::zeroed. Nyní se například zobrazí chyba při pokusu o použití mem::uninicialized nebo mem::zeroed s typy &T a Box‹T›, které představují objekty ukazatele, které nemohou přijímat hodnoty null;

  • Atribut „#[deprecated]“ byl rozšířen, aby bylo možné označit balíčky přepravek za zastaralé a naplánovat jejich budoucí smazání. Od verze Rust 1.38 lze tento atribut použít také pro makra;
  • Přidána možnost používat atribut „#[global_allocator]“ v submodulech;
  • Funkce přidána std::any::název_typu, která vám umožní zjistit název typu, což může být užitečné pro účely ladění. Například během provádění programu můžete zjistit, pro jaký typ byla funkce volána:

    fn gen_value‹T: Výchozí>() -› T {
    println!("Inicializace instance {}", std::any::název_typu::‹T›());
    Výchozí::default()
    }

    fn main() {
    nech _: i32 = gen_value(); # Vytiskne se „i32“.
    let _: String = gen_value(); # vytiskne "alloc::string::String"
    }

  • Rozšířené funkce standardní knihovny:
    • slice::{concat, connect, join} nyní může mít kromě &T; hodnotu &[T];
    • "*const T" a "*mut T" nyní implementují marker::Unpin;
    • „Arc‹[T]›“ a „Rc‹[T]›“ nyní implementují FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} nyní implementují DoubleEndedIterator.
    • ascii::EscapeDefault implementuje klonování a zobrazení.
  • Do kategorie stable byla převedena nová část API, včetně metod, které byly stabilizovány
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Délka::as_secs_f{32|64},
    • Duration::div_duration_f{32|64},
    • Duration::div_f{32|64},
    • Délka::from_secs_f{32|64},
    • Délka::mul_f{32|64},
    • operace divize se zbytkem
      div_euclid a rem_euclid pro všechna celočíselná primitiva;

  • Přidána podpora pro vícenásobné specifikování možnosti „--features“ pro povolení různých funkcí ve správci nákladních balíčků;
  • Kompilátor poskytuje třetí úroveň podpora pro cílové platformy aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc cíle, armlinv7-unknown-armlinv7-unknown -gnueabi, armv32-unknown-linux-musleabi, hexagon-unknown-linux-musl a riscvXNUMXi-unknown-none-elf. 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ář