Programski jezik Rust 1.47 izdanje

Objavljeno je izdanje 1.47 sistemskog programskog jezika Rust, čiji je osnivač Mozilla projekat. Jezik se fokusira na sigurnost memorije, obezbjeđuje automatsko upravljanje memorijom i obezbjeđuje sredstva za postizanje visokog paralelizma zadataka bez korištenja sakupljača smeća ili vremena izvođenja (vrijeme izvođenja je svedeno 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 niskog nivoa, kao što je pristupanje memorijskoj regiji nakon što je ona oslobođena, dereferenciranje nulte pokazivača, prekoračenje bafera itd. Za distribuciju biblioteka, osiguranje sklapanja i upravljanje ovisnostima, projekt razvija Cargo paket menadžer. Crates.io spremište je podržano za hostovanje biblioteka.

Glavne inovacije:

  • Implementirana podrška za osobine za nizove proizvoljne 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 generičke funkcionalnosti const, postalo je moguće definirati generičke funkcije za bilo koju veličinu niza, ali one još nisu uključene u stabilne karakteristike jezika, iako su implementirane u kompajler i sada se koriste u standardnoj biblioteci za tipove nizova 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 sada će biti svedeno na 3 faze, što vam omogućava 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 se gradi koristeći LLVM 11 (Rust koristi LLVM kao pozadinu za generisanje koda). U isto vrijeme, zadržana je mogućnost izgradnje sa starim LLVM-om, do verzije 8, ali se po defaultu (u rust-lang/llvm-project) sada koristi LLVM 11. Izdanje LLVM 11 se očekuje u narednom dana.
  • Na Windows platformi, rustc kompajler pruža podršku za omogućavanje provera integriteta kontrolnog toka (Control Flow Guard), koji se aktivira pomoću zastavice “-C control-flow-guard”. Na drugim platformama ova zastava se za sada ignorira.
  • Novi dio API-ja je prebačen 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_interpunkcija, is_ascii_graphic, is_ascii_whitespace i is_ascii za tipove uznačaja i is_l8.
  • Za FreeBSD se koristi komplet alata iz FreeBSD 11.4 (FreeBSD 10 ne podržava LLVM 11).

Uzeto od opennet.ru

izvor: linux.org.ru

Dodajte komentar