Izdaja programskega jezika Rust 1.36

Objavljeno izdaja sistemskega programskega jezika Rja 1.36, 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:

  • Lastnost stabilizirana Prihodnost, ki predstavlja vrednost, katere vrednotenje morda še ni dokončano med uporabo blokov async / .await. Asinhrone vrednosti, definirane z uporabo Future, omogočajo nadaljevanje izvajanja koristnega dela v niti, hkrati pa čakajo na dokončanje izračunov določene vrednosti;
  • Knjižnica stabilizirana dodelitev, ki ponuja pametne kazalce in zbirke za upravljanje vrednosti, dodeljenih pomnilniku. Dodeljevanje pomnilnika v std zdaj uporablja tip Stvar, ki se ponovno izvozijo iz alok. Ločena uporaba alloc je smiselna v aplikacijah, ki niso vezane na std (»#![no_std]«), pa tudi v knjižnicah, zasnovanih za uporabo v podobnih programih brez std;
  • Če želite obiti preverjanja pravilne inicializacije vrednosti predlagano vmesni tip MordaEnota, ki se lahko uporablja namesto funkcije mem::uninitialized kot varnejša alternativa. Funkcija mem::uninitialized je priročna za hitro ustvarjanje nizov, vendar zavede prevajalnik, ker se zdi, da je inicializirana, v resnici pa vrednost ostane neinicializirana. MaybeUninit vam omogoča, da prevajalniku izrecno nakažete, da je vrednost neinicializirana, da upoštevate morebitno nedefinirano vedenje, povezano s tem, in tudi organizirate preverjanja v programih prek »maybe_t:« in inicializacije po korakih, ki označujejo njeno dokončanje z uporabo klica “.assume_init()”. S prihodom MaybeUninit je bila funkcija mem::uninitialized opuščena in ni priporočljiva za uporabo;
  • Tehnika NLL (Non-Lexical Lifetimes), ki je razširila sistem za beleženje življenjske dobe izposojenih spremenljivk, je bila stabilizirana za jezik Rust 2015 (na začetku je NLL podpiral le Rust 2018). Namesto da bi določil življenjske dobe na leksikalni ravni, NLL to naredi na ravni nabora kazalcev v grafu izvedbenega toka. Ta pristop vam omogoča, da povečate kakovost preverjanja izposoje spremenljivk (borrow checker) in omogočite izvajanje nekaterih vrst pravilne kode, katere uporaba je prej povzročila napako. Novo vedenje tudi olajša odpravljanje napak;
  • Vključena nova implementacija asociativnih nizov HashMap, ki temelji na uporabi strukture Švicarska miza (samodejno naložen hashbrown::HashMap, razen če je izrecno navedeno drugače, na primer std::HashMap, ki temelji na SipHash 1-3). Programski vmesnik ostaja enak, razlike, ki jih opazuje razvijalec, pa so povečane zmogljivosti in zmanjšana poraba pomnilnika;
  • V upravitelju paketov tovor dodano možnost “--offline”, ki omogoča delovanje brez dostopa do omrežja, pri čemer se pri namestitvi odvisnosti uporabljajo samo paketi, ki so predpomnjeni v lokalnem sistemu. Če odvisnosti ni v lokalnem predpomnilniku, bo vržena napaka. Če želite vnaprej naložiti odvisnosti v lokalni predpomnilnik, preden prekinete povezavo, lahko uporabite ukaz »cargo fetch«;
  • Implementirana možnost klicanja makra "dbg!" navedba več argumentov;
  • Za metode se uporablja atribut “const”, ki določa možnost uporabe v kateremkoli kontekstu namesto konstant
    Layout::from_size_align_unchecked,
    mem::needs_drop,
    NonNull::viseče in
    NonNull::cast;

  • Nov del API-jev je bil prenesen v kategorijo stabilnih, vključno z metodami, ki so bile stabilizirane
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterator::copied,
    BorrowMut (za nize) in str::as_mut_ptr.

Vir: opennet.ru

Dodaj komentar