Programski jezik Rust 1.45 izdanje

objavljeno izdanje 1.45 sistemskog programskog jezika rđa, osnovan od strane Mozilla projekta. Jezik se fokusira na sigurnost memorije, pruža automatsko upravljanje memorijom i pruža alate za postizanje visokog paralelizma zadataka bez korištenja sakupljača smeća i runtime.

Rustovo automatsko upravljanje memorijom eliminiše greške prilikom manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom na niskom nivou, kao što je pristup memorijskom regionu nakon što je on oslobođen, nulte reference pokazivača, prekoračenje bafera itd. Razvija se menadžer paketa za distribuciju biblioteka, osiguravanje sklapanja i upravljanje ovisnostima od strane projekta. teret, što vam omogućava da jednim klikom dobijete biblioteke potrebne za program. Podržano je spremište za hostiranje biblioteka crates.io.

Glavni inovacije:

  • Eliminisana dugogodišnja nedostatak prilikom izvođenja konverzija između cijelih brojeva i brojeva s pomičnim zarezom. Budući da Rust kompajler koristi LLVM kao pozadinu, operacije konverzije tipa su izvedene preko LLVM međukodnih instrukcija kao što su fptoui, koji imaju jednu značajnu osobinu - nedefinirano ponašanje ako se rezultirajuća vrijednost ne uklapa u ciljni tip. Na primjer, pri pretvaranju float vrijednosti 300 sa tipom f32 u cjelobrojni tip u8, rezultat je nepredvidiv i može varirati na različitim sistemima. Problem je u tome što se ova funkcija pojavljuje u kodu koji nije označen kao "nesiguran".

    Od Rusta 1.45, ponašanje prekoračenja veličine tipa je strogo regulirano, a operacija konverzije "as" provjerava prelijevanje i prisiljava vrijednost koja se pretvara u maksimalnu ili minimalnu vrijednost ciljnog tipa (za primjer iznad, vrijednost od 300 bi se pretvorilo u 255). Za onemogućavanje takvih provjera, dodatni API pozivi “{f64, f32}::to_int_unchecked” su obezbjeđeni, koji rade u nesigurnom načinu rada.

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

    fn main() {
    neka preveliki = 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(oo_big)); // izlaz 255
    println!("too_small_casted = {}", cast(oo_small)); // izlaz 0
    println!("not_a_number_casted = {}", cast(nan)); // izlaz 0
    }

  • Koristite stabilizovano proceduralni makroiizrazi, predlošci i iskazi slični funkcijama. Ranije se takvi makroi nisu mogli pozivati ​​svuda, već samo u određenim dijelovima koda (kao zaseban poziv, ne isprepleten s drugim kodom). Proširenje načina na koji se makroi mogu pozivati, slično funkcijama, bio je jedan od zahtjeva da bi web framework funkcionirao raketa u stabilnim izdanjima Rusta. Ranije je postizanje dodatne fleksibilnosti u definiranju rukovatelja u Rocket-u zahtijevalo omogućavanje eksperimentalne funkcije pod nazivom “proc_macro_hygiene”, koja nije dostupna u stabilnim verzijama Rusta. Ova funkcionalnost je sada ugrađena u stabilna izdanja jezika.
  • Dozvoljeno je korištenje raspona s tipom "char" za ponavljanje vrijednosti raspona (ops::{Range, RangeFrom, RangeFull, RangeInclusive, RangeTo}):

    za ch u 'a'..='z' {
    print!("{}", ch);
    }
    println!(); // će ispisati "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::Slab::od_raw,
    rc::Slab::into_raw,
    str::strip_prefix,
    str::strip_suffix,
    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.

  • Kompajler rustc je dodao podršku za nadjačavanje različitih funkcija ciljne platforme koristeći oznaku "target-feature", na primjer, "-C target-feature=+avx2,+fma". Dodane su i nove zastavice:
    "force-unwind-tables" za generiranje tabela poziva za odmotavanje, bez obzira na strategiju rukovanja padom; "embed-bitcode" za kontrolu da li je LLVM bitni kod uključen u generirane rlibove. Oznaka "embed-bitcode" je podrazumevano omogućena u Cargu radi optimizacije vremena izgradnje i potrošnje prostora na disku.

  • Treći nivo podrške je obezbeđen za platforme mipsel-sony-psp i thumbv7a-uwp-windows-msvc. Treći nivo uključuje osnovnu podršku, ali bez automatizovanog testiranja i objavljivanja zvaničnih verzija.

Osim toga, može se primijetiti priča o stvaranju najjednostavnijeg aplikacije na jeziku Rust, počevši da koristite pokretač sistema i spreman za samostalno učitavanje umesto operativnog sistema.
Članak je prvi u nizu posvećenom demonstriranju tehnika koje su tražene u programiranju niskog nivoa i razvoju OS-a.

izvor: opennet.ru

Dodajte komentar