Programski jezik Rust 1.36 izdanje

objavljeno izdanje sistemskog programskog jezika Rđa 1.36, 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:

  • Osobina je stabilizovana budućnost, što predstavlja vrijednost čija evaluacija možda još nije završena dok se koriste async / .await blokovi. Asinkrone vrijednosti definirane korištenjem Future omogućavaju nastavak izvršavanja korisnog rada u niti, dok se istovremeno čeka završetak izračunavanja određene vrijednosti;
  • Biblioteka stabilizovana alloc, koji pruža pametne pokazivače i kolekcije za upravljanje vrijednostima dodijeljenim memorijom. Dodjela memorije u std sada koristi tip Stvar, koji se ponovo izvoze iz alloc. Odvojena upotreba alloc ima smisla u aplikacijama koje nisu vezane za std (“#![no_std]”), kao iu bibliotekama dizajniranim za upotrebu u sličnim programima bez std;
  • Zaobići provjere za ispravnu inicijalizaciju vrijednosti predložio srednji tip MaybeUnit, koji se može koristiti umjesto funkcije mem::uninitialized kao sigurnija alternativa. Funkcija mem::uninitialized je zgodna za brzo kreiranje nizova, ali dovodi u zabludu kompajler jer se čini da je inicijalizirana, ali u stvarnosti vrijednost ostaje neinicijalizirana. MaybeUninit vam omogućava da eksplicitno naznačite kompajleru da je vrijednost neinicijalizirana, da uzmete u obzir moguće nedefinirano ponašanje povezano s tim, kao i da organizirate provjere u programima putem "maybe_t:" i inicijalizacije korak po korak, označavajući njen završetak koristeći poziv “.assume_init()”. Sa pojavom MaybeUninit-a, funkcija mem::uninitialized je zastarjela i ne preporučuje se za korištenje;
  • Tehnika NLL (Non-Lexical Lifetimes), koja je proširila sistem za snimanje životnog veka pozajmljenih varijabli, stabilizovana je za jezik Rust 2015 (u početku je NLL podržavao samo Rust 2018). Umjesto urezivanja životnih vijekova na leksičkom nivou, NLL to čini na nivou skupa pokazivača u grafu toka izvršavanja. Ovaj pristup vam omogućava da povećate kvalitetu provjere posuđivanja varijabli (borrow checker) i omogućite izvršavanje nekih tipova ispravnog koda, čija je upotreba ranije dovodila do greške. Novo ponašanje takođe čini otklanjanje grešaka mnogo lakšim;
  • Uključena nova implementacija asocijativnih nizova HashMap, na osnovu primjene strukture Swiss Table (automatski se učitava hashbrown::HashMap, osim ako je izričito drugačije navedeno, kao što je std::HashMap, koji je zasnovan na SipHash-u 1-3). Softversko sučelje ostaje isto, a razlike uočljive za programere svode se na povećane performanse i smanjenu potrošnju memorije;
  • U paket menadžeru teret dodano opcija “--offline”, koja omogućava rad bez pristupa mreži, u kojoj se prilikom instaliranja zavisnosti koriste samo paketi keširani u lokalnom sistemu. Ako ovisnost nije u lokalnoj keš memoriji, pojavit će se greška. Da biste unaprijed učitali ovisnosti u lokalnu keš memoriju prije odlaska van mreže, možete koristiti naredbu “cargo fetch”;
  • Implementirana je mogućnost pozivanja makroa "dbg!" navođenje nekoliko argumenata;
  • Za metode se koristi atribut “const”, koji određuje mogućnost korištenja u bilo kojem kontekstu umjesto konstanti
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::visi i
    NonNull::cast;

  • Novi dio API-ja je prebačen u stabilnu kategoriju, uključujući metode koje su stabilizirane
    task::Waker, task::Anketa,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::kopirano,
    BorrowMut (za stringove) i str::as_mut_ptr.

izvor: opennet.ru

Dodajte komentar