Hace pocos días se dio a conocer el lanzamiento de la nueva versión del popular lenguaje de programación «Rust 1.72», versión en la cual se han añadido nuevas características, asi como también mejoras, correcciones de errores y diversos cambios que centran en hacer más sencillo y fluido el proceso de creación de código.
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.72
En esta nueva versión que se presenta de Rust 1.72 versión una de las características más innovadoras es la mejora en la utilidad de los elementos deshabilitados mediante los atributos «cfg» de compilación condicional, lo que permite activar la ejecución del código Rust dependiendo de si ciertas características de la caja son compatibles o se ejecutan en plataformas específicas.
Anteriormente, los elementos deshabilitados mediante cfg no eran visibles para el compilador, pero ahora eso cambia, ya que compilador ahora conserva información vital, incluidos los nombres de los elementos y las condiciones de cfg. Esto permite al compilador proporcionar comentarios interesantes, como resaltar la falta de disponibilidad de una función debido a la necesidad de habilitar una característica de caja específica. Esto brinda a los desarrolladores una guía más clara y facilita una experiencia de codificación más eficiente. Por ejemplo, permite comprender que alguna función no está disponible debido a la deshabilitación de ciertas propiedades de características en la caja.
Otro de los cambios que se destaca de esta nueva version de Rust 1.72, es que se eliminaron las restricciones en el tiempo de evaluación de expresiones constantes, ya que anteriormente, para evitar bucles en tiempo de compilación, Rust limitaba el número máximo de expresiones que podían ejecutarse durante la evaluación constante.
Esta característica provocó errores al compilar código que no se ajustaba a las restricciones, por lo que en la nueva versión se decidió reemplazar las restricciones estrictas con una pantalla de advertencia que informaba sobre cálculos constantes de larga duración. La verificación de pelusa const_eval_long_running también se aplica de forma predeterminada para detectar bucles.
Ademas de ello, también se destaca que las listas Clippy fueron mejoradas, ya que se movieron una serie de comprobaciones Clippy al compilador Rustc:
- undropped_manually_drops: cambiado a con nivel de denegación. Cuando se trata de ManuallyDrop, el valor interno no se elimina automáticamente. Invocar std::mem::drop no tiene ningún efecto. En cambio, este lint ahora propone usar ManuallyDrop::into_inner como opción principal.
- invalid_utf8_in_unchecked: renombrado a nivel de denegación y nivel de advertencia; invalid_from_utf8_unchecked invalid_from_utf8. Identifica instancias en las que std::str::from_utf8_unchecked y std::str::from_utf8_unchecked_mut se usan con literales UTF-8 no válidos. Este uso viola sus requisitos previos de seguridad y genera un comportamiento indefinido. Esta pelusa está ahora categóricamente prohibida.
- invalid_nan_comparisons: identifica comparaciones que involucran f32::NAN o f64::NAN como operandos. Dado que NaN carece de comparaciones significativas
- invalid_reference_casting: resalta los casos en los que &T se convierte en &mut T sin aprovechar la mutabilidad interior. Tales acciones dan como resultado un comportamiento inmediato e indefinido, independientemente de si se emplea o no la referencia.
De los demás cambios que se destacan de la nueva versión:
- Una nueva parte de la API se ha movido a la categoría estable, incluidos los métodos y las implementaciones de rasgos que se han estabilizado.
- El atributo «const», que determina la posibilidad de utilizar en cualquier contexto en lugar de constantes, se utiliza en funciones:
- Se implementó soporte de tercer nivel para plataformas loongarch64-unknown-none*. 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.
- En una futura versión de Rust 1.76, se planea dejar de admitir las plataformas Windows 7, 8 y 8.1 y hacer de Windows 10 la versión mínima tanto para el compilador como para fines de compilación.
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.72.0 con:
rustup update stable