Publikimi i gjuhës programuese Rust 1.38

botuar lëshimi i gjuhës programuese të sistemit Ndryshku 1.38, 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 një grumbullues mbeturinash ose kohëzgjatjeje.

Menaxhimi automatik i kujtesës i Rust e çliron zhvilluesin nga manipulimi i treguesit dhe mbron nga problemet që lindin nga manipulimi i nivelit të ulët të kujtesës, të tilla si akseset e memories pa pagesë, çreferencat e treguesit null, tejkalimet e buferit dhe të ngjashme. 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ë, duke ju lejuar të merrni bibliotekat e nevojshme për programin me një klik. Një depo mbështetet për të pritur bibliotekat arka.io.

Kryesore risitë:

  • U shtua një modalitet përpilimi me tubacion (pipelin), në të cilin ndërtimi i një pakete arkë të varur fillon sapo të disponohen meta të dhënat e varësisë, pa pritur që të përfundojë kompilimi i saj. Gjatë përpilimit të një pakete, varësitë nuk kanë nevojë të grumbullohen plotësisht, vetëm duke përcaktuar metadatat, të cilat përfshijnë lista të llojeve, varësive dhe elementeve të eksportuara. Metadata vihen në dispozicion në fillim të procesit të përpilimit, kështu që paketat e lidhura tani mund të përpilohen shumë më herët. Kur ndërtoni paketa të vetme, mënyra e propozuar nuk ndikon në performancën, por nëse ndërtimi mbulon paketat me varësi të degëzuara, koha e përgjithshme e ndërtimit mund të reduktohet me 10-20%;
  • Siguron zbulimin e përdorimit të gabuar të funksioneve std::mem::uninicializuar и std::mem::zeroed. Për shembull, std::mem::uninicialized është i përshtatshëm për krijimin e shpejtë të vargjeve, por ai mashtron kompajlerin sepse duket se është inicializuar, por në realitet vlera mbetet e painitializuar. Funksioni mem::uninicialized është shënuar tashmë si i vjetëruar dhe rekomandohet të përdoret një lloj i ndërmjetëm në vend të tij Ndoshta Njësia. Për sa i përket mem::zeroed, ky funksion mund të shkaktojë probleme me tipat që nuk mund të pranojnë vlera zero.

    Për të ndihmuar në identifikimin e sjelljeve të papërcaktuara, versioni i ri shton një kontroll të përpiluesit që zbulon disa probleme me mem::uninicialized ose mem::zeroed. Për shembull, tani ju merrni një gabim kur përpiqeni të përdorni mem::uninicialized ose mem::zeroed me llojet &T dhe Box‹T›, të cilat përfaqësojnë objekte treguese që nuk mund të pranojnë vlera null;

  • Atributi "#[i vjetëruar]" është zgjeruar për të lejuar që paketat e arkës të shënohen si të vjetruara dhe të planifikohen për fshirje në të ardhmen. Që nga Rust 1.38, ky atribut mund të përdoret gjithashtu për makro;
  • U shtua aftësia për të përdorur atributin “#[global_allocator]” në nënmodule;
  • Funksioni i shtuar std:: any:: type_name, i cili ju lejon të gjeni emrin e llojit, i cili mund të jetë i dobishëm për qëllime korrigjimi. Për shembull, gjatë ekzekutimit të programit mund të zbuloni se për çfarë lloji u quajt funksioni:

    fn gen_value‹T: Default>() -› T {
    println!("Inicializimi i një shembulli të {}", std::any::type_name::‹T›());
    Default::default()
    }

    fn main() {
    le të _: i32 = gen_vlera(); # "i32" do të printohet
    le të _: String = gen_value(); # do të printojë "alloc::string::String"
    }

  • Funksionet e zgjeruara të bibliotekës standarde:
    • slice::{concat, connect, join} tani mund të marrë vlerën &[T] përveç &T;
    • "*const T" dhe "*mut T" tani zbatojnë marker::Unpin;
    • "Arc‹[T]›" dhe "Rc‹[T]›" tani zbatojnë FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} tani zbato DoubleEndedIterator.
    • ascii::EscapeDefault zbaton Clone dhe Display.
  • Një pjesë e re e API-ve është transferuar në kategorinë e qëndrueshme, duke përfshirë metodat që janë stabilizuar
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Kohëzgjatja::as_secs_f{32|64},
    • Kohëzgjatja::div_duration_f{32|64},
    • Kohëzgjatja::div_f{32|64},
    • Kohëzgjatja::from_secs_f{32|64},
    • Kohëzgjatja::mul_f{32|64},
    • operacionet e ndarjes me mbetje
      div_euclid dhe rem_euclid për të gjithë primitivët e numrave të plotë;

  • Mbështetje e shtuar për specifikimin e opsionit "--features" disa herë për të aktivizuar veçori të ndryshme në menaxherin e paketave të ngarkesave;
  • Përpiluesi ofron një të tretën nivel mbështetje për platformat e synuara aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc-unknown, armlinux7 -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl dhe riscv32i-unknown-none-elf. Niveli i tretë përfshin mbështetjen bazë, por pa testime dhe publikime të automatizuara të ndërtimeve zyrtare.

Burimi: opennet.ru

Shto një koment