Lanzamiento de Rust 1.95. Integración de Rust en el servidor gráfico Mir. Analizador de tráfico ayaFlow en Rust

Se ha publicado la versión del lenguaje de programación Rust 1.95, que fue desarrollado originalmente por Mozilla, pero ahora es mantenido por la organización sin fines de lucro Rust Foundation. El lenguaje se centra en el manejo seguro de la memoria y proporciona herramientas para lograr un alto paralelismo en la ejecución de tareas, sin necesidad de un recolector de basura ni de un entorno de ejecución (el entorno de ejecución se limita a la inicialización básica y el apoyo a 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:

  • Se ha añadido el macro «cfg_select!», que puede utilizarse en lugar del paquete «cfg-if» para manejar múltiples condiciones de compilación al estilo del bloque «match», sin necesidad de definir una cadena de expresiones condicionales con la construcción «#[cfg]». cfg_select! { unix => { fn foo() { /* unix */ } } target_pointer_width = «32» => { fn foo() { /* no unix, 32-bit */ } } _ => { fn foo() { /* no unix y no 32-bit */ } } }
  • Se ha estabilizado la posibilidad de utilizar expresiones «if let» dentro de bloques «match» para crear coincidencias condicionales por patrón. Anteriormente, se había estabilizado el soporte para especificar múltiples expresiones «let» utilizando el operador «&&» para bloques «if» y «while». match value { Some(x) if let Ok(y) = compute(x) => { println!(«{}, {}», x, y); } _ => {} }
  • Se ha estabilizado el soporte para ensamblador en línea para las arquitecturas PowerPC y PowerPC64.
  • Se ha trasladado un nuevo lote de API a la categoría estable, incluyendo la estabilización de métodos e implementaciones de traits:
    • MaybeUninit<[T; N]>: From<[MaybeUninit<T>; N]>
    • MaybeUninit<[T; N]>: AsRef<[MaybeUninit<T>; N]>
    • MaybeUninit<[T; N]>: AsRef<[MaybeUninit<T>]>
    • MaybeUninit<[T; N]>: AsMut<[MaybeUninit<T>; N]>
    • MaybeUninit<[T; N]>: AsMut<[MaybeUninit<T>]>
    • [MaybeUninit<T>; N]: From<MaybeUninit<[T; N]>
    • Cell<[T; N]>: AsRef<[Cell<T>; N]>
    • Cell<[T; N]>: AsRef<[Cell<T>]>
    • Cell<[T]>: AsRef<[Cell<T>]>
    • bool: TryFrom<{integer}>
    • AtomicPtr::update
    • AtomicPtr::try_update
    • AtomicBool::update
    • AtomicBool::try_update
    • AtomicIn::update
    • AtomicIn::try_update
    • AtomicUn::update
    • AtomicUn::try_update
    • cfg_select!
    • mod core::range
    • core::range::RangeInclusive
    • core::range::RangeInclusiveIter
    • core::hint::cold_path
    • <*const T>::as_ref_unchecked
    • <*mut T>::as_ref_unchecked
    • <*mut T>::as_mut_unchecked
    • Vec::push_mut
    • Vec::insert_mut
    • VecDeque::push_front_mut
    • VecDeque::push_back_mut
    • VecDeque::insert_mut
    • LinkedList::push_front_mut
    • LinkedList::push_back_mut
    • Layout::dangling_ptr
    • Layout::repeat
    • Layout::repeat_packed
    • Layout::extend_packed
  • El atributo «const» se aplica en las funciones:
    • fmt::from_fn
    • ControlFlow::is_break
    • ControlFlow::is_continue
  • En las versiones estables de la herramienta se ha eliminado el soporte para pasar especificaciones de plataformas objetivo personalizadas al compilador.
  • Las plataformas objetivo powerpc64-unknown-linux-musl, aarch64-apple-tvos, aarch64-apple-tvos-sim, aarch64-apple-watchos, aarch64-apple-watchos-sim, aarch64-apple-visionos y aarch64-apple-visionos-sim han sido trasladadas al segundo nivel de soporte, que implica una garantía de construcción, pero sin garantías durante la ejecución de la suite de pruebas.

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

  • Canonical ha presentado el servidor de pantalla Mir 2.26, que proporciona un conjunto de bibliotecas para crear compuestos servidores basados en el protocolo Wayland e incluye funcionalidad estándar de administradores de ventanas y servidores de pantalla. Mir se utiliza en proyectos como el gestor de ventanas Miracle, la interfaz para quioscos de internet Ubuntu Frame y el entorno de escritorio Miriway.

    Esta nueva versión se destaca por añadir la capacidad de desarrollar componentes en el lenguaje Rust. Se ha implementado un subsistema alternativo de gestión de entrada evdev-rs en Rust y se ha comenzado el trabajo en un frontend escrito en Rust llamado wayland-rs para Wayland. En cuanto a cambios no relacionados con Rust, se ha añadido el soporte para los protocolos Wayland ext_image_copy_capture_v1 y input-triggers.

  • Se ha publicado la primera versión del analizador de tráfico ayaFlow, escrito en Rust y que utiliza la subsistema eBPF del núcleo Linux para interceptar paquetes de red (IPv4/TCP/UDP) y tramas Ethernet con un impacto mínimo en el rendimiento. Se soporta una inspección profunda de protocolos de nivel de aplicación (L7), por ejemplo, la extracción de TLS SNI y consultas DNS durante el análisis del tráfico cifrado. El sistema mantiene una tabla con el estado actual de las conexiones en formato DashMap, guarda el historial en SQLite y ofrece estadísticas a través de la API REST para Prometheus.
  • Se ha implementado la capacidad de crear aplicaciones multihilo en Rust que utilizan funciones std::thread y se ejecutan del lado de la GPU.

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