Vydanie programovacieho jazyka Rust 1.45

publikovaný vydanie 1.45 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 nástroje na dosiahnutie vysokého paralelizmu úloh bez použitia zberača odpadu a runtime.

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, č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:

  • Vyradené dlhodobo chyba pri vykonávaní konverzií medzi celými číslami a číslami s pohyblivou rádovou čiarkou. Keďže kompilátor Rust používa LLVM ako backend, operácie konverzie typu sa vykonávali prostredníctvom inštrukcií stredného kódu LLVM, ako napr. fptoui, ktoré majú jednu výraznú vlastnosť – nedefinované správanie, ak výsledná hodnota nezapadá do cieľového typu. Napríklad pri prevode float hodnoty 300 s typom f32 na celé číslo typu u8 je výsledok nepredvídateľný a môže sa líšiť v rôznych systémoch. Problém je v tom, že táto funkcia sa objavuje v kóde, ktorý nie je označený ako „nebezpečný“.

    Od verzie Rust 1.45 je správanie pretečenia veľkosti typu prísne regulované a operácia konverzie „ako“ kontroluje pretečenie a vynúti prevádzanú hodnotu na maximálnu alebo minimálnu hodnotu cieľového typu (v príklade vyššie je to hodnota 300 by sa premenilo na 255). Na vypnutie takýchto kontrol sú k dispozícii dodatočné volania API „{f64, f32}::to_int_unchecked“, ktoré fungujú v nebezpečnom režime.

    fn cast(x: f32) -> u8 {
    x ako u8
    }

    fnmain() {
    let too_big = 300.0;
    nech je taky_maly = -100.0;
    nech nan = f32::NAN;

    nech x: f32 = 1.0;
    nech y: u8 = unsafe { x.to_int_unchecked() };

    println!("too_big_casted = {}", cast(too_big)); // výstup 255
    println!("too_small_casted = {}", cast(too_small)); // výstup 0
    println!("not_a_number_casted = {}", cast(nan)); // výstup 0
    }

  • Používajte stabilizované procedurálne makráfunkčné výrazy, šablóny a príkazy. Predtým sa takéto makrá nedali volať všade, ale len v určitých častiach kódu (ako samostatné volanie, neprepletené s iným kódom). Rozšírenie spôsobu volania makier, podobne ako funkcie, bolo jednou z požiadaviek na fungovanie webového rámca Raketa v stabilných vydaniach Rust. Predtým si dosiahnutie dodatočnej flexibility pri definovaní manipulátorov v Rocket vyžadovalo povolenie experimentálnej funkcie s názvom „proc_macro_hygiene“, ktorá nie je dostupná v stabilných verziách Rust. Táto funkcia je teraz zabudovaná do stabilných verzií jazyka.
  • Je povolené používať rozsahy s typom „char“ na iteráciu hodnôt rozsahu (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    pre ch v 'a'..='z' {
    print!("{}", ch);
    }
    println! (); // Vytlačí "abcdefghijklmnopqrstuvwxyz"

  • Nová časť API bola presunutá do stabilnej kategórie vrátane stabilizovaných
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Weak::as_ptr,
    rc::Slabé::from_raw,
    rc::Weak::into_raw,
    str::prefix_stripu,
    str::prípona_stripu,
    sync::Weak::as_ptr,
    synchronizácia::Slabá::from_raw,
    sync::Weak::into_raw,
    znak::UNICODE_VERSION,
    Span::resolved_at,
    Span::location_at,
    Span::mixed_site,
    unix::process::CommandExt::arg0.

  • Kompilátor rustc pridal podporu pre prepísanie rôznych funkcií cieľovej platformy pomocou príznaku „cieľová funkcia“, napríklad „-C cieľová funkcia=+avx2,+fma“. Boli pridané aj nové vlajky:
    "force-unwind-tables" na generovanie unwind call tabuliek, bez ohľadu na stratégiu riešenia zlyhania; "embed-bitcode" na kontrolu, či je bitový kód LLVM zahrnutý do generovaných rlibs. Príznak „embed-bitcode“ je v Cargo predvolene povolený, aby sa optimalizoval čas zostavenia a spotreba miesta na disku.

  • Tretia úroveň podpory bola poskytnutá pre platformy mipsel-sony-psp a thumbv7a-uwp-windows-msvc. Tretia úroveň zahŕňa základnú podporu, ale bez automatického testovania a zverejňovania oficiálnych verzií.

Okrem toho je možné poznamenať príbeh o vytvorení najjednoduchšieho aplikácie v jazyku Rust, pričom namiesto operačného systému začína používať zavádzač systému a je pripravený na samostatné načítanie.
Tento článok je prvým zo série venovanej demonštrácii techník, ktoré sú žiadané pri nízkoúrovňovom programovaní a vývoji OS.

Zdroj: opennet.ru

Pridať komentár