Lanzamiento del lenguaje de programación Rust 1.65

Se ha lanzado el lenguaje de programación de propósito general Rust 1.65, fundado por el proyecto Mozilla pero ahora desarrollado bajo los auspicios de la organización independiente sin fines de lucro Rust Foundation. El lenguaje se enfoca en la seguridad de la memoria y proporciona los medios para lograr un alto paralelismo de trabajos mientras evita el uso de un recolector de basura y tiempo de ejecución (el tiempo de ejecución se reduce a la inicialización básica y el mantenimiento de la biblioteca estándar).

Los métodos de manejo de memoria de Rust salvan al desarrollador de errores al manipular punteros y protegen contra los problemas que surgen debido al manejo de memoria de bajo nivel, como acceder a un área de memoria después de haberla liberado, desreferenciar punteros nulos, desbordamientos de búfer, etc. Para distribuir bibliotecas, proporcionar compilaciones y administrar dependencias, el proyecto desarrolla el administrador de paquetes Cargo. El repositorio crates.io es compatible con el alojamiento de bibliotecas.

La seguridad de la memoria se proporciona en Rust en tiempo de compilación a través de la verificación de referencias, el seguimiento de la propiedad de los objetos, el seguimiento de la vida útil de los objetos (alcances) y la evaluación de la corrección del acceso a la memoria durante la ejecución del código. Rust también brinda protección contra desbordamientos de enteros, requiere la inicialización obligatoria de los valores de las variables antes de su uso, maneja mejor los errores en la biblioteca estándar, aplica el concepto de referencias y variables inmutables de forma predeterminada, ofrece tipado estático fuerte para minimizar los errores lógicos.

Principales novedades:

  • Se agregó soporte para tipos asociados genéricos (GAT, tipos asociados genéricos), que permiten crear alias de tipos asociados con otro tipo y le permiten asociar constructores de tipos con rasgos. rasgo Foo { tipo Bar<'x>; }
  • Se implementó la expresión "let... else", lo que le permite verificar la condición de coincidencia del patrón directamente dentro de la expresión "let" y ejecutar código arbitrario si el patrón no coincide. let Ok(count) = u64::from_str(count_str) else { pánico!("No se puede analizar el número entero: '{count_str}'"); };
  • Permita el uso de una declaración de interrupción para salir prematuramente de bloques con nombre, utilizando el nombre del bloque (etiqueta) para identificar el bloque que se va a terminar. let resultado = 'bloquear: { hacer_cosa(); if condition_not_met() { romper 'bloque 1; } hacer_siguiente_cosa(); if condition_not_met() { romper 'bloque 2; } hacer_última_cosa(); 3 };
  • Para Linux, se agregó la capacidad de guardar por separado la información de depuración (split-debuginfo), que anteriormente solo estaba disponible para la plataforma macOS. Al especificar la opción "-Csplit-debuginfo=unpacked", los datos de debuginfo en formato DWARF se guardarán en varios archivos de objetos separados con una extensión ".dwo". Al especificar "-Csplit-debuginfo=packed" se creará un paquete único en formato ".dwp" que incluye todos los datos de información de depuración del proyecto. Para integrar debuginfo directamente en la sección .debug_* de objetos ELF, puede usar la opción "-Csplit-debuginfo=off".
  • Una nueva parte de la API se ha movido a la categoría de estable, incluidos los métodos y las implementaciones de rasgos que se han estabilizado:
    • std::retroceso::retroceso
    • Encuadernado::as_ref
    • std::io::read_to_string
    • <*const T>::cast_mut
    • <*mut T>::cast_const
  • El atributo “const”, que determina la posibilidad de utilizarlo en cualquier contexto en lugar de constantes, se utiliza en las funciones <*const T&>::offset_from y <*mut T>::offset_from
  • Como parte de la etapa final de transferencia de la implementación del protocolo LSP (Language Server Protocol) al analizador de óxido, la implementación obsoleta de Rust Language Server (RLS) fue reemplazada por un servidor auxiliar que emite una advertencia con una sugerencia para cambiar a utilizando un analizador de óxido.
  • Durante la compilación, se habilita la compatibilidad con la implementación en línea de código intermedio MIR, lo que acelera la compilación de paquetes de cajas típicos entre un 3 y un 10 %.
  • Para acelerar las compilaciones programadas, el administrador de paquetes Cargo ofrece clasificación de trabajos en espera de ejecución en la cola.

Además, puede consultar la entrevista sobre el uso del lenguaje Rust en Volvo para desarrollar componentes de sistemas de información automotrices. No hay planes para reescribir el código existente y probado en Rust, pero para el código nuevo, Rust es una de las opciones preferidas para mejorar la calidad a costos más bajos. También se han creado grupos de trabajo relacionados con el uso del lenguaje Rust en las asociaciones de automoción AUTOSAR (AUTomotive Open System ARchitecture) y SAE (Society of Automotive Engineers).

Además, David Kleidermacher, vicepresidente de ingeniería de Google, habló sobre la traducción del código utilizado en la plataforma Android para gestionar las claves de cifrado a Rust, así como el uso de Rust en la implementación del protocolo DNS sobre HTTPS en la pila. para chips UWB (banda ultra ancha) y en el marco de virtualización (Android Virtualization Framework) asociado con el chip Tensor G2. También se están desarrollando para Android nuevas pilas para Bluetooth y Wi-Fi, reescritas en Rust. La estrategia general es fortalecer gradualmente la seguridad, primero convirtiendo los componentes de software más vulnerables y vitales a Rust y luego expandiéndolos a otros subsistemas relacionados. El año pasado, el lenguaje Rust se incluyó en la lista de lenguajes permitidos para desarrollar la plataforma Android.

Fuente: opennet.ru

Añadir un comentario