Vydanie programovacieho jazyka Rust 1.47

publikovaný vydanie 1.47 systémového programovacieho jazyka Hrdza, 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 smetiar и runtime (runtime sa scvrkáva na základnú inicializáciu a údržbu štandardnej knižnice).

Automatická správa pamäte Rust eliminuje chyby pri manipulácii s ukazovateľmi a chráni pred problémami vznikajúcimi pri manipulácii s pamäťou na nízkej úrovni, ako je prístup k oblasti pamäte po jej uvoľnení, dereferencie nulového ukazovateľa, pretečenie vyrovnávacej pamäte atď. 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. Hostiteľské knižnice podporujú úložisko crates.io.

Hlavné inovácie:

  • Implementovaná podpora pre typy polia ľubovoľná veľkosť. Predtým, kvôli neschopnosti definovať generické funkcie pre všetky celočíselné hodnoty, štandardná knižnica poskytovala vstavanú podporu vlastností len pre polia s veľkosťou do 32 prvkov (vlastnosti pre každú veľkosť boli definované staticky). Vďaka vytvoreniu funkcionality konštantných generík („const generics“) bolo možné definovať generické funkcie pre ľubovoľnú veľkosť poľa, ale ešte nie sú zahrnuté do funkcií stabilného jazyka, hoci sú implementované v kompilátore a sú teraz zapojené v štandardnej knižnici pre vlastnosti poľa ľubovoľnej veľkosti.

    Napríklad nasledujúci konštrukt v Rust 1.47 vytlačí obsah poľa, hoci predtým by to viedlo k chybe:

    fnmain() {
    nech xs = [0; 34];

    println!("{:?}", xs);
    }

  • Poskytovaný výstup kratších stôp (backtrace), výstup v núdzových situáciách. Prvky, ktoré vo väčšine situácií nie sú zaujímavé, ale rušia výstup a odvádzajú pozornosť od primárnych príčin problému, sú zo sledovania vylúčené. Ak chcete vrátiť úplné sledovanie, môžete použiť premennú prostredia "RUST_BACKTRACE=full". Napríklad pre kód

    fnmain() {
    panika!();
    }

    Predtým bola stopa na výstupe v 23 etapách, ale teraz sa zredukuje na
    3 kroky, ktoré vám umožnia okamžite pochopiť podstatu:

    vlákno 'main' spanikárilo pri 'explicit panic', src/main.rs:2:5
    backtrace zásobníka:
    0: std::panic::begin_panic
    na /rustc/d…d75a/library/std/src/panicking.rs:497
    1: ihrisko::hlavné
    na ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    na /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Kompilátor rustc bol aktualizovaný na zostavenie pomocou LLVM 11 (Hrdza používa LLVM ako backend pre generovanie kódu). Zároveň je zachovaná možnosť stavať so staršími LLVM až do verzie 8, ale štandardne (v rust-lang/llvm-project) teraz používa LLVM 11. Vydanie LLVM 11 sa očakáva v najbližších dňoch.
  • Na platforme Windows poskytuje kompilátor rustc podporu pre umožnenie kontrol integrity riadiaceho toku (Control Flow Guard), aktivovaných pomocou príznaku „-C control-flow-guard“. Na iných platformách je tento príznak zatiaľ ignorovaný.
  • Nová časť API bola presunutá do stabilnej kategórie vrátane stabilizovaných
    Ident::new_raw,
    Rozsah::is_empty,
    RangeInclusive::is_empty,
    Výsledok::as_deref,
    Výsledok::as_deref_mut,
    Vec::únik,
    pointer::offset_from,
    f32::TAU a
    f64::TAU.

  • Atribút „const“, ktorý určuje možnosť jeho použitia v akomkoľvek kontexte namiesto konštánt, sa používa v metódach:
    • nové pre všetky celé čísla iné ako nula;
    • check_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub a saturating_mul pre všetky celé čísla;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_interpunkcia, is_ascii_graphic, is_ascii_whitespace a is_ascii_control pre typy char a u8.
  • Pre FreeBSD zapojené toolkit z FreeBSD 11.4 (FreeBSD 10 nepodporuje LLVM 11).

Zdroj: opennet.ru

Pridať komentár