Versió del llenguatge de programació Rust 1.34

tingué lloc llançament del llenguatge de programació del sistema Rovell 1.34desenvolupat pel projecte Mozilla. El llenguatge se centra en la gestió segura de la memòria, proporciona una gestió automàtica de la memòria i proporciona els mitjans per aconseguir un paral·lelisme elevat de treballs evitant l'ús d'un col·lector d'escombraries i 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:

  • S'han afegit eines al gestor de paquets Cargo per treballar amb registres de paquets alternatius que poden coexistir amb el registre públic crates.io. Per exemple, els desenvolupadors d'aplicacions privades ara poden utilitzar el seu propi registre privat que es pot utilitzar quan enumeren dependències a Cargo.toml i utilitzar un model de versions semblant a crates.io per als seus productes, a més de fer referència tant a crates.io com a crates.io. en dependències al vostre propi registre.

    Per afegir registres externs a .cargo/config (situat a $HOME o al directori de paquets)
    proporcionat Secció “[registres]”, i per utilitzar un registre extern, l'opció “registre” apareixia a la descripció de cada dependència a Cargo.toml. Per connectar-se a un registre addicional, només cal col·locar el testimoni d'autenticació al fitxer ~/.cargo/credentials i executar l'ordre
    "inici de sessió de càrrega --registry=my-registry" i per publicar el paquet -
    "publicació de càrrega --registry=el meu-registre";

  • S'ha afegit suport complet per utilitzar el "?" en proves doctests, que us permet utilitzar el codi d'exemples de la documentació com a proves. Anteriorment operador
    "?" es podria utilitzar per gestionar errors durant l'execució de la prova només si hi havia una funció "fn main()" o a les funcions "#[test]";

  • En atributs personalitzats definits amb macros procedimentals assegurat la capacitat d'utilitzar conjunts arbitraris de fitxes ("#[attr($tokens)]", "#[attr[$tokens]] i #[attr{$tokens}]"). Anteriorment, els elements només es podien especificar en forma d'arbre/recursiva utilitzant literals de cadena, com ara "#[foo(bar, baz(quux, foo = "bar"))]", però ara és possible utilitzar enumeracions ('# [interval(0. .10)]') i construccions com "#[bound(T: MyTrait)]";
  • Trets estabilitzats (tret) Prova de и provar, que us permeten realitzar conversions de tipus amb gestió d'errors. Per exemple, mètodes com from_be_bytes amb tipus enters utilitzen matrius com a entrada, però sovint les dades són del tipus Slice, i la conversió entre matrius i slices és problemàtic de fer manualment. Amb els nous trets, aquesta operació es pot realitzar sobre la marxa cridant a .try_into(), per exemple, "let num = u32::from_be_bytes(slice.try_into()?)". S'ha afegit un tipus d'error per a les conversions que sempre tenen èxit (p. ex., del tipus u8 a u32) Infal·lible, que us permet utilitzar de manera transparent
    TryFrom per a totes les implementacions "De" existents;

  • Funció obsoleta CommandExt::before_exec, que permetia executar un controlador abans de l'execució executada en el context del procés fill bifurcat després de la trucada fork(). En aquestes condicions, alguns recursos del procés pare, com ara descriptors de fitxers i àrees de memòria mapejades, es podrien duplicar, cosa que podria provocar un comportament indefinit i un treball incorrecte de les biblioteques.
    Es recomana utilitzar la funció unsafe en lloc de before_exec CommandExt::pre_exec.

  • Els tipus d'enters atòmics signats i sense signe de 8 a 64 bits estan estabilitzats (per exemple, Atòmic U8), així com els tipus signats No zeroI[8|16|32|64|128].
  • S'ha mogut una nova part de l'API a la categoria d'estable, inclosos els mètodes Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add |sub] i SystemTime estan estabilitzats ::checked_[add|sub]. S'han estabilitzat les funcions iter::from_fn i iter::successors;
  • Per a tots els tipus d'enters, s'implementen els mètodes checked_pow, saturating_pow, wrapping_pow i overflowing_pow;
  • S'ha afegit la possibilitat d'habilitar optimitzacions en l'etapa d'enllaç especificant l'opció de compilació "-C linker-plugin-lto".

Font: opennet.ru

Afegeix comentari