Izdaja programskega jezika Rust 1.47

Objavljena je bila izdaja 1.47 sistemskega programskega jezika Rust, ki ga je utemeljil projekt Mozilla. Jezik se osredotoča na varnost pomnilnika, zagotavlja samodejno upravljanje pomnilnika in zagotavlja sredstva za doseganje visoke vzporednosti opravil brez uporabe zbiralnika smeti ali izvajalnega okolja (izvajalni čas je zmanjšan na osnovno inicializacijo in vzdrževanje standardne knjižnice).

Rustovo samodejno upravljanje pomnilnika 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. Za distribucijo knjižnic, zagotavljanje sestavljanja in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo. Repozitorij crates.io je podprt za gostovanje knjižnic.

Glavne novosti:

  • Implementirana podpora za lastnosti za polja 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 generične funkcionalnosti const je postalo mogoče definirati generične funkcije za katero koli velikost polja, vendar še niso vključene v stabilne funkcije jezika, čeprav so implementirane v prevajalniku in se zdaj uporabljajo v standardni knjižnici za vrste nizov 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 izpisana v 23 stopnjah, zdaj pa bo zmanjšana na 3 stopnje, kar vam bo omogočilo, 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 (Rust uporablja LLVM kot zaledje za ustvarjanje kode). Hkrati je ohranjena možnost gradnje s starim LLVM, do različice 8, vendar je privzeto (v rust-lang/llvm-project) zdaj uporabljen LLVM 11. Izid LLVM 11 pričakujemo v prihodnjem dnevi.
  • Na platformi Windows prevajalnik rustc zagotavlja 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-ja je bil prenesen v stabilno kategorijo, vključno s stabiliziranim Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::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 se uporablja komplet orodij iz FreeBSD 11.4 (FreeBSD 10 ne podpira LLVM 11).

Odvzet od opennet.ru

Vir: linux.org.ru

Dodaj komentar