Publikimi i gjuhës programuese Rust 1.47

botuar lëshimi 1.47 i gjuhës programuese të sistemit Ndryshk, e themeluar nga projekti Mozilla. Gjuha fokusohet në sigurinë e kujtesës, siguron menaxhimin automatik të kujtesës dhe ofron një mjet për të arritur paralelizëm të lartë të detyrave pa përdorur mbledhës plehrash и Runtime (koha e ekzekutimit zbret 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, të tilla si qasja në një rajon memorie pasi të jetë liruar, mosreferencat e treguesit null, tejkalimet e buferit, etj. Një menaxher paketash po zhvillohet për të shpërndarë bibliotekat, për të siguruar montimin dhe për të menaxhuar varësitë nga projekti. ngarkesë. Një depo mbështetet për të pritur bibliotekat arka.io.

Kryesore risitë:

  • Mbështetje e zbatuar për llojet vargjeve 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 të gjenerikës konstante ("const generics"), u bë i mundur përcaktimi i funksioneve gjenerike për çdo madhësi grupi, por ato nuk janë përfshirë ende në veçoritë e qëndrueshme të gjuhës, megjithëse ato janë implementuar në përpilues dhe tani të përfshirë në bibliotekën standarde për tipare të 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 do të reduktohet në
    3 hapa që ju lejojnë 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 (Ndryshk përdor LLVM si një backend për gjenerimi i kodit). Në të njëjtën kohë, aftësia për të ndërtuar me LLVM më të vjetra, deri në versionin 8, ruhet, por si parazgjedhje (në Rust-lang/llvm-project) tani po përdor LLVM 11. LLVM 11 pritet të dalë në ditët në vijim.
  • 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-ve është transferuar në kategorinë e qëndrueshme, duke përfshirë të stabilizuar
    Identiteti::new_raw,
    Gama::is_empty,
    RangeInclusive::is_empty,
    Rezultati::as_deref,
    Rezultati::as_deref_mut,
    Vec::rrjedhje,
    treguesi::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 të përfshirë paketa e veglave nga FreeBSD 11.4 (FreeBSD 10 nuk e mbështet LLVM 11).

Burimi: opennet.ru

Shto një koment