Rust 1.71 llega con mejoras de estabilización y mas
Hace pocos días se dio a conocer el lanzamiento de la nueva versión del popular lenguaje de programación «Rust 1.71″, version en la cual se han estabilizado una gran cantidad de APIs, asi como tambien diferentes apartados, se han introducido mejoras y muchas cosas más.
Para quienes desconocen de este lenguaje de programación deben saber que 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.
Principales novedades de Rust 1.71
En esta nueva versión que se presenta de Rust 1.71 se destaca que se estabilizó la ABI extern «C-unwind», que difiere de la ABI sin el sufijo «-unwind» («extern «C»‘) al mantener un comportamiento seguro (safe) si el proceso de «unwinding» iniciado por un bloqueo del programa o el lanzamiento de una excepción de estilo C++ cruza un límite de ABI. Cabe mencionar que en una versión futura de Rust se buscara modificará estas ABI para que coincidan con el comportamiento especificado como parte final de la estabilización de esta característica.
Otro de los cambios que se destaca es el soporte estabilizado para los atributos ‘#[debug_visualizer(natvis_file = «…»)]’ y ‘#[debug_visualizer(gdb_script_file = «…»)]’, que permiten incrustar metadatos de Microsoft Natviz y scripts GDB en bibliotecas de Rust para mejorar la salida de depuración al inspeccionar estructuras de datos creadas por bibliotecas. Dichos scripts ya están incluidos para la biblioteca estándar y ahora es posible incluirlos para bibliotecas de terceros.
Ademas de ello, tambien se destaca que Cargo optimiza su uso bajo rustup y es que cuando Cargo detecta que se ejecutará rustc apuntando a un proxy Rustup, intentará omitir el proxy y usará el binario subyacente directamente. Hay suposiciones sobre la interacción con rustup y RUSTUP_TOOLCHAIN. Sin embargo, no se espera que afecte a los usuarios normales.
Por otra parte, en Windows, es posible utilizar funciones de bibliotecas dinámicas que no están disponibles en el momento de la compilación (por ejemplo, para evitar la instalación de bibliotecas innecesarias en el entorno de compilación y simplificar la compilación cruzada).
Tambien se destaca que se implemento el soporte de tercer nivel para la plataforma x86_64 h-apple-darwin. El tercer nivel implica soporte básico, pero sin pruebas automatizadas, publicación de compilaciones oficiales y verificación de la capacidad de compilar el código
De los demás cambios que se destacan de esta nueva versión:
- Las plataformas de destino que usan la biblioteca Musl C se han migrado a la versión Musl 1.2.3 (anteriormente se usaba la versión 1.1.24), que permite usar el tipo time64 en sistemas de 32 bits.
- La biblioteca estándar proporciona una variante de la macro thread_local que se inicializa con el atributo «const», que se puede usar en contexto en lugar de constantes, lo que le permite generar un código más óptimo.
- 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:
- El atributo «const», que determina la posibilidad de usar en cualquier contexto en lugar de constantes, se usa en funciones:
- El administrador de paquetes Cargo permite especificar opciones con nombre debuginfo en el archivo Cargo.toml.
- Se habilito flatten-format-args de forma predeterminada.
- Rust también admite la vinculación a símbolos proporcionados por DLL por ordinal en lugar de símbolo con nombre, utilizando el nuevo atributo #[link_ordinal].
- Se agregó la opción workspace_default_members a los metadatos. Al ejecutar los comandos «cargo new» y «cargo init», los campos del espacio de trabajo se heredan automáticamente.
- Se implementó soporte de segundo nivel para la plataforma de destino loongarch64-unknown-linux-gnu.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.
Finalmente, para quienes estén interesados en actualizar desde una versión anterior de Rust instalada a través de rustup, se puede obtener la nueva versión de Rust 1.71.0 con:
rustup update stable