Rust 1.93 ha llegado, esto es lo nuevo

Rust 1.93.0 ahora es estable y se lanzó hoy. Se centra en reforzar las garantías de seguridad del compilador y al mismo tiempo proporciona nuevas herramientas cruciales para tareas críticas para el rendimiento. Es una versión sólida que hace que el lenguaje se sienta más maduro en las áreas más importantes.

Si crea binarios estáticos para Linux (especialmente en x86_64 o aarch64), la confiabilidad de su red está a punto de recibir un gran impulso. Rust 1.93 lleva la biblioteca musl incluida a la versión 1.2.5, lo que resuelve algunos dolores de cabeza de larga data con la resolución DNS en las versiones anteriores. Esta es una gran noticia si está creando binarios portátiles de Linux que manejan redes, porque hace que esa funcionalidad sea mucho más confiable.

Esto ayuda especialmente cuando se trata de registros DNS grandes o servidores de nombres recursivos complicados. La actualización musl eliminó algunos símbolos de compatibilidad heredados. El óxido libc La caja utilizó estos símbolos. Sin embargo, hace más de dos años se envió una solución para este problema, por lo que la mayoría de los proyectos modernos no deberían experimentar ningún problema durante el proceso de actualización.

Al permitir que los asignadores globales accedan al almacenamiento local de subprocesos, la biblioteca estándar ahora le permite usar de forma segura funciones como std::thread_local! sin provocar problemas de reentrada. Para aquellos que escriben código de bajo nivel altamente optimizado, el nuevo soporte para cfg atributos directamente en asm! líneas es fantástico. Anteriormente, si deseaba incluir condicionalmente algunas instrucciones de ensamblaje basadas en las características de destino, tenía que duplicar todo el asm! bloque dentro de declaraciones de compilación condicional.

Ahora puedes aplicar la compilación condicional, como #[cfg(target_feature = "sse2")]directamente a líneas individuales de ensamblaje o restricciones dentro del bloque. Esto hace que la redacción de optimizaciones específicas de la plataforma sea mucho más limpia y fácil de mantener.

La versión estabiliza una gran cantidad de API, brindando a los desarrolladores nuevas herramientas para administrar la memoria y las estructuras de datos. Varios métodos nuevos para MaybeUninit las rebanadas ahora están estables. Estos incluyen assume_init_drop, assume_init_refy métodos como write_copy_of_slice. Estos proporcionan un control granular sobre la seguridad de la memoria cuando se trata de buffers no inicializados. Si trabaja con FFI o gestión de memoria personalizada, también apreciará que String::into_raw_parts y Vec::into_raw_parts ya son oficiales.

Esto le permite deconstruir estas colecciones en sus componentes principales, como punteros, longitudes y capacidades sin procesar. Los adictos al rendimiento apreciarán la estabilización de operaciones enteras no controladas como unchecked_neg, unchecked_shly unchecked_shr. Estos son cruciales para escribir código extremadamente rápido e inseguro donde el desarrollador garantiza que no se producirán desbordamientos ni cambios no válidos.

Para el uso diario, el VecDeque La colección tiene métodos como. pop_front_if y pop_back_if. Esto permite a los usuarios eliminar condicionalmente elementos de cualquier extremo de la cola, lo que simplifica mucho la lógica de la cola.

El deref_nullptr lint, que detecta intentos de eliminar la referencia a punteros nulos, ahora se deniega de forma predeterminada. Este es un cambio muy bienvenido porque ayuda a detectar problemas críticos de seguridad en tiempo de compilación en lugar de durante el tiempo de ejecución. También se agregaron nuevas advertencias, incluyendo function_casts_as_integer y const_item_interior_mutations. Estos ayudan a aplicar las mejores prácticas y prevenir errores sutiles relacionados con la mutabilidad interior dentro de elementos constantes.

La variable de entorno CARGO_CFG_DEBUG_ASSERTIONS ahora está habilitado en scripts de compilación basados ​​en el perfil activo. Esto proporciona a los scripts de compilación más contexto sobre cómo se compila el código. Además, cargo clean ahora apoya el --workspace flag, lo que simplifica la limpieza para grandes proyectos de paquetes múltiples. Si analiza con frecuencia gráficos de dependencia, cargo tree ahora admite formularios largos para su --format variables, lo que hace que la salida compleja sea más fácil de personalizar.

Hay mucho que ver en esta nueva versión y estarás feliz de haber actualizado. Si ya tiene Rust instalado, puede obtener la actualización ahora mismo ejecutando rustup update stable.

Fuente: Óxido (1), Óxido (2)

We use cookies in order to give you the best possible experience on our website. By continuing to use this site, you agree to our use of cookies.
Accept