Rust 1.33 Lanzamiento

El equipo de desarrollo de Rust se complace en anunciar el lanzamiento de una nueva versión de Rust, 1.33.0. Rust es un lenguaje de programación que permite a todos crear software confiable y eficiente.


Si tiene una versión anterior de Rust instalada con rustup , entonces para actualizar Rust a la versión 1.33.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.33.0 están disponibles en GitHub.


Lo que se incluye en la versión estable 1.33.0


Mejoras importantes de esta versión: expansión significativa de las capacidades const fn y estabilización de la nueva API API.


Extender const fn


const fn ahora puede hacer mucho más , a saber:


  • coincidencia de patrones incondicional (irrefutable) (por ejemplo, const fn foo((x, y): (u8, u8)) { ... } )
  • enlaces let (por ejemplo, let x = 1; )
  • enlaces let mutables (por ejemplo, let mut x = 1; )
  • expresiones de asignación (por ejemplo x = y ) y operadores de asignación (por ejemplo x += y ), incluida la asignación a proyecciones (por ejemplo, un campo de estructura o el resultado de un operador de indexación - x[3] = 42 )
  • declaraciones de expresión (por ejemplo, 3; )

Ahora puede llamar a "const inseguro fn" desde "const fn" , por ejemplo:


 const unsafe fn foo() -> i32 { 5 } const fn bar() -> i32 { unsafe { foo() } } 

Gracias a estas mejoras, se hizo posible declarar una gran cantidad constante de funciones de la biblioteca estándar. Se enumeran a continuación en la sección de la biblioteca.


Pin API


Este problema introduce un nuevo mecanismo en el lenguaje, introducido escriba std :: pin :: Tipo de pin y marcador Desanclar . La idea principal se describe en detalle en la documentación "std :: pin" del módulo :

A veces puede ser útil prohibir el movimiento de un objeto, es decir. Garantizar la inmutabilidad de su dirección en la memoria. El escenario principal para usar esta característica son las estructuras de autorreferencia, ya que mover dichos objetos generará punteros no válidos, lo que puede conducir a un comportamiento indefinido (UB).

Pin<P> asegura que el objeto al que hace referencia cualquier puntero del tipo P tiene una ubicación fija en la memoria, es decir no puede ser movido y su memoria no puede ser liberada. Dichos valores se denominan "anclados".

Se espera que este mecanismo sea utilizado principalmente por los autores de las bibliotecas, por lo que no profundizaremos en los detalles ahora (que se pueden encontrar en la documentación en el enlace anterior). Sin embargo, la estabilización de esta API es un evento importante para todos los usuarios de Rust, ya que es un paso clave hacia el async / await muy esperado. El estado del trabajo restante en esta dirección se puede controlar en areweasyncyet.rs .


Importar como "_"


Ahora puede importar entidades como "_" . Esto le permite importar la implementación del tipo sin ingresar su nombre en el espacio de nombres actual, por ejemplo:


 use std::io::Read as _; //     : pub trait Read {} 

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


Estabilización de la biblioteca estándar.


Aquí hay una lista de todo lo que se ha vuelto constante:



Además, las siguientes API están estabilizadas:



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


Mejoras de carga


La carga ahora vuelve a ensamblar la caja si se modificó uno de sus archivos durante la construcción inicial.


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


Crates.io


Como se anunció anteriormente , a partir de esta versión, crates.io requerirá una dirección de correo electrónico de confirmación para publicar cajas. A partir del 2019-03-01 00:00 UTC, la implementación de cargo publish de cargo publish fallará con las cuentas sin correo verificado.


Esto es necesario para cumplir con los requisitos de la DMCA . Si no notó las advertencias sobre esto que la carga escribió en lanzamientos recientes, vaya a crates.io/me para indicar y confirmar su correo. Esta dirección de correo nunca se publicará y se utilizará exclusivamente para la funcionalidad directa de crates.io.


Desarrolladores 1.33.0


Muchas personas juntas crearon Rust 1.33. No podríamos haber completado el trabajo sin cada uno de ustedes. Gracias

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


All Articles