Izdaja programskega jezika Rust 1.38

Objavljeno izdaja sistemskega programskega jezika Rja 1.38, ki ga je ustanovil projekt Mozilla. Jezik se osredotoča na varnost pomnilnika, zagotavlja samodejno upravljanje pomnilnika in zagotavlja sredstva za doseganje visoke vzporednosti opravil brez uporabe zbiralnika smeti ali izvajalnega okolja.

Rustovo samodejno upravljanje pomnilnika reši razvijalca pred manipulacijo kazalcev in ščiti pred težavami, ki izhajajo iz manipulacije pomnilnika na nizki ravni, kot je dostop do območja pomnilnika, potem ko je bilo osvobojeno, dereferenciranje ničelnih kazalcev, prekoračitev medpomnilnika itd. Za distribucijo knjižnic, zagotavljanje sestavljanja in upravljanje odvisnosti projekt razvija upravitelja paketov Cargo, ki vam omogoča, da z enim klikom pridobite knjižnice, ki jih potrebujete za program. Repozitorij je podprt za gostovanje knjižnic zaboji.io.

Glavni inovacije:

  • Dodan je cevovodni način prevajanja (cevovodno), v katerem se gradnja odvisnega paketa zaboja začne takoj, ko so metapodatki o odvisnosti na voljo, ne da bi čakali, da se prevajanje konča. Pri prevajanju paketa odvisnosti ni treba v celoti sestaviti, dovolj je definirati metapodatke, ki vključujejo sezname tipov, odvisnosti in izvožene elemente. Metapodatki so na voljo zgodaj v procesu prevajanja, tako da je mogoče povezane pakete zdaj prevesti veliko prej. Pri izdelavi posameznih paketov predlagani način ne vpliva na zmogljivost, če pa izgradnja zajema pakete z razvejanimi odvisnostmi, se lahko skupni čas izdelave skrajša za 10–20 %;
  • Zagotavlja odkrivanje nepravilne uporabe funkcij std::mem::neinicializirano и std::mem::nastavljeno na ničlo. Na primer, std::mem::uninitialized je primeren za hitro ustvarjanje nizov, vendar zavede prevajalnik, ker se zdi, da je inicializiran, v resnici pa vrednost ostane neinicializirana. Funkcija mem::uninitialized je že označena kot zastarela in priporočamo, da namesto nje uporabite vmesni tip MordaEnota. Kar zadeva mem::zeroed, lahko ta funkcija povzroči težave s tipi, ki ne morejo sprejeti ničelnih vrednosti.

    Za pomoč pri prepoznavanju nedefiniranega vedenja nova izdaja prevajalniku doda preverjanje lint, ki zazna nekatere težave z mem::uninitialized ali mem::zeroed. Na primer, zdaj dobite napako, ko poskušate uporabiti mem::uninitialized ali mem::zeroed s tipoma &T in Box‹T›, ki predstavljata objekte kazalca, ki ne morejo sprejeti ničelnih vrednosti;

  • Atribut »#[deprecated]« je bil razširjen, da omogoča, da so paketi zabojev označeni kot zastareli in načrtovani za prihodnje brisanje. Od Rust 1.38 se ta atribut lahko uporablja tudi za makre;
  • Dodana možnost uporabe atributa »#[global_allocator]« v podmodulih;
  • Dodana funkcija std::any::type_name, ki vam omogoča, da ugotovite ime vrste, kar je lahko koristno za namene odpravljanja napak. Na primer, med izvajanjem programa lahko ugotovite, za katero vrsto je bila funkcija poklicana:

    fn gen_value‹T: Privzeto>() -› T {
    println!("Inicializacija primerka {}", std::any::type_name::‹T›());
    Privzeto::default()
    }

    fn main() {
    naj _: i32 = gen_value(); # "i32" bo natisnjen
    naj _: niz = gen_value(); # bo izpisal "alloc::string::String"
    }

  • Razširjene funkcije standardne knjižnice:
    • slice::{concat, connect, join} lahko zdaj poleg &T prevzame vrednost &[T];
    • "*const T" in "*mut T" zdaj implementirata marker::Unpin;
    • »Arc‹[T]›« in »Rc‹[T]›« zdaj izvajata FromIterator‹T›;
    • iter::{StepBy, Peekable, Take} zdaj izvaja DoubleEndedIterator.
    • ascii::EscapeDefault izvaja Clone in Display.
  • Nov del API-jev je bil prenesen v kategorijo stabilnih, vključno z metodami, ki so bile 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 deljenja z ostankom
      div_euclid in rem_euclid za vse celoštevilske primitive;

  • Dodana podpora za večkratno določanje možnosti »--features« za omogočanje različnih funkcij v upravitelju tovornih paketov;
  • Prevajalnik nudi še tretjega Stopnja podpora 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 in riscv32i-unknown-none-elf. Tretja raven vključuje osnovno podporo, vendar brez avtomatiziranega testiranja in objave uradnih gradenj.

Vir: opennet.ru

Dodaj komentar