Lanzamiento de Rust 1.97. Núcleo Zinnia y sistema P2P Iroh escritos en Rust, con direccionamiento por claves

Se ha publicado la versión 1.97 del lenguaje de programación Rust, originalmente desarrollado por Mozilla y ahora mantenido bajo la tutela de la organización sin fines de lucro Rust Foundation. El lenguaje se centra en el uso seguro de la memoria y proporciona herramientas para lograr un alto paralelismo en la ejecución de tareas, evitando el uso de recolectores de basura y runtime (el runtime se limita a la inicialización básica y al soporte de la biblioteca estándar).

Los métodos de manejo de memoria en Rust están diseñados para eliminar errores al manipular punteros y protegerse de problemas que surgen del trabajo de bajo nivel con la memoria, como acceder a la memoria después de que se ha liberado, desreferenciar punteros nulos, desbordar búferes, etc. Para la distribución de bibliotecas, la construcción y la gestión de dependencias, se desarrolla el gestor de paquetes Cargo. Para el alojamiento de bibliotecas, se soporta el repositorio crates.io.

La seguridad en el manejo de la memoria se garantiza en Rust en tiempo de compilación a través de la verificación de referencias, el seguimiento de la propiedad de los objetos, la gestión de tiempos de vida de objetos (ámbitos) y la evaluación de la corrección del acceso a la memoria durante la ejecución del código. Rust también ofrece herramientas para protegerse contra desbordamientos 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 inmutabilidad de referencias y variables por defecto, y ofrece una fuerte tipificación estática para minimizar errores lógicos.

Novedades principales:

  • Por defecto, se ha habilitado un nuevo esquema de decorado (mangling) para los nombres de funciones, variables globales y estructuras de datos en los archivos objeto y ejecutables generados (-Csymbol-mangling-version=v0). Los nombres se decoran para prevenir conflictos durante la vinculación de diferentes programas, adjuntando un contexto específico, como la ruta del módulo y el nombre del paquete crate.

    El antiguo esquema de decorado, basado en Itanium ABI, presentaba desventajas como la sustitución de parámetros genéricos por hashes ilegibles y la presencia de partes del compilador que no usaban Itanium ABI, lo que requería el uso de decodificadores de nombres específicos de Rust. En Rust 1.97, se ha implementado por defecto un esquema de decorado diseñado específicamente para Rust, sin las desventajas mencionadas. Se tiene la intención de eliminar el antiguo esquema en una de las próximas versiones.

  • El gestor de paquetes cargo ha incorporado la posibilidad de gestionar la reacción a las advertencias generadas por el compilador durante la construcción. Se ha añadido la variable de entorno CARGO_BUILD_WARNINGS, que puede tener tres valores: warn (por defecto) — muestra advertencias en la pantalla; allow — oculta las advertencias; deny — trata las advertencias como errores, deteniendo la construcción.

    En versiones anteriores, para finalizar la construcción tras la salida de una advertencia, era necesario especificar "-Dwarnings" en RUSTFLAGS para el compilador, pero al modificar RUSTFLAGS, el gestor de paquetes cargo consideraba la construcción como nueva, ignorando los datos en caché y recompilando todo el proyecto desde cero. Mover la configuración al lado de cargo ha eliminado el restablecimiento de la caché y la necesidad de una recompilación completa al cambiar el modo de manejo de advertencias, además de simplificar la inclusión del manejo de advertencias como errores en sistemas de integración continua.

  • Por defecto, al compilar se incluye la visualización de mensajes proporcionados por el enlazador. Los mensajes aparecen en forma de advertencias a través de una regla de lint especial llamada «linker_messages», que no forma parte del grupo estándar de «warnings». Al mismo tiempo, rustc filtra los mensajes que son falsos positivos típicos o comportamientos normales, dejando advertencias que pueden indicar problemas, tales como advertencias sobre opciones obsoletas y configuraciones no deseadas. Anteriormente, la información del enlazador se mostraba solo al terminar con un error, mientras que de lo contrario, todos los mensajes estaban ocultos. Para restaurar el comportamiento anterior, se puede añadir en Cargo.toml: [lints.rust] linker_messages = «allow»
  • Se ha trasladado un nuevo lote de API a la categoría estable, incluyendo la estabilización de métodos e implementaciones de traits:
    • Predeterminado para RepeatN
    • Copia para ffi::FromBytesUntilNulError
    • Enviar para std::fs::File para UEFI
    • ::isolate_highest_one
    • ::isolate_lowest_one
    • ::highest_one
    • ::lowest_one
    • ::bit_width
    • NonZero::isolate_highest_one
    • NonZero::isolate_lowest_one
    • NonZero::highest_one
    • NonZero::lowest_one
    • NonZero::bit_width
  • El atributo «const» se aplica en el método char::is_control.

También se pueden señalar proyectos y eventos recientemente anunciados relacionados con Rust:

  • El proyecto zinnia desarrolla un núcleo modular similar a Unix, escrito en Rust y distribuido bajo la licencia GPLv2. El núcleo admite interfaces POSIX y algunas extensiones de BSD y Linux, como epoll y timerfd. Los controladores DRM (Direct Rendering Manager) y evdev están disponibles para la representación y organización de entradas. La funcionalidad implementada es suficiente para ejecutar un entorno de escritorio Xfce bajo un servidor X y compositor servidores Weston basado en Wayland. Se admite el arranque tanto en el emulador QEMU como en hardware real, como la portátil ThinkPad E14 G7.
  • Se ha presentado la versión 1.0 de la biblioteca de comunicaciones iroh, que permite establecer conexiones de red entre aplicaciones en diferentes hosts conectándose mediante claves criptográficas, en lugar de direcciones IP (se indica la clave a la que es necesario conectarse y iroh encuentra el host relacionado, estableciendo una conexión cifrada utilizando el protocolo QUIC). Siempre que sea posible, se establecen conexiones P2P directas, pero si esto no es posible, se realiza una reversión para funcionar a través de relés, que también se utilizan para descubrir hosts por clave. Es posible iniciar su propio relé o conectarse a relés públicos admitidos por la comunidad.

    Entre las características avanzadas se incluyen: soporte para Multipath QUIC para la entrega de paquetes simultáneamente a través de múltiples rutas, capacidad de operar detrás de NAT, modo de configuración estática para conectarse a dispositivos locales sin acceso a Internet, posibilidad de compilar a código intermedio WASM para ejecutar dentro del navegador, y soporte para crear sus propios transportes, por ejemplo, para conectarse a través de Bluetooth, WiFi Aware o LoRa. El código está escrito en Rust y se distribuye bajo las licencias Apache-2.0 y MIT. También hay envolturas disponibles para Python, Node.js, Kotlin y Swift.

  • El autor de la plataforma JavaScript del servidor Bun publicó un artículo analizando el proyecto de reescritura de Bun de Zig a Rust, utilizando el modelo de IA Claude Fable. Se menciona que Bun 1.3.14 será la última versión en Zig y que la próxima versión, Bun 1.4.0, ya estará en Rust. Según las pruebas realizadas, la versión en Rust consume significativamente menos memoria y es entre un 2% y un 5% más rápida que la versión en Zig. El tamaño del archivo ejecutable en la versión de Rust se ha reducido en un 20%.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster