Versió del llenguatge de programació Rust 1.36

publicat llançament del llenguatge de programació del sistema Rovell 1.36, fundada pel projecte Mozilla. El llenguatge se centra en la seguretat de la memòria, proporciona una gestió automàtica de la memòria i proporciona un mitjà per aconseguir un paral·lelisme de tasques elevat sense utilitzar un col·lector d'escombraries o temps d'execució.

La gestió automàtica de la memòria de Rust estalvia al desenvolupador de manipular punters i protegeix dels problemes derivats de la manipulació de la memòria de baix nivell, com ara accedir a una àrea de memòria després d'haver-se alliberat, desreferenciar punters nuls, desbordaments de memòria intermèdia, etc. Per distribuir biblioteques, assegurar el muntatge i gestionar les dependències, el projecte desenvolupa un gestor de paquets Càrrega, que us permet obtenir les biblioteques que necessiteu per al programa amb un sol clic. S'admet un dipòsit per allotjar biblioteques caixes.io.

El principal innovacions:

  • Tret estabilitzat Futur, que representa un valor l'avaluació del qual encara no s'ha completat mentre s'utilitzen blocs asincrònics / .await. Els valors asíncrons definits amb Future permeten continuar executant treballs útils en el fil, alhora que s'espera que s'acabin els càlculs d'un determinat valor;
  • Biblioteca estabilitzada alloc, que proporciona punters i col·leccions intel·ligents per gestionar els valors assignats a la memòria. L'assignació de memòria a std ara utilitza el tipus Una cosa, que es reexporten des d'alloc. L'ús separat d'alloc té sentit en aplicacions no vinculades a std ("#![no_std]"), així com en biblioteques dissenyades per utilitzar-les en programes similars sense std;
  • Per evitar comprovacions per a la correcta inicialització dels valors proposat tipus intermedi Potser Unitat, que es pot utilitzar en lloc de la funció mem::uninitialized com a alternativa més segura. La funció mem::uninitialized és convenient per crear matrius ràpidament, però enganya el compilador perquè sembla que s'ha inicialitzat, però en realitat el valor continua sense inicialitzar. MaybeUninit us permet indicar explícitament al compilador que el valor no està inicialitzat, tenir en compte el possible comportament indefinit associat amb això, i també organitzar comprovacions en programes mitjançant "maybe_t:" i la inicialització pas a pas, marcant-ne la finalització. utilitzant la crida ".assume_init()". Amb l'arribada de MaybeUninit, la funció mem::uninitialized ha quedat obsoleta i no es recomana utilitzar-la;
  • La tècnica NLL (Non-Lexical Lifetimes), que va ampliar el sistema d'enregistrament de la vida útil de les variables prestades, s'ha estabilitzat per al llenguatge Rust 2015 (inicialment, NLL només era compatible amb Rust 2018). En lloc de comprometre les vides a nivell lèxic, NLL ho fa al nivell del conjunt de punters del gràfic de flux d'execució. Aquest enfocament permet augmentar la qualitat de la comprovació de l'endeutament de variables (verificador de préstec) i permetre l'execució d'alguns tipus de codi correcte, l'ús del qual prèviament va provocar un error. El nou comportament també fa que la depuració sigui molt més fàcil;
  • Nova implementació de matrius associatives inclosa HashMap, basat en l'aplicació de l'estructura Taula Suïssa (carregat automàticament hashbrown::HashMap, tret que s'indiqui el contrari explícitament, com ara std::HashMap, que es basa en SipHash 1-3). La interfície del programari segueix sent la mateixa, i les diferències notables per al desenvolupador es redueixen a un augment del rendiment i un consum de memòria reduït;
  • A la càrrega del gestor de paquets afegit l'opció "--offline", que permet operar sense accedir a la xarxa, en la qual només s'utilitzen paquets guardats a la memòria cau al sistema local quan s'instal·len dependències. Si la dependència no es troba a la memòria cau local, es generarà un error. Per carregar prèviament les dependències a la memòria cau local abans d'anar fora de línia, podeu utilitzar l'ordre "cargo fetch";
  • S'ha implementat la capacitat d'anomenar la macro "dbg!" indicant diversos arguments;
  • L'atribut "const", que determina la possibilitat d'utilitzar en qualsevol context en lloc de constants, s'utilitza per als mètodes
    Layout::from_size_align_unchecked,
    mem::necessita_drop,
    NonNull::peng i
    NonNull::cast;

  • S'ha transferit una nova part de les API a la categoria estable, inclosos els mètodes que s'han estabilitzat
    task::Waker, task::Poll,
    VecDeque::rotate_left, VecDeque::rotate_right,
    Read::read_vectored, Write::write_vectored,
    Iterador::copiat,
    BorrowMut (per a cadenes) i str::as_mut_ptr.

Font: opennet.ru

Afegeix comentari