Izdanje Rust programskog jezika 1.45

Objavljeno izdanje 1.45 sistemskog programskog jezika Hrđa, osnovan projektom Mozilla. Jezik se fokusira na sigurnost memorije, omogućuje automatsko upravljanje memorijom i pruža alate za postizanje visokog paralelizma zadataka bez korištenja skupljača smeća i runtime.

Rustovo automatsko upravljanje memorijom uklanja pogreške prilikom manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom niske razine, kao što je pristup memorijskoj regiji nakon što je oslobođena, dereferenciranje nultog pokazivača, prekoračenje međuspremnika, itd. Upravitelj paketa se razvija za distribuciju biblioteka, osiguranje sklapanja i upravljanje ovisnostima projekta. Naboj, što vam omogućuje da jednim klikom dobijete biblioteke potrebne za program. Repozitorij je podržan za host knjižnica sanduci.io.

Glavni inovacije:

  • Eliminirano dugotrajno mana prilikom izvođenja konverzija između cijelih brojeva i brojeva s pomičnim zarezom. Budući da prevodilac Rust koristi LLVM kao pozadinu, operacije pretvorbe tipa izvedene su kroz instrukcije srednjeg koda LLVM, kao što je fptoui, koji imaju jednu značajnu značajku - nedefinirano ponašanje ako se dobivena vrijednost ne uklapa u tip cilja. Na primjer, kada pretvarate float vrijednost 300 s tipom f32 u cjelobrojni tip u8, rezultat je nepredvidiv i može varirati na različitim sustavima. Problem je što se ova značajka pojavljuje u kodu koji nije označen kao "nesiguran".

    Od Rust 1.45, ponašanje prekoračenja veličine tipa je strogo regulirano, a operacija pretvorbe "as" provjerava prekoračenje i prisiljava vrijednost koja se pretvara u maksimalnu ili minimalnu vrijednost ciljanog tipa (za gornji primjer, vrijednost od 300 bi se pretvorilo u 255). Da biste onemogućili takve provjere, osigurani su dodatni API pozivi “{f64, f32}::to_int_unchecked” koji rade u nesigurnom načinu rada.

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

    fn main() {
    neka previše_veliko = 300.0;
    neka previše_malo = -100.0;
    neka nan = f32::NAN;

    neka je x: f32 = 1.0;
    neka y: u8 = nesigurno { x.to_int_unchecked() };

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

  • Koristite stabilizirano proceduralne makronaredbeizrazi nalik funkciji, predlošci i izjave. Prije se takve makronaredbe nisu mogle pozivati ​​posvuda, već samo u određenim dijelovima koda (kao zaseban poziv, koji nije isprepleten s drugim kodom). Proširenje načina na koji se makronaredbe mogu pozivati, slično funkcijama, bio je jedan od zahtjeva da bi web okvir funkcionirao Raketa u stabilnim izdanjima Rusta. Prethodno je za postizanje dodatne fleksibilnosti u definiranju rukovatelja u Rocketu bilo potrebno omogućiti eksperimentalnu značajku pod nazivom "proc_macro_hygiene", koja nije dostupna u stabilnim verzijama Rusta. Ova je funkcionalnost sada ugrađena u stabilna izdanja jezika.
  • Dopušteno korištenje raspona s tipom "char" za ponavljanje vrijednosti raspona (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    za ch u 'a'..='z' {
    ispis!("{}", ch);
    }
    println!(); // Ispisat će "abcdefghijklmnopqrstuvwxyz"

  • Novi dio API-ja prebačen je u stabilnu kategoriju, uključujući stabilizirane
    Arc::as_ptr,
    BTreeMap::remove_entry,
    Rc::as_ptr,
    rc::Slab::as_ptr,
    rc::Slabo::from_raw,
    rc::Weak::into_raw,
    str::strip_prefix,
    str::strip_sufiks,
    sync::Weak::as_ptr,
    sync::Weak::from_raw,
    sync::Weak::into_raw,
    char::UNICODE_VERSION,
    Span::resolved_at,
    Span::located_at,
    Span::mixed_site,
    unix::process::CommandExt::arg0.

  • Rustc prevodilac dodao je podršku za nadjačavanje različitih značajki ciljne platforme pomoću oznake "target-feature", na primjer, "-C target-feature=+avx2,+fma". Dodane su i nove zastavice:
    "force-unwind-tables" za generiranje tablica poziva za odmotavanje, bez obzira na strategiju rukovanja padom; "embed-bitcode" za kontrolu je li LLVM bitcode uključen u generirane rlibove. Oznaka "embed-bitcode" omogućena je prema zadanim postavkama u Cargu kako bi se optimiziralo vrijeme izrade i potrošnja prostora na disku.

  • Treća razina podrške pružena je za platforme mipsel-sony-psp i thumbv7a-uwp-windows-msvc. Treća razina uključuje osnovnu podršku, ali bez automatiziranog testiranja i objave službenih verzija.

Dodatno, možete napomenuti priča o stvaranju najjednostavnijeg aplikacije na Rust jeziku, počinje s učitavanjem sustava i spreman je za samostalno učitavanje umjesto operativnog sustava.
Članak je prvi u nizu posvećenom demonstriranju tehnika koje su tražene u programiranju niske razine i razvoju OS-a.

Izvor: opennet.ru

Dodajte komentar