Rust 1.28 Lanzamiento

El equipo de desarrollo de Rust se complace en anunciar el lanzamiento de una nueva versión de Rust: 1.28.0. Rust es un lenguaje de programación del sistema destinado a la seguridad, la velocidad y la ejecución de código paralelo.


Si tiene una versión anterior de Rust instalada usando Rustup, entonces para actualizar Rust a la versión 1.28.0 solo necesita hacer:


$ rustup update stable 

Si aún no ha instalado Rustup, puede instalarlo desde la página correspondiente de nuestro sitio web. Las notas de lanzamiento detalladas para Rust 1.28.0 están disponibles en GitHub.


Lo que se incluye en la versión estable 1.28.0


Asignadores globales


Usando asignadores, los programas Rust obtienen memoria en tiempo de ejecución. Anteriormente, Rust no permitía cambiar la forma en que se asignaba la memoria, lo que limitaba su uso en algunos casos. En algunas plataformas, se usó jemalloc, en otras, un asignador de sistema, pero los usuarios no podían controlarlo. En la versión 1.28.0, el atributo #[global_allocator] se estabiliza, lo que permite a los programas Rust seleccionar un asignador del sistema, así como definir nuevos asignadores, implementando el GlobalAlloc .


El asignador predeterminado para los programas de Rust en algunas plataformas es jemalloc. La biblioteca estándar ahora proporciona un identificador del asignador del sistema que puede usar para cambiar al uso del asignador del sistema, cuando sea necesario, mediante una declaración estática con el atributo #[global_allocator] .


 use std::alloc::System; #[global_allocator] static GLOBAL: System = System; fn main() { let mut v = Vec::new(); //     . v.push(1); } 

Sin embargo, a veces necesita definir su propio asignador para un área funcional específica de su aplicación. Esto también es relativamente fácil de hacer mediante la implementación del GlobalAlloc . Puede leer más sobre cómo hacer esto en la documentación .


Mensaje de error de formato mejorado


El trabajo para mejorar el diagnóstico continúa, esta vez con énfasis en el formateo:


 format!("{_foo}", _foo = 6usize); 

Anteriormente, el mensaje de error en este lugar era bastante escaso:


 error: invalid format string: expected `'}'`, found `'_'` | 2 | format!("{_foo}", _foo = 6usize); | ^^^^^^^^ 

Ahora un nuevo mensaje de diagnóstico indica la razón específica por la cual la cadena de formato no es válida:


 error: invalid format string: invalid argument name `_foo` | 2 | let _ = format!("{_foo}", _foo = 6usize); | ^^^^ invalid argument name in format string | = note: argument names cannot start with an underscore 

Vea las notas de la versión para más detalles.


Estabilización de la biblioteca estándar.


Además de la estabilización de GlobalAlloc ya mencionada, los tipos de números que no son NonZero se estabilizan en esta versión. Estos son tipos de envoltorio alrededor de tipos enteros sin signo estándar: NonZeroU8 , NonZeroU16 , NonZeroU32 , NonZeroU64 , NonZeroU128 y NonZeroUsize .


Le permiten optimizar el tamaño de los datos almacenados. Por ejemplo, la Option<u8> ocupa dos bytes, mientras que la Option<NonZeroU8> uno. Tenga en cuenta que esta optimización persiste incluso cuando NonZeroU8 envuelto dentro de otra estructura; El siguiente ejemplo muestra que la Door todavía ocupa un byte, incluso cuando se coloca dentro de la Option . Esta optimización también se aplica a las enumeraciones definidas por el usuario; la Option no Option especial aquí.


 use std::mem; use std::num::NonZeroU8; struct Key(NonZeroU8); struct Door { key: Key, } fn main() { assert_eq!(mem::size_of::<Door>(), 1); assert_eq!(mem::size_of::<Option<Door>>(), 1); } 

Muchos otros componentes de la biblioteca también se han estabilizado, una lista completa de los cuales se puede encontrar en las notas detalladas de la versión .


Mejoras de carga


Cargo ya no le permitirá publicar paquetes con scripts de compilación que modifiquen el directorio src. El directorio src en el paquete debe considerarse inmutable.


Desarrolladores 1.28.0


Mucha gente participó en el desarrollo de Rust 1.28. No podríamos haber completado el trabajo sin cada uno de ustedes. Gracias


De un traductor: expreso mi gratitud a los miembros de la comunidad ruRust y personalmente a ozkriff por su ayuda con la traducción y revisión

Source: https://habr.com/ru/post/es419259/


All Articles