Vydanie programovacieho jazyka Rust 1.38

publikovaný vydanie systémového programovacieho jazyka Hrdza 1.38, ktorú založil projekt 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:

  • Pridaný režim zreťazenej kompilácie (reťazový), v ktorom sa zostavovanie závislého balíka prepravky začína hneď, ako budú dostupné metadáta závislosti, bez čakania na dokončenie jeho kompilácie. Pri kompilácii balíka nie je potrebné úplne zostaviť závislosti, stačí definovať metadáta, ktoré zahŕňajú zoznamy typov, závislostí a exportovaných prvkov. Metadáta sú sprístupnené na začiatku procesu kompilácie, takže prepojené balíčky je teraz možné skompilovať oveľa skôr. Pri zostavovaní jednotlivých balíčkov neovplyvňuje navrhovaný režim výkon, ale ak zostava pokrýva balíčky s rozvetvenými závislosťami, celkový čas zostavovania sa môže skrátiť o 10-20%;
  • Zabezpečuje detekciu nesprávneho používania funkcií std::mem::neinicializované и std::mem::nulované. Napríklad std::mem::uninitialized je vhodný na rýchle vytváranie polí, ale zavádza kompilátor, pretože sa zdá byť inicializovaný, ale v skutočnosti hodnota zostáva neinicializovaná. Funkcia mem::uninicialized je už označená ako zastaraná a namiesto nej sa odporúča použiť prechodný typ MožnoUnit. Čo sa týka mem::zeroed, táto funkcia môže spôsobiť problémy s typmi, ktoré nedokážu akceptovať nulové hodnoty.

    Na pomoc pri identifikácii nedefinovaného správania pridáva nové vydanie do kompilátora kontrolu vlákien, ktorá deteguje nejaké problémy s mem::uninicialized alebo mem::zeroed. Napríklad teraz dostanete chybu pri pokuse použiť mem::uninicializované alebo mem::zeroed s typmi &T a Box‹T›, ktoré predstavujú objekty ukazovateľa, ktoré nemôžu prijať hodnoty null;

  • Atribút „#[deprecated]“ bol rozšírený, aby bolo možné balíky prepravky označiť za zastarané a naplánovať ich budúce vymazanie. Od verzie Rust 1.38 je možné tento atribút použiť aj pre makrá;
  • Pridaná možnosť používať atribút „#[global_allocator]“ v podmoduloch;
  • Pridaná funkcia std::any::názov_typu, ktorý vám umožňuje zistiť názov typu, čo môže byť užitočné na účely ladenia. Napríklad počas vykonávania programu môžete zistiť, pre aký typ bola funkcia volaná:

    fn gen_value‹T: Predvolené>() -› T {
    println!("Inicializuje sa inštancia {}", std::any::name_type::‹T›());
    Predvolené::default()
    }

    fnmain() {
    nech _: i32 = gen_value(); Vytlačí sa # „i32“.
    nech _: String = gen_value(); # vypíše "alloc::string::String"
    }

  • Rozšírené funkcie štandardnej knižnice:
    • slice::{concat, connect, join} teraz môže mať okrem &T; aj hodnotu &[T];
    • "*const T" a "*mut T" teraz implementujú marker::Unpin;
    • „Arc‹[T]›“ a „Rc‹[T]›“ teraz implementujú FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} teraz implementujte DoubleEndedIterator.
    • ascii::EscapeDefault implementuje klonovanie a zobrazenie.
  • Do stabilnej kategórie bola presunutá nová časť API, vrátane metód, ktoré boli stabilizované
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Trvanie::as_secs_f{32|64},
    • Trvanie::div_duration_f{32|64},
    • Trvanie::div_f{32|64},
    • Trvanie::from_secs_f{32|64},
    • Trvanie::mul_f{32|64},
    • operácie divízie so zvyškom
      div_euclid a rem_euclid pre všetky celočíselné primitívy;

  • Pridaná podpora pre viacnásobné špecifikovanie možnosti „--features“ na povolenie rôznych funkcií v správcovi nákladných balíkov;
  • Kompilátor poskytuje tretí úroveň podpora pre cieľové platformy aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc známe ciele, armlinv7-unknown -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl a riscv32i-unknown-none-elf. Tretia úroveň zahŕňa základnú podporu, ale bez automatického testovania a zverejňovania oficiálnych verzií.

Zdroj: opennet.ru

Pridať komentár