Publikimi i gjuhës programuese Rust 1.47

Është publikuar publikimi 1.47 i gjuhës programuese të sistemit Rust, i themeluar nga projekti Mozilla. Gjuha fokusohet në sigurinë e kujtesës, siguron menaxhimin automatik të kujtesës dhe siguron mjetet për të arritur paralelizëm të lartë të detyrave pa përdorur një grumbullues mbeturinash ose kohëzgjatjeje (koha e funksionimit reduktohet në inicializimin bazë dhe mirëmbajtjen e bibliotekës standarde).

Menaxhimi automatik i kujtesës i Rust eliminon gabimet gjatë manipulimit të treguesve dhe mbron nga problemet që lindin nga manipulimi i nivelit të ulët të memories, si qasja në një rajon memorie pasi të jetë liruar, çreferencat e treguesit null, tejkalimet e buferit, etj. Për të shpërndarë bibliotekat, për të siguruar montimin dhe për të menaxhuar varësitë, projekti po zhvillon menaxherin e paketave Cargo. Depoja e crates.io mbështetet për pritjen e bibliotekave.

Risitë kryesore:

  • Mbështetje e zbatuar për tipare për vargje me madhësi arbitrare. Më parë, për shkak të pamundësisë për të përcaktuar funksionet gjenerike për të gjitha vlerat e numrave të plotë, biblioteka standarde ofronte mbështetje të integruar të veçorive vetëm për vargje me madhësi deri në 32 elemente (tiparet për secilën madhësi ishin të përcaktuara në mënyrë statike). Falë krijimit të funksionalitetit const generics, u bë i mundur përcaktimi i funksioneve gjenerike për çdo madhësi grupi, por ato ende nuk janë përfshirë në veçoritë e qëndrueshme të gjuhës, megjithëse ato janë implementuar në përpilues dhe tani përdoren në bibliotekën standarde. për llojet e grupeve të çdo madhësie.
    Për shembull, konstrukti i mëposhtëm në Rust 1.47 do të printojë përmbajtjen e një grupi, megjithëse më parë do të kishte rezultuar në një gabim:

fn main() {
le të xs = [0; 34];
println!("{:?}", xs);
}

  • Ofrohet dalje e gjurmëve më të shkurtra (backtrace), dalje në situata emergjente. Elementet që nuk janë me interes në shumicën e situatave, por që rrëmojnë rezultatin dhe largojnë vëmendjen nga shkaqet kryesore të problemit, përjashtohen nga gjurma. Për të kthyer një gjurmë të plotë, mund të përdorni variablin e mjedisit "RUST_BACKTRACE=plot". Për shembull, për kodin

fn main() {
panik!();
}

Më parë, gjurma dilte në 23 faza, por tani ajo do të reduktohet në 3 faza, duke ju lejuar të kuptoni menjëherë thelbin:

thread 'main' në panik në 'panik eksplicit', src/main.rs:2:5
stack backtrace:
0: std:: panik::filloj_panik
në /rustc/d…d75a/library/std/src/panicking.rs:497
1: shesh lojrash::kryesore
në ./src/main.rs:2
2: thelbi::ops::funksion::FnOnce::call_once
në /rustc/d…d75a/library/core/src/ops/function.rs:227

  • Përpiluesi rustc është përditësuar për t'u ndërtuar duke përdorur LLVM 11 (Rust përdor LLVM si një backend për gjenerimin e kodit). Në të njëjtën kohë, aftësia për të ndërtuar me LLVM të vjetër, deri në versionin 8, ruhet, por si parazgjedhje (në rust-lang/llvm-project) tani përdoret LLVM 11. Lëshimi i LLVM 11 pritet në të ardhmen ditë.
  • Në platformën Windows, përpiluesi rustc ofron mbështetje për aktivizimin e kontrolleve të integritetit të rrjedhës së kontrollit (Control Flow Guard), aktivizuar duke përdorur flamurin "-C control-flow-guard". Në platformat e tjera ky flamur është injoruar për momentin.
  • Një pjesë e re e API-së është transferuar në kategorinë e qëndrueshme, duke përfshirë të stabilizuar Ident::new_raw, Range::is_empty, RangeInclusive::is_empty, Result::as_deref, Result::as_deref_mut, Vec::leak, pointer::offset_from , f32:: TAU dhe f64::TAU.
  • Atributi "const", i cili përcakton mundësinë e përdorimit të tij në çdo kontekst në vend të konstanteve, përdoret në metodat:
    • e re për të gjithë numrat e plotë përveç zeros;
    • checked_add, checked_sub, checked_mul, checked_neg, checked_shl, checked_shr, saturating_add, saturating_sub dhe saturating_mul për të gjithë numrat e plotë;
    • is_ascii_alphabetic, is_ascii_uppercase, is_ascii_vowercase, is_ascii_alfanumeric, is_ascii_digit, is_ascii_hexdigit, is_ascii_punctuation, is_ascii_graphic, is_ascii_whitespace and is_ control for types.
  • Për FreeBSD, përdoret paketa e veglave nga FreeBSD 11.4 (FreeBSD 10 nuk e mbështet LLVM 11).

Marre nga opennet.ru

Burimi: linux.org.ru

Shto një koment