Lanzamiento del lenguaje de programación Rust 1.57

Se ha publicado el lanzamiento del lenguaje de programación del sistema Rust 1.57, fundado por el proyecto Mozilla, pero ahora desarrollado bajo los auspicios de la organización independiente sin fines de lucro Rust Foundation. El lenguaje se centra en la seguridad de la memoria, proporciona administración automática de la memoria y proporciona los medios para lograr un alto paralelismo de tareas sin utilizar un recolector de basura o tiempo de ejecución (el tiempo de ejecución se reduce a la inicialización y el mantenimiento básicos 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.

Principales novedades:

  • Se ha estabilizado el uso de la macro “¡pánico!”. en contextos creados durante la compilación, como declaraciones "const fn". Además, además de utilizar "¡pánico!" Las declaraciones const permiten el uso de la macro "asertar!". y algunas otras API de biblioteca estándar. La estabilización aún no cubre toda la infraestructura de formateo, por lo que en su forma actual la macro "¡pánico!" solo se puede usar con cadenas estáticas (panic!(“...")) o con un único valor interpolado "&str" al sustituir (panic!("{}", a)), que debe limitarse a sustituir "{ }" sin especificadores de formato y otros tipos. En el futuro, se ampliará la aplicabilidad de las macros en contextos constantes, pero las capacidades estabilizadas ya son suficientes para realizar comprobaciones de aserción en la etapa de compilación: const _: () = afirmar!(std::mem::size_of:: () == 64); const _: () = afirmar!(std::mem::size_of:: () == 8);
  • El administrador de paquetes Cargo permite el uso de perfiles con nombres arbitrarios, no limitados a "dev", "release", "test" y "bench". Por ejemplo, para habilitar la optimización en la etapa de vinculación (LTO) solo cuando se generan los ensamblajes del producto final, puede crear un perfil de "producción" en Cargo.toml y agregarle el indicador "lto = true". Sin embargo, al definir sus propios perfiles, debe especificar un perfil existente para heredar la configuración predeterminada del mismo. El siguiente ejemplo crea un perfil de "producción" que complementa el perfil de "lanzamiento" al incluir el indicador "lto = true". El perfil en sí se activa llamando a cargo con la opción “--profile production”, y los artefactos de ensamblaje se colocarán en el directorio “target/production”. [perfil.producción] hereda = "liberar" lto = verdadero
  • Se ha estabilizado el uso de try_reserve para los tipos Vec, String, HashMap, HashSet y VecDeque, lo que permite reservar espacio con anticipación para una cierta cantidad de elementos de un tipo determinado con el fin de reducir la frecuencia de las operaciones de asignación de memoria y evitar Se bloquea durante el funcionamiento debido a la falta de memoria.
  • Se permite especificar macros con llaves en expresiones como "m!{ .. }.method()" y "m!{ .. }?".
  • Se ha optimizado la ejecución de las funciones File::read_to_end y read_to_string.
  • La compatibilidad con la especificación Unicode se actualizó a la versión 14.0.
  • Se amplió la cantidad de funciones marcadas "#[must_use]" para emitir una advertencia si se ignora el valor de retorno, lo que ayuda a identificar errores causados ​​al suponer que una función cambiará los valores en lugar de devolver un nuevo valor.
  • Se agregó backend experimental para la generación de código usando libgccjit.
  • 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:
    • [T; N]::as_mut_slice
    • [T; N]::as_slice
    • colecciones::TryReserveError
    • HashMap::try_reserve
    • HashSet::try_reserve
    • Cadena::try_reserve
    • Cadena::try_reserve_exact
    • Vec::try_reserve
    • Vec::try_reserve_exact
    • VecDeque::try_reserve
    • VecDeque::try_reserve_exact
    • Iterador::map_ while
    • iter::MapaMientras
    • proc_macro::está_disponible
    • Comando::get_program
    • Comando::get_args
    • Comando::get_envs
    • Comando::get_current_dir
    • ComandoArgs
    • ComandoEnvs
  • El atributo "const", que determina si se puede utilizar en cualquier contexto en lugar de constantes, se utiliza en la función sugerencia::unreachable_unchecked.
  • Se ha implementado el tercer nivel de soporte para armv6k-nintendo-3ds, armv7-unknown-linux-uclibceabihf, m68k-unknown-linux-gnu, aarch64-kmc-solid_asp3, armv7a-kmc-solid_asp3-eabi y armv7a-kmc- Plataformas solid_asp3-eabihf. El tercer nivel implica soporte básico, pero sin pruebas automatizadas, publicación de compilaciones oficiales y verificación de la capacidad de compilación del código.

Fuente: opennet.ru

Añadir un comentario