Izdanje Rust programskog jezika 1.38

Objavljeno izdanje sistemskog programskog jezika Rđa 1.38, osnovan projektom Mozilla. Jezik se fokusira na sigurnost memorije, omogućuje automatsko upravljanje memorijom i pruža sredstva za postizanje visokog paralelizma zadataka bez korištenja skupljača smeća ili vremena izvođenja.

Rustovo automatsko upravljanje memorijom oslobađa programera od manipulacije pokazivačima i štiti od problema koji proizlaze iz manipulacije memorijom niske razine, kao što su pristupi memoriji nakon oslobađanja, dereferencije nultog pokazivača, prekoračenja međuspremnika i slično. Upravitelj paketa se razvija za distribuciju biblioteka, osiguranje sklapanja i upravljanje ovisnostima projekta. Naboj, što vam omogućuje da jednim klikom dobijete biblioteke potrebne za program. Repozitorij je podržan za host knjižnica sanduci.io.

Glavni inovacije:

  • Dodan je cjevovodni način kompilacije (cjevovodno), u kojem izgradnja ovisnog paketa sanduka počinje čim metapodaci ovisnosti postanu dostupni, bez čekanja da završi kompilacija. Prilikom sastavljanja paketa, ovisnosti ne moraju biti u potpunosti sastavljene, samo se definiraju metapodaci, koji uključuju popise tipova, ovisnosti i izvezene elemente. Metapodaci su dostupni rano u procesu kompilacije, tako da se povezani paketi sada mogu kompilirati mnogo ranije. Prilikom izgradnje pojedinačnih paketa, predloženi način ne utječe na izvedbu, ali ako izgradnja pokriva pakete s razgranatim ovisnostima, ukupno vrijeme izgradnje može se smanjiti za 10-20%;
  • Osigurava otkrivanje neispravne uporabe funkcija std::mem::neinicijalizirano и std::mem::nulirano. Na primjer, std::mem::uninitialized je prikladan za brzo kreiranje nizova, ali zavarava kompajler jer se čini da je inicijaliziran, ali u stvarnosti vrijednost ostaje neinicijalizirana. Funkcija mem::uninitialized već je označena kao zastarjela te se umjesto nje preporučuje korištenje srednjeg tipa Možda Jedinica. Što se tiče mem::zeroed, ova funkcija može uzrokovati probleme s tipovima koji ne mogu prihvatiti nulte vrijednosti.

    Kako bi se lakše identificiralo nedefinirano ponašanje, novo izdanje dodaje provjeru dlačica u kompajler koji otkriva neke probleme s mem::uninitialized ili mem::zeroed. Na primjer, sada dobivate pogrešku kada pokušavate koristiti mem::uninitialized ili mem::zeroed s tipovima &T i Box‹T›, koji predstavljaju objekte pokazivača koji ne mogu prihvatiti nulte vrijednosti;

  • Atribut "#[deprecated]" je proširen kako bi omogućio označavanje paketa sanduka kao zastarjele i planirano za buduće brisanje. Od Rust 1.38, ovaj se atribut također može koristiti za makronaredbe;
  • Dodana je mogućnost korištenja atributa “#[global_allocator]” u podmodulima;
  • Dodana značajka std::any::type_name, koji vam omogućuje da saznate naziv tipa, što može biti korisno u svrhu otklanjanja pogrešaka. Na primjer, tijekom izvođenja programa možete saznati za koji je tip funkcija pozvana:

    fn gen_value‹T: Default>() -› T {
    println!("Inicijaliziranje instance {}", std::any::type_name::‹T›());
    Zadano::zadano()
    }

    fn main() {
    neka _: i32 = gen_value(); Ispisat će se # "i32".
    neka _: String = gen_value(); # će ispisati "alloc::string::String"
    }

  • Proširene funkcije standardne knjižnice:
    • slice::{concat, connect, join} sada može uzeti vrijednost &[T] uz &T;
    • "*const T" i "*mut T" sada implementiraju marker::Unpin;
    • "Arc‹[T]›" i "Rc‹[T]›" sada implementiraju FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} sada implementira DoubleEndedIterator.
    • ascii::EscapeDefault implementira Clone i Display.
  • Novi dio API-ja prebačen je u stabilnu kategoriju, uključujući metode koje su stabilizirane
    • ‹*const T›::cast, ‹*mut T›::cast,
    • Trajanje::as_secs_f{32|64},
    • Trajanje::div_duration_f{32|64},
    • Trajanje::div_f{32|64},
    • Trajanje::from_secs_f{32|64},
    • Trajanje::mul_f{32|64},
    • operacije dijeljenja s ostatkom
      div_euclid i rem_euclid za sve cjelobrojne primitive;

  • Dodana podrška za navođenje opcije “--features” više puta kako bi se omogućile različite značajke u upravitelju paketa tereta;
  • Prevoditelj daje trećinu nivo podrška za ciljne platforme aarch64-uwp-windows-msvc, i686-uwp-windows-gnu, i686-uwp-windows-msvc, x86_64-uwp-windows-gnu, x86_64-uwp-windows-msvc targets, armv7-unknown-linux -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl i riscv32i-unknown-none-elf. Treća razina uključuje osnovnu podršku, ali bez automatiziranog testiranja i objave službenih verzija.

Izvor: opennet.ru

Dodajte komentar