Programski jezik Rust 1.47 izdanje

objavljeno izdanje 1.47 sistemskog programskog jezika rđa, osnovan od strane Mozilla projekta. Jezik se fokusira na sigurnost memorije, pruža automatsko upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma zadataka bez upotrebe sakupljač smeća и runtime (vreme izvođenja se svodi na osnovnu inicijalizaciju i održavanje standardne biblioteke).

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. Podržano je spremište za hostiranje biblioteka crates.io.

Glavni inovacije:

  • Implementirana podrška za tipove nizovi bilo koje veličine. Ranije, zbog nemogućnosti da se definišu generičke funkcije za sve celobrojne vrednosti, standardna biblioteka je pružala ugrađenu podršku za osobine samo za nizove veličine do 32 elementa (osobine za svaku veličinu su bile statički definisane). Zahvaljujući kreiranju funkcionalnosti konstantnih generika (“const generics”), postalo je moguće definirati generičke funkcije za bilo koju veličinu niza, ali one još nisu uključene u karakteristike stabilnog jezika, iako su implementirane u kompajleru i sad uključeni u standardnoj biblioteci za osobine niza bilo koje veličine.

    Na primjer, sljedeća konstrukcija u Rust 1.47 će ispisati sadržaj niza, iako bi ranije to rezultiralo greškom:

    fn main() {
    neka xs = [0; 34];

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

  • Obezbeđen izlaz kraćih tragova (backtrace), izlaz u hitnim situacijama. Elementi koji nisu od interesa u većini situacija, ali ometaju izlaz i odvlače pažnju od primarnih uzroka problema, isključeni su iz traga. Da biste vratili puni trag, možete koristiti varijablu okruženja "RUST_BACKTRACE=full". Na primjer, za kod

    fn main() {
    panika!();
    }

    Ranije je praćenje izlazilo u 23 faze, ali će se sada svesti na
    3 koraka koji vam omogućavaju da odmah shvatite suštinu:

    tema 'main' uspaničena od 'eksplicitne panike', src/main.rs:2:5
    trag steka:
    0: std::panicking::begin_panic
    na /rustc/d…d75a/library/std/src/panicking.rs:497
    1: igralište::glavno
    na ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    na /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Rustc kompajler je ažuriran da koristi build LLVM 11 (Rust koristi LLVM kao backend za generisanje koda). Istovremeno, zadržava se mogućnost izgradnje sa starijim LLVM-ovima, do verzije 8, ali prema zadanim postavkama (u rust-lang/llvm-project) sada koristi LLVM 11. Očekuje se da će LLVM 11 biti objavljen u narednim danima.
  • Na Windows platformi, rustc kompajler pruža podršku za omogućavanje provere integriteta toka kontrole (Control Flow Guard), aktiviranu pomoću zastavice “-C control-flow-guard”. Na drugim platformama ova zastava se za sada ignorira.
  • Novi dio API-ja prebačen je u stabilnu kategoriju, uključujući stabilizirane
    Ident::new_raw,
    Raspon::is_empty,
    RangeInclusive::is_empty,
    Rezultat::as_deref,
    Rezultat::as_deref_mut,
    Vec::leak,
    pokazivač::offset_from,
    f32::TAU i
    f64::TAU.

  • Atribut “const” koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti, koristi se u metodama:
    • novo za sve cijele brojeve osim nule;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub i saturating_mul za sve cijele brojeve;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_lowercase, is_ascii_alphanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_interpunkcija, is_ascii_graphic, is_ascii_whitespace i is_ascii za tipove uznačaja i is_l8.
  • Za FreeBSD uključeni komplet alata iz FreeBSD 11.4 (FreeBSD 10 ne podržava LLVM 11).

izvor: opennet.ru

Dodajte komentar