Versió del llenguatge de programació Rust 1.40

publicat llançament del llenguatge de programació del sistema Rovell 1.40, 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 eines per aconseguir un alt paral·lelisme de tasques sense utilitzar 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'ha afegit la possibilitat de marcar estructures (struct) i enumeracions (enum amb bloc Variant) mitjançant l'atribut "#[no_exhaustiva]", quin permet en el futur, afegiu nous camps i opcions a les estructures i enumeracions declarades. Per exemple, els desenvolupadors de mòduls que tenen estructures amb camps declarats públicament poden utilitzar "#[no_exhaustive]" per marcar estructures que poden tenir camps nous afegits en el futur. Fins ara, en aquesta situació, el desenvolupador es veia obligat a triar entre declarar camps de manera privada i vincular-se a una llista immutable de camps. El nou atribut elimina aquesta limitació i us permet afegir nous camps en el futur sense el risc de trencar el codi extern compilat anteriorment. En els paquets de caixes, quan coincideixin opcions a la secció "coincidència", es requereix una definició explícita de la màscara "_ => {...}", que cobreixi possibles camps futurs, en cas contrari es mostrarà un error en afegir camps nous.
  • Afegit la capacitat de cridar la macro procedimental mac!() en un context de tipus. Per exemple, ara podeu escriure "type Foo = expand_to_type!(bar);" si "expand_to_type" és una macro de procediment.
  • En blocs "extern { ... }". afegit la capacitat d'utilitzar macros procedimentals i d'atributs, incloses macros "bang!()", per exemple:

    macro_regles! make_item { ($nom:ident) => { fn $nom(); } }

    extern {
    make_item!(alfa);
    make_item!(beta);
    }

    extern "C" {
    #[my_identity_macro] fn foo();
    }

  • En macros implementat capacitat de generar elements "macro_rules!". S'està generant "macro_rules!" possible tant en macros semblants a funcions ("mac!()") com en macros en forma d'atributs ("#[mac]").
  • A l'element de mapatge $m:meta afegit suport per a valors d'enumeració de testimoni arbitraris ("[TOKEN_STREAM]", "{TOKEN_STREAM}" i "(TOKEN_STREAM)"), per exemple:

    macro_regles! accept_meta { ($m:meta) => {} }
    accepta_meta!( my::path );
    accepta_meta!( my::path = "il·luminat");
    accepta_meta!( my::path ( abc ) );
    accepta_meta!( my::path [ abc ] );
    accepta_meta!( my::path { abc } );

  • En el mode Rust 2015, la sortida d'error s'habilita per als problemes identificats en comprovar l'endeutament de variables (controlador de préstecs) mitjançant la tècnica NLL (Vida no lèxica). Anteriorment, els avisos es van substituir per errors quan s'executaven en mode Rust 2018.
    Després que el canvi es va estendre al mode Rust 2015, els desenvolupadors finalment van poder fer-ho desfer-se de de l'antic verificador de préstecs.

    Recordem que el sistema de verificació basat en un nou mecanisme per tenir en compte la vida útil de les variables prestades va permetre identificar alguns problemes que passaven desapercebuts per l'antic codi de verificació. Com que la sortida d'errors per a aquestes comprovacions podria afectar la compatibilitat amb el codi que funcionava anteriorment, inicialment es van emetre advertències en lloc d'errors.

  • L'atribut "const", que determina la possibilitat d'utilitzar-lo en qualsevol context en lloc de constants, s'utilitza per a la funció is_power_of_two (per a nombres enters sense signe).
  • S'ha mogut una nova part de l'API a la categoria estable, incloent la macro tot!() i els mètodes slice::repeat, mem::take, BTreeMap::get_key_value, HashMap::get_key_value, s'han estabilitzat.
    Option::as_deref, Option::as_deref_mut, Option::flatten, UdpSocket::peer_addr, {f32,f64}::to_be_bytes, {f32,f64}::to_le_bytes,{f32,f64}::to_ne_bytes, {f32, f64}::from_be_bytes, {f32,f64}::from_le_bytes i {f32,f64}::from_ne_bytes.

  • A la càrrega del gestor de paquets
    implementat guardant a la memòria cau advertiments del compilador al disc. S'ha afegit l'opció "metadades de càrrega" a l'ordre "metadades de càrrega".--plataforma-filtre" per mostrar només paquets vinculats a la plataforma de destinació especificada a la columna de resolució de dependències. S'ha afegit l'opció de configuració http.ssl-version per definir versions TLS vàlides.
    S'ha afegit la possibilitat de publicar la secció "dependències de desenvolupament" sense especificar la clau de "versió".

  • El compilador rustc proporciona suport de tercer nivell per a les plataformes de destinació thumbv7neon-unknown-linux-musleabihf, aarch64-unknown-none-softfloat, mips64-unknown-linux-muslabi64 i mips64el-unknown-linux-muslabi64. El tercer nivell implica suport bàsic, però sense proves automatitzades i publicació de compilacions oficials.

Font: opennet.ru

Afegeix comentari