Lanzamiento del lenguaje de programación Rust 1.34

tuvo lugar lanzamiento del lenguaje de programación del sistema Moho 1.34, desarrollado por el proyecto Mozilla. El lenguaje se centra en la seguridad de la memoria, proporciona administración automática de la memoria y proporciona un medio para lograr un alto paralelismo de tareas sin utilizar un recolector de basura o tiempo de ejecución.

La gestión automática de la memoria de Rust libera al desarrollador de la manipulación del puntero y protege contra problemas que surgen de la manipulación de la memoria de bajo nivel, como accesos posteriores a la memoria, desreferencias de punteros nulos, desbordamientos del búfer y similares. Se está desarrollando un administrador de paquetes para distribuir bibliotecas, garantizar el ensamblaje y gestionar las dependencias del proyecto. , permitiéndole obtener las bibliotecas necesarias para el programa con un solo clic. Se admite un repositorio para alojar bibliotecas. cajas.io.

El principal innovaciones:

  • El administrador de paquetes Cargo ha agregado herramientas para trabajar con registros de paquetes alternativos que pueden coexistir con el registro público crates.io. Por ejemplo, los desarrolladores de aplicaciones propietarias ahora pueden usar su propio registro privado, que se puede usar al enumerar dependencias en Cargo.toml, y aplicar un modelo de control de versiones similar a crates.io para sus productos, así como referir dependencias a ambas cajas. io y a su propio registro.

    Para agregar registros externos a .cargo/config (ubicado en $HOME o en el directorio del paquete)
    proporcionado para apartado “[registros]”, y para utilizar un registro externo, en la descripción de cada dependencia en Cargo.toml ha aparecido la opción “registro”. Para conectarse a un registro adicional, simplemente coloque el token de autenticación en el archivo ~/.cargo/credentials y ejecute el comando
    "cargo login --registry=my-registry" y publicar un paquete -
    "publicación de carga -registro=mi-registro";

  • Se agregó soporte completo para usar el operador "?". en pruebas pruebas documentales, permitiéndole utilizar código de ejemplo de la documentación como pruebas. Anteriormente operador
    "?" podría usarse para manejar errores durante la ejecución de la prueba solo en presencia de la función “fn main()” o en las funciones “#[test]”;

  • En atributos personalizados definidos mediante macros de procedimiento proporcionado la capacidad de utilizar conjuntos arbitrarios de tokens (“#[attr($tokens)]”, “#[attr[$tokens]] y #[attr{$tokens}]”). Anteriormente, los elementos solo podían especificarse en forma de árbol/recursiva usando cadenas literales, por ejemplo “#[foo(bar, baz(quux, foo = “bar”))]”, pero ahora es posible usar enumeraciones (' #[range(0. .10)]') y construcciones como “#[bound(T: MyTrait)]”;
  • Tipos estabilizados (rasgo) Pruebe desde и Pruébalo, permitiendo conversiones de tipos con manejo de errores. Por ejemplo, métodos como from_be_bytes con tipos enteros usan matrices como entrada, pero los datos a menudo vienen en un tipo Slice, y la conversión entre matrices y divisiones es problemática si se realiza manualmente. Con la ayuda de nuevos rasgos, la operación especificada se puede realizar sobre la marcha mediante una llamada a .try_into(), por ejemplo, “let num = u32::from_be_bytes(slice.try_into()?)”. Para las conversiones que siempre tienen éxito (por ejemplo, del tipo u8 a u32), se ha agregado un tipo de error Infalible, permitiendo un uso transparente
    TryFrom para todas las implementaciones existentes de "From";

  • La función ha quedado obsoleta. CommandExt::antes_exec, que permitía ejecutar un controlador antes de ejecutar exec, que se ejecutaba en el contexto de un proceso hijo bifurcado después de la llamada fork(). En tales condiciones, algunos recursos del proceso principal, como descriptores de archivos y áreas de memoria asignadas, podrían duplicarse, lo que podría provocar un comportamiento indefinido y un funcionamiento incorrecto de las bibliotecas.
    Se recomienda utilizar una función insegura en lugar de before_exec ComandoExt::pre_exec.

  • Tipos de enteros atómicos estabilizados con y sin signo que varían en tamaño de 8 a 64 bits (por ejemplo, AtómicoU8), así como tipos firmados distinto de ceroI[8|16|32|64|128].
  • Una nueva parte de la API se ha movido a la categoría estable, incluido Any::type_id, Error::type_id, slice::sort_by_cached_key, str::escape_*, str::split_ascii_whitespace, Instant::checked_[add|sub ] y los métodos SystemTime se han estabilizado ::checked_[add|sub]. Las funciones iter::from_fn e iter::successors se han estabilizado;
  • Para todos los tipos de enteros, se implementan los métodos check_pow, saturating_pow, wraping_pow y overflowing_pow;
  • Se agregó la capacidad de habilitar optimizaciones en la etapa de vinculación especificando la opción de compilación “-C linker-plugin-lto”.

Fuente: opennet.ru

Añadir un comentario