Lanzamiento del lenguaje de programación Rust 1.60

Se ha lanzado el lenguaje de programación de propósito general Rust 1.60, 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 enfoca en la seguridad de la memoria y proporciona los medios para lograr un alto paralelismo de trabajos mientras evita el uso de un recolector de basura y 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).

Los métodos de manejo de memoria de Rust salvan al desarrollador de errores al manipular punteros y protegen contra los problemas que surgen debido al manejo de memoria de bajo nivel, como acceder a un área de memoria después de haberla liberado, desreferenciar punteros nulos, desbordamientos de búfer, etc. Para distribuir bibliotecas, proporcionar compilaciones y administrar dependencias, el proyecto desarrolla el administrador de paquetes Cargo. El repositorio crates.io es compatible con el alojamiento de bibliotecas.

La seguridad de la memoria se proporciona en Rust en tiempo de compilación a través de la verificación de referencias, el seguimiento de la propiedad de los objetos, el seguimiento de la vida útil de los objetos (alcances) y la evaluación de la corrección del acceso a la memoria durante la ejecución del código. Rust también brinda protección contra desbordamientos de enteros, requiere la inicialización obligatoria de los valores de las variables antes de su uso, maneja mejor los errores en la biblioteca estándar, aplica el concepto de referencias y variables inmutables de forma predeterminada, ofrece tipado estático fuerte para minimizar los errores lógicos.

Principales novedades:

  • El compilador Rustc tiene un sistema estabilizado basado en LLVM para generar datos de cobertura utilizados para evaluar la cobertura del código durante las pruebas. Para habilitar los datos de cobertura durante el ensamblaje, debe usar el indicador "-Cinstrument-coverage", por ejemplo, iniciando el ensamblaje con el comando "RUSTFLAGS="-C instrument-coverage" cargo build". Después de ejecutar el archivo ejecutable compilado de esta manera, el archivo default.profraw se guardará en el directorio actual, para cuyo procesamiento puede utilizar la utilidad llvm-profdata del componente llvm-tools-preview. La salida procesada por llvm-profdata luego se puede pasar a llvm-cov para generar un informe de cobertura de código anotado. La información sobre el enlace al código fuente se toma del archivo ejecutable que se está examinando, que incluye los datos necesarios sobre la conexión entre los contadores de cobertura y el código. 1| 1|fn principal() { 2| 1| println!("¡Hola mundo!"); 3| 1|}
  • En el administrador de paquetes de carga, se ha estabilizado el soporte para el indicador “-timings”, que incluye la generación de un informe detallado sobre el progreso de la construcción y el tiempo de ejecución de cada paso. El informe puede resultar útil para optimizar el rendimiento del proceso de montaje.
  • El administrador de paquetes de carga ofrece una nueva sintaxis para el mecanismo de compilación condicional y selección de dependencias opcionales, configurada en el archivo Cargo.toml al enumerar una lista de propiedades nombradas en la sección [características] y activada al habilitar las propiedades durante la compilación del paquete. utilizando el indicador “--features”. La nueva versión agrega soporte para dependencias en espacios de nombres separados y dependencias débiles.

    En el primer caso, es posible utilizar elementos con el prefijo "dep:" dentro de la sección "[características]" para vincular explícitamente a una dependencia opcional sin representar implícitamente esta dependencia como una característica. En el segundo caso se ha añadido soporte para marcar con el signo “?”. ("nombre-paquete?/nombre-característica") dependencias opcionales que solo deben incluirse si alguna otra propiedad incluye la dependencia opcional dada. Por ejemplo, en el siguiente ejemplo, habilitar la propiedad serde habilitará la dependencia "serde", así como la propiedad "serde" para la dependencia "rgb", pero solo si la dependencia "rgb" está habilitada en otro lugar: [dependencias] serde = { versión = " 1.0.133 ", opcional = verdadero } rgb = { versión = "0.8.25", opcional = verdadero } [características] serde = ["dep:serde", "rgb?/serde"]

  • Se ha devuelto la compatibilidad con la compilación incremental, que estaba deshabilitada en la última versión. Se resolvió el error del compilador que provocó que la función se deshabilitara.
  • Se resolvieron algunos problemas al proporcionar temporizadores instantáneos con una garantía de sincronización monótona, que tiene en cuenta el tiempo que pasa el sistema en modo de suspensión. Anteriormente, siempre que era posible, se utilizaba la API del sistema operativo para operar el temporizador, lo que no tenía en cuenta situaciones problemáticas que rompen la monotonía del tiempo, como problemas de hardware, el uso de virtualización o errores en el sistema operativo.
  • 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:
    • Arco::nuevo_cíclico
    • Rc::nuevo_cíclico
    • rebanada::EscapeAscii
    • <[u8]>::escape_ascii
    • u8::escape_ascii
    • Vec::spare_capacity_mut
    • QuizásUninit::assume_init_drop
    • QuizásUninit::assume_init_read
    • i8::abs_diff
    • i16::abs_diff
    • i32::abs_diff
    • i64::abs_diff
    • i128::abs_diff
    • isize::abs_diff
    • u8::abs_diff
    • u16::abs_diff
    • u32::abs_diff
    • u64::abs_diff
    • u128::abs_diff
    • utilizar::abs_diff
    • Mostrar para io::ErrorKind
    • Desde para código de salida
    • No para ! (escriba "nunca")
    • _Op_Assign<$t>
    • arch::is_aarch64_feature_detected!
  • Se ha implementado el tercer nivel de soporte para las plataformas mips64-openwrt-linux-musl* y armv7-unknown-linux-uclibceabi (softfloat). 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.
  • El compilador se ha cambiado para utilizar LLVM 14.

Además, puedes notar:

  • Se agregó soporte para arrancar el compilador Rustc usando el backend Rustc_codegen_gcc, que le permite usar la biblioteca libgccjit del proyecto GCC como generador de código en Rustc, lo que le permite a Rustc brindar soporte para arquitecturas y optimizaciones disponibles en GCC. La promoción del compilador significa la capacidad de utilizar un generador de código basado en GCC en Rustc para construir el propio compilador Rustc. Desde el punto de vista práctico, esta característica le permite crear programas Rust para arquitecturas que anteriormente no eran compatibles con Rustc.
  • Está disponible el lanzamiento del kit de herramientas uutils coreutils 0.0.13, dentro del cual se está desarrollando un análogo del paquete GNU Coreutils, reescrito en lenguaje Rust. Coreutils viene con más de cien utilidades, incluidas sort, cat, chmod, chown, chroot, cp, date, dd, echo, hostname, id, ln y ls. El objetivo del proyecto es crear una implementación alternativa multiplataforma de Coreutils, capaz de ejecutarse en plataformas Windows, Redox y Fuchsia, así como distribuirse bajo la licencia permisiva MIT, en lugar de la licencia copyleft GPL.

    La nueva versión ha mejorado las implementaciones de muchas utilidades, incluida una compatibilidad significativamente mejorada de las utilidades cp, dd, df, split y tr con sus contrapartes del proyecto GNU. Documentación en línea proporcionada. El analizador clap se utiliza para analizar los argumentos de la línea de comandos, lo que mejoró el resultado del indicador “--help” y agregó soporte para abreviaturas de comandos largos (por ejemplo, puede especificar “ls -col” en lugar de “ls -color”). ”).

Fuente: opennet.ru

Añadir un comentario