Lanzamiento del lenguaje de programación Rust 2021 (1.56)

Se ha publicado el lanzamiento del lenguaje de programación del sistema Rust 1.56, fundado por el proyecto Mozilla, pero ahora desarrollado bajo los auspicios de la organización independiente sin fines de lucro Rust Foundation. Además del número de versión normal, el lanzamiento también se denomina Rust 2021 y marca una estabilización de los cambios propuestos durante los últimos tres años. Rust 2021 también servirá como base para aumentar la funcionalidad durante los próximos tres años, de manera similar a cómo el lanzamiento de Rust 2018 se convirtió en la base para el desarrollo del lenguaje en los últimos tres años.

Para mantener la compatibilidad, los desarrolladores pueden utilizar etiquetas "2015", "2018" y "2021" en sus programas, lo que permite vincular los programas a segmentos de estado del idioma correspondientes a las ediciones seleccionadas de Rust. Las ediciones se introdujeron para separar cambios incompatibles y se configuran en los metadatos de los paquetes de carga a través del campo "edición" en la sección "[paquete]". Por ejemplo, la edición “2018” incluye la funcionalidad estabilizada a finales de 2018 y también cubre todos los cambios adicionales que no afecten la compatibilidad. La edición 2021 incluye además funciones que rompen la interoperabilidad propuestas en la versión actual 1.56 y aprobadas para su implementación futura. Además del lenguaje en sí, los editores también tienen en cuenta el estado de las herramientas y la documentación.

Principales incompatibilidades registradas en Rust 2021:

  • Captura separada en cierres: los cierres ahora pueden capturar nombres de campos individuales en lugar del identificador completo. Por ejemplo, "|| ax + 1" solo capturará "ax" en lugar de "a".
  • El rasgo IntoIterator para matrices: array.into_iter() le permite iterar sobre elementos de una matriz por valores, en lugar de por referencias.
  • El procesamiento de expresiones "|" se ha modificado en macro_rules (Booleano OR) en patrones: el especificador ":pat" en coincidencias ahora respeta "A | B".
  • El administrador de paquetes de carga incluye de forma predeterminada la segunda versión del solucionador de funciones, cuyo soporte apareció en Rust 1.51.
  • Los rasgos TryFrom, TryInto y FromIterator se han agregado al módulo de biblioteca estándar de preludio.
  • Las macros pánico!(..) y afirmar!(expr, ..) ahora siempre usan format_args!(..) para formatear cadenas, similar a println!().
  • Las expresiones ident#, ident»..." e ident'...' están reservadas en la sintaxis del lenguaje.
  • Se movieron las advertencias bare_trait_objects y ellipsis_inclusive_range_patterns a errores.

Nuevo en Rust 1.56:

  • En Cargo.toml, en la sección “[paquete]”, se agregó el campo versión de óxido, a través del cual puede determinar la versión mínima admitida de Rust para el paquete crate. Si la versión actual no coincide con el parámetro especificado, Cargo dejará de funcionar y mostrará un mensaje de error.
  • Cuando la coincidencia de patrones utiliza expresiones "binding @ patrón", se proporciona soporte para especificar enlaces adicionales (por ejemplo, "let Matrix @ Matrix {row_len, ..} = get_matrix();").
  • 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:
    • std::os::unix::fs::chroot
    • Celdainsegura::raw_get
    • BufWriter::into_parts
    • núcleo::pánico::{UnwindSafe, RefUnwindSafe, AssertUnwindSafe}
    • Vec::shrink_to
    • Cadena::shrink_to
    • OsString::shrink_to
    • RutaBuf::shrink_to
    • Montón binario::shrink_to
    • VecDeque::shrink_to
    • HashMap::shrink_to
    • HashSet::shrink_to
  • El atributo "const", que determina la posibilidad de utilizar en cualquier contexto en lugar de constantes, se utiliza en funciones
    • std::mem::transmutar
    • [T]::primero
    • [T]::split_first
    • [T]::último
    • [T]::split_last
  • El compilador se ha cambiado para utilizar LLVM versión 13.
  • Se ha implementado un segundo nivel de soporte para la plataforma aarch64-apple-ios-sim y un tercer nivel para las plataformas powerpc-unknown-freebsd y riscv32imc-esp-espidf. El tercer nivel implica soporte básico, pero sin pruebas automatizadas, publicación de compilaciones oficiales ni verificación de si el código se puede compilar.

Recuerde que Rust se centra en la seguridad de la memoria, proporciona administración automática de la memoria y proporciona un medio para lograr un alto paralelismo en la ejecución del trabajo sin utilizar un recolector de basura o 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).

La gestión automática de la memoria de Rust elimina errores al manipular punteros y protege contra problemas derivados de la manipulación de la memoria de bajo nivel, como el acceso a una región de memoria después de haber sido liberada, desreferencias de punteros nulos, desbordamientos de búfer, etc. Para distribuir bibliotecas, garantizar el ensamblaje y gestionar dependencias, el proyecto está desarrollando el administrador de paquetes Cargo. El repositorio crates.io es compatible con bibliotecas de alojamiento.

Fuente: opennet.ru

Añadir un comentario