Izdaja programskega jezika Rust 1.47

Objavljeno izdaja 1.47 sistemskega programskega jezika Rust, ki ga je ustanovil projekt Mozilla. Jezik se osredotoča na varnost pomnilnika, zagotavlja samodejno upravljanje pomnilnika in zagotavlja sredstva za doseganje visoke vzporednosti opravil brez uporabe zbiralec smeti и runtime (čas izvajanja se skrči na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Samodejno upravljanje pomnilnika Rust odpravlja napake pri manipulaciji s kazalci in ščiti pred težavami, ki izhajajo iz manipulacije s pomnilnikom na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnega kazalca, prekoračitev medpomnilnika itd. Upravljalnik paketov se razvija za distribucijo knjižnic, zagotavljanje sestavljanja in upravljanje odvisnosti s projektom. Cargo. Repozitorij je podprt za gostovanje knjižnic zaboji.io.

Glavni inovacije:

  • Implementirana podpora za vrste nizi poljubne velikosti. Prej je zaradi nezmožnosti definiranja generičnih funkcij za vse celoštevilske vrednosti standardna knjižnica zagotavljala vgrajeno podporo za lastnosti samo za nize velikosti do 32 elementov (lasti za vsako velikost so bile statično definirane). Zahvaljujoč ustvarjanju funkcionalnosti stalnih generičnih ("const generičnih") je postalo mogoče definirati generične funkcije za poljubno velikost polja, vendar še niso vključene v stabilne jezikovne funkcije, čeprav so implementirane v prevajalniku in so zdaj vključeni v standardni knjižnici za lastnosti polja katere koli velikosti.

    Na primer, naslednja konstrukcija v Rust 1.47 bo natisnila vsebino matrike, čeprav bi prej povzročila napako:

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

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

  • Zagotovljen izpis krajših sledi (backtrace), izpis v izrednih situacijah. Elementi, ki v večini situacij niso zanimivi, vendar motijo ​​izpis in odvračajo pozornost od primarnih vzrokov težave, so izključeni iz sledenja. Če želite vrniti celotno sled, lahko uporabite spremenljivko okolja "RUST_BACKTRACE=full". Na primer za kodo

    fn main() {
    panika!();
    }

    Prej je bila sled izhodna v 23 stopnjah, zdaj pa bo zmanjšana na
    3 koraki, ki vam omogočajo, da takoj dojamete bistvo:

    nit 'main' panično ob 'explicit panic', src/main.rs:2:5
    povratna sled sklada:
    0: std::panicing::begin_panic
    na /rustc/d…d75a/library/std/src/panicking.rs:497
    1: igrišče :: glavno
    na ./src/main.rs:2
    2: core::ops::function::FnOnce::call_once
    na /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Prevajalnik rustc je bil posodobljen za gradnjo z uporabo LLVM 11 (Rja uporablja LLVM kot zaledje za ustvarjanje kode). Hkrati je ohranjena možnost gradnje s starejšimi LLVM, do različice 8, vendar privzeto (v rust-lang/llvm-projekt) zdaj uporablja LLVM 11. LLVM 11 naj bi izšel v prihodnjih dneh.
  • Na platformi Windows prevajalnik rustc nudi podporo za omogočanje preverjanja celovitosti nadzornega toka (Control Flow Guard), ki se aktivira z uporabo zastavice »-C control-flow-guard«. Na drugih platformah je ta zastavica trenutno prezrta.
  • Nov del API-jev je bil prenesen v kategorijo stabilnih, vključno s stabiliziranimi
    Ident::new_raw,
    Obseg::je_prazen,
    RangeInclusive::is_prazen,
    Rezultat::as_deref,
    Rezultat::as_deref_mut,
    Vec::puščanje,
    kazalec::offset_from,
    f32::TAU in
    f64::TAU.

  • Atribut »const«, ki določa možnost uporabe v kateremkoli kontekstu namesto konstant, se uporablja v metodah:
    • novo za vsa cela števila razen nič;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub in saturating_mul za vsa cela števila;
    • 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 in is_ascii_control za vrste char in u8.
  • Za FreeBSD vključeni komplet orodij iz FreeBSD 11.4 (FreeBSD 10 ne podpira LLVM 11).

Vir: opennet.ru

Dodaj komentar