Linguaxe de programación Rust versión 1.34

tivo lugar versión da linguaxe de programación do sistema Ferruxe 1.34, desenvolvido polo proxecto Mozilla. A linguaxe céntrase na seguridade da memoria, ofrece xestión automática da memoria e proporciona un medio para lograr un alto paralelismo de tarefas sen utilizar un colector de lixo ou tempo de execución.

A xestión automática da memoria de Rust libera ao programador da manipulación do punteiro e protexe contra os problemas derivados da manipulación de memoria de baixo nivel, como accesos á memoria despois libres, desreferencias de punteiros nulos, desbordamentos do búfer e similares. Estase a desenvolver un xestor de paquetes para distribuír bibliotecas, garantir a montaxe e xestionar as dependencias do proxecto. Carga, o que lle permite obter as bibliotecas necesarias para o programa cun só clic. Admítese un repositorio para aloxar bibliotecas caixóns.io.

O principal innovacións:

  • O xestor de paquetes Cargo engadiu ferramentas para traballar con rexistros de paquetes alternativos que poden coexistir co rexistro público crates.io. Por exemplo, os desenvolvedores de aplicacións privativas agora poden usar o seu propio rexistro privado, que se pode usar ao enumerar dependencias en Cargo.toml, e aplicar un modelo de versións semellante ao crates.io para os seus produtos, así como referir dependencias a ambos os caixóns. io e ao teu propio rexistro.

    Para engadir rexistros externos a .cargo/config (situado en $HOME ou no directorio do paquete)
    fornecido sección “[rexistros]”, e para utilizar un rexistro externo apareceu a opción “rexistro” na descrición de cada dependencia en Cargo.toml. Para conectarse a un rexistro adicional, simplemente coloque o token de autenticación no ficheiro ~/.cargo/credentials e execute o comando
    "cargo login --registry=my-registry" e para publicar un paquete -
    "cargo publish -registry=meu-rexistro";

  • Engadiuse compatibilidade total para usar o operador “?”. en probas doctests, o que lle permite usar código de exemplo da documentación como probas. Operador anteriormente
    "?" podería usarse para xestionar erros durante a execución da proba só na presenza da función "fn main()" ou nas funcións "#[test]";

  • En atributos personalizados definidos mediante macros de procedemento asegurado a capacidade de usar conxuntos arbitrarios de fichas (“#[attr($tokens)]”, “#[attr[$tokens]] e #[attr{$tokens}]”). Anteriormente, os elementos só se podían especificar nunha árbore/forma recursiva usando literais de cadea, por exemplo “#[foo(bar, baz(quux, foo = “bar”)]”, pero agora é posible usar enumeracións (' #[rango(0. .10)]') e construcións como “#[bound(T: MyTrait)]”;
  • Tipos estabilizados (trazo) Proba desde и TryInto, permitindo conversións de tipos con tratamento de erros. Por exemplo, métodos como from_be_bytes con tipos enteiros usan matrices como entrada, pero os datos adoitan presentarse nun tipo Slice, e a conversión entre matrices e sectores é problemático de facer manualmente. Coa axuda de novos trazos, a operación especificada pódese realizar sobre a marcha mediante unha chamada a .try_into(), por exemplo, "let num = u32::from_be_bytes(slice.try_into()?)". Para as conversións que sempre teñen éxito (por exemplo, do tipo u8 ao u32), engadiuse un tipo de erro Infalible, permitindo un uso transparente
    TryFrom para todas as implementacións existentes de "From";

  • A función quedou obsoleta CommandExt::before_exec, que permitiu executar un controlador antes de executar exec, que se executou no contexto dun proceso fillo bifurcado despois da chamada fork(). En tales condicións, algúns recursos do proceso principal, como os descritores de ficheiros e as áreas de memoria mapeadas, poderían duplicarse, o que podería provocar un comportamento indefinido e un funcionamento incorrecto das bibliotecas.
    Recoméndase usar unha función non segura en lugar de before_exec CommandExt::pre_exec.

  • Tipos de enteiros atómicos estabilizados con signo e sen asinar de tamaño entre 8 e 64 bits (por exemplo, Atomic U8), así como tipos asinados Non ZeroI[8|16|32|64|128].
  • Moveuse unha nova parte da API á categoría estable, incluíndo Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] e os métodos SystemTime estabilizáronse ::checked_[add|sub]. Estabilizáronse as funcións iter::from_fn e iter::successors;
  • Para todos os tipos de enteiros, implícanse os métodos checked_pow, saturating_pow, wrapping_pow e overflowing_pow;
  • Engadiuse a posibilidade de activar optimizacións na fase de ligazón especificando a opción de compilación "-C linker-plugin-lto".

Fonte: opennet.ru

Engadir un comentario