Izdanje Rust programskog jezika 1.47

Objavljeno je izdanje 1.47 sistemskog programskog jezika Rust, utemeljenog na projektu Mozilla. Jezik se fokusira na sigurnost memorije, omogućuje automatsko upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma zadataka bez korištenja skupljača smeća ili vremena izvođenja (vrijeme izvođenja je smanjeno na osnovnu inicijalizaciju i održavanje standardne biblioteke).

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. Za distribuciju knjižnica, osiguranje sklapanja i upravljanje ovisnostima, projekt razvija upravitelja paketa Cargo. Repozitorij crates.io podržan je za smještaj knjižnica.

Glavne inovacije:

  • Implementirana podrška za značajke za nizove proizvoljne veličine. Prethodno je, zbog nemogućnosti definiranja generičkih funkcija za sve cjelobrojne vrijednosti, standardna biblioteka pružala ugrađenu podršku za značajke samo za nizove veličine do 32 elementa (osobine za svaku veličinu bile su statički definirane). Zahvaljujući stvaranju generičke funkcionalnosti const, postalo je moguće definirati generičke funkcije za bilo koju veličinu polja, ali one još nisu uključene u stabilne značajke jezika, iako su implementirane u kompajleru i sada se koriste u standardnoj biblioteci za vrste polja bilo koje veličine.
    Na primjer, sljedeća konstrukcija u Rustu 1.47 ispisat će sadržaj niza, iako bi prije rezultirala pogreškom:

fn main() {
neka je xs = [0; 34];
println!("{:?}", xs);
}

  • Omogućen izlaz kraćih tragova (backtrace), izlaz u hitnim situacijama. Elementi koji nisu od interesa u većini situacija, ali zatrpavaju izlaz i odvraćaju pozornost od primarnih uzroka problema, isključeni su iz praćenja. Da biste vratili potpuno praćenje, možete koristiti varijablu okruženja "RUST_BACKTRACE=full". Na primjer, za šifru

fn main() {
panika!();
}

Ranije je trag izlazio u 23 faze, ali sada će se smanjiti na 3 faze, što vam omogućuje da odmah shvatite bit:

nit 'main' uspaničila se na 'eksplicitnu paniku', src/main.rs:2:5
povratni trag stoga:
0: std::panicing::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 za izradu pomoću LLVM 11 (Rust koristi LLVM kao pozadinu za generiranje koda). U isto vrijeme, mogućnost izgradnje sa starim LLVM-om, do verzije 8, je zadržana, ali prema zadanim postavkama (u rust-lang/llvm-project) sada se koristi LLVM 11. Izdanje LLVM 11 očekuje se u narednom periodu dana.
  • Na Windows platformi, prevodilac rustc pruža podršku za omogućavanje provjera integriteta protoka kontrole (Control Flow Guard), aktiviranih korištenjem oznake “-C control-flow-guard”. Na drugim platformama ova se zastavica za sada zanemaruje.
  • Novi dio API-ja prebačen je u stabilnu kategoriju, uključujući stabilizirani Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::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_punctuation, is_ascii_graphic, is_ascii_whitespace i is_ascii_control za tipove char i u8.
  • Za FreeBSD se koristi alat iz FreeBSD 11.4 (FreeBSD 10 ne podržava LLVM 11).

Preuzeto iz opennet.ru

Izvor: linux.org.ru

Dodajte komentar