Izdanje Rust programskog jezika 1.36

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

  • Svojstvo stabilizirano Budućnost, što predstavlja vrijednost čija evaluacija možda još nije dovršena tijekom korištenja async / .await blokova. Asinkrone vrijednosti definirane pomoću Futurea omogućuju nastavak izvršavanja korisnog rada u niti, dok se istovremeno čeka završetak izračuna određene vrijednosti;
  • Knjižnica stabilizirana dodijeliti, koji pruža pametne pokazivače i zbirke za upravljanje vrijednostima dodijeljenim memoriji. Dodjela memorije u std-u sada koristi vrstu Stvar, koji se ponovno izvoze iz alok. Odvojena upotreba alloc-a ima smisla u aplikacijama koje nisu vezane za std (“#![no_std]”), kao i u bibliotekama dizajniranim za korištenje u sličnim programima bez std-a;
  • Zaobići provjere za ispravnu inicijalizaciju vrijednosti zaprosio srednji tip Možda Jedinica, koji se može koristiti umjesto funkcije mem::uninitialized kao sigurnija alternativa. Funkcija mem::uninitialized je prikladna za brzo kreiranje nizova, ali zavarava kompajler jer se čini da je inicijalizirana, ali u stvarnosti vrijednost ostaje neinicijalizirana. MaybeUninit vam omogućuje da kompajleru eksplicitno naznačite 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 pomoću poziva “.assume_init()”. S pojavom MaybeUninit, funkcija mem::uninitialized je zastarjela i ne preporučuje se za korištenje;
  • NLL (Non-Lexical Lifetimes) tehnika, koja je proširila sustav za bilježenje životnog vijeka posuđenih varijabli, stabilizirana je za jezik Rust 2015 (u početku je NLL podržavao samo Rust 2018). Umjesto predaje trajanja na leksičkoj razini, NLL to čini na razini skupa pokazivača u grafu toka izvršenja. Ovaj pristup vam omogućuje da povećate kvalitetu provjere posuđivanja varijabli (borrow checker) i omogućite izvršenje nekih vrsta ispravnog koda, čija je upotreba prethodno dovela do pogreške. Novo ponašanje također olakšava otklanjanje pogrešaka;
  • Uključena je nova implementacija asocijativnih nizova HashMap, na temelju primjene strukture Švicarski stol (automatski se učitava hashbrown::HashMap, osim ako nije izričito navedeno drugačije, kao što je std::HashMap, koji se temelji na SipHash 1-3). Softversko sučelje ostaje isto, a programerima uočljive razlike svode se na povećanje performansi i smanjenu potrošnju memorije;
  • U upravitelju paketa teret dodao opcija “--offline” koja omogućuje rad bez pristupa mreži, pri čemu se prilikom instalacije ovisnosti koriste samo paketi koji su predmemorirani u lokalnom sustavu. Ako ovisnost nije u lokalnoj predmemoriji, pojavit će se pogreška. Za prethodno učitavanje ovisnosti u lokalnu predmemoriju prije odlaska izvan mreže, možete koristiti naredbu “cargo fetch”;
  • Implementirana je mogućnost pozivanja makronaredbe "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::viseći i
    NonNull::cast;

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

Izvor: opennet.ru

Dodajte komentar