Programski jezik Rust 1.38 izdanje

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

Rust-ovo automatsko upravljanje memorijom oslobađa programera od manipulacije pokazivačem i štiti od problema koji proizlaze iz manipulacije memorijom na niskom nivou, kao što su pristupi memoriji nakon slobodne upotrebe, dereferenciranje nulte pokazivača, prekoračenje bafera i slično. Razvija se menadžer paketa za distribuciju biblioteka, osiguravanje sklapanja i upravljanje ovisnostima od strane projekta. teret, što vam omogućava da jednim klikom dobijete biblioteke potrebne za program. Podržano je spremište za hostiranje biblioteka crates.io.

Glavni inovacije:

  • Dodan je način kompilacije (pipelined), u kojem izgradnja zavisnog paketa sanduka počinje čim metapodaci zavisnosti postanu dostupni, bez čekanja da se završi kompilacija. Prilikom kompajliranja paketa, ovisnosti ne moraju biti potpuno sastavljene, već samo definiranje metapodataka, koji uključuju liste tipova, zavisnosti i izvezenih elemenata. Metapodaci su dostupni rano u procesu kompilacije, tako da se povezani paketi sada mogu kompajlirati mnogo ranije. Prilikom izrade pojedinačnih paketa, predloženi način rada ne utiče na performanse, ali ako build pokriva pakete sa razgranatim zavisnostima, ukupno vreme izgradnje može se smanjiti za 10-20%;
  • Osigurava otkrivanje nepravilne upotrebe funkcija std::mem::uninitialized и std::mem::nula. Na primjer, std::mem::uninitialized je zgodan za brzo kreiranje nizova, ali dovodi u zabludu kompajler jer se čini da je inicijaliziran, ali u stvarnosti vrijednost ostaje neinicijalizirana. Funkcija mem::uninitialized je već označena kao zastarjela i preporučuje se umjesto toga koristiti srednji tip MaybeUnit. Što se tiče mem::zeroed, ova funkcija može uzrokovati probleme s tipovima koji ne mogu prihvatiti nulte vrijednosti.

    Da bi se pomoglo u identifikaciji nedefiniranog ponašanja, novo izdanje dodaje provjeru lint-a kompajleru koja otkriva neke probleme sa mem::uninitialized ili mem::zeroed. Na primjer, sada dobijate grešku kada pokušavate da koristite mem::uninitialized ili mem::zeroed sa tipovima &T i Box‹T›, koji predstavljaju objekte pokazivača koji ne mogu prihvatiti null vrijednosti;

  • Atribut “#[deprecated]” je proširen kako bi se omogućilo da paketi sanduka budu označeni kao zastarjeli i zakazani za buduće brisanje. Od Rusta 1.38, ovaj atribut se može koristiti i za makroe;
  • Dodata mogućnost korištenja atributa “#[global_allocator]” u podmodulima;
  • Dodata funkcija std::bilo::ime_tipa, koji vam omogućava da saznate naziv tipa, što može biti korisno u svrhu otklanjanja grešaka. Na primjer, tokom izvršavanja programa možete saznati za koji tip je funkcija pozvana:

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

    fn main() {
    neka _: i32 = gen_value(); # "i32" će biti odštampan
    neka _: String = gen_value(); # će ispisati "alloc::string::String"
    }

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

  • Upravitelj teretnih paketa sada podržava navođenje opcije “--features” više puta kako bi se omogućile različite funkcije;
  • Kompajler obezbeđuje treći grade 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-unknown targets, armv7 -gnueabi, armv7-unknown-linux-musleabi, hexagon-unknown-linux-musl i riscv32i-unknown-none-elf. Treći nivo uključuje osnovnu podršku, ali bez automatizovanog testiranja i objavljivanja zvaničnih verzija.

izvor: opennet.ru

Dodajte komentar