Lanzamiento del lenguaje de programación Rust 1.74. Auditoría RustVMM. Reescribir carpeta en Rust

Se ha lanzado el lenguaje de programación de propósito general Rust 1.74, 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:

  • Se agregó la capacidad de configurar comprobaciones de pelusa a través del archivo Cargo.toml con el manifiesto del administrador de paquetes. Para definir configuraciones de pelusa, como el nivel de respuesta (prohibir, denegar, advertir, permitir), se proponen nuevas secciones “[lints]” y “[workspace.lints]”, cuyos cambios se tienen en cuenta a la hora de tomar una decisión sobre reconstrucción. Por ejemplo, en lugar de especificar los indicadores “-F”, “-D”, “-W” y “-A” al ensamblar o agregar “#![forbid(unsafe_code)]” y “#![deny(clippy) :” atributos al código) :enum_glob_use)]" ahora se puede usar en el manifiesto de Cargo: [lints.rust] unsafe_code = "forbid" [lints.clippy] enum_glob_use = "deny"
  • El administrador de paquetes Crate ha agregado la capacidad de autenticarse al conectarse a un repositorio. El paquete básico incluye soporte para colocar parámetros de autenticación en almacenes de credenciales de Linux (basado en libsecret), macOS (Keychain) y Windows (Windows Credential Manager), pero el sistema inicialmente se hace modular y le permite organizar el trabajo con varios proveedores para almacenar y Al generar tokens, por ejemplo, se ha preparado un complemento para utilizar el administrador de contraseñas 1Password. El repositorio puede requerir autenticación para cualquier operación, no solo para confirmar que los paquetes se han publicado. ~/.cargo/config.toml [registro] global-credential-providers = ["cargo:token", "cargo:libsecret"]
  • Se ha estabilizado la compatibilidad con proyecciones de tipo de retorno (impl_trait_projections), lo que permite mencionar a Self y T::Assoc en tipos de retorno como "async fn" y "->impl Trait". estructura Contenedor<'a, T>(&'a T); // Tipos de retorno opacos que mencionan `Self`: impl Wrapper<'_, ()> { async fn async_fn() -> Self { /* … */ } fn impl_trait() -> impl Iterator { /* … */ } } rasgo Rasgo<'a> { tipo Assoc; fn nuevo() -> Self::Assoc; } impl Rasgo<'_> for () { tipo Assoc = (); fn new() {} } // Tipos de retorno opacos que mencionan un tipo asociado: impl<'a, T: Trait<'a>> Wrapper<'a, T> { async fn mk_assoc() -> T::Assoc { /* … */ } fn a_few_assocs() -> iterador impl { /* … */ } }
  • 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:
  • El atributo “const”, que determina la posibilidad de utilizarlo en cualquier contexto en lugar de constantes, se utiliza en las funciones:
    • núcleo::mem::transmute_copy
    • cadena::is_ascii
    • [u8]::es_ascii
    • núcleo::num::Saturando
    • impl De para std::proceso::Stdio
    • impl De para std::proceso::Stdio
    • impl De para std::proceso::Child{Stdin, Stdout, Stderr}
    • impl De para std::proceso::Child{Stdin, Stdout, Stderr}
    • std::ffi::OsString::from_encoded_bytes_unchecked
    • std::ffi::OsString::into_encoded_bytes
    • std::ffi::OsStr::from_encoded_bytes_unchecked
    • std::ffi::OsStr::as_encoded_bytes
    • std::io::Error::otro
    • implícito TryFrom para sub16
    • implicar Desde<&[T; N]>para Vec
    • implicar Desde<&mut [T; N]>para Vec
    • implicar Desde<[T; N]> para Arco<[T]>
    • implicar Desde<[T; N]> para Rc<[T]>
  • El compilador, el kit de herramientas, la biblioteca estándar y los ejecutables de aplicaciones generados tienen mayores requisitos para las plataformas Apple, y ahora requieren al menos macOS 10.12 Sierra, iOS 10 y tvOS 10 lanzados en 2016 para ejecutarse.
  • Se implementó el tercer nivel de soporte para la plataforma i686-pc-windows-gnullvm. 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.
  • Se ha implementado el segundo nivel de soporte para la plataforma de destino loongarch64-unknown-none. El segundo nivel de soporte implica una garantía de montaje.

Además, se pueden señalar dos eventos relacionados con el lenguaje Rust:

  • El OSTIF (Open Source Technology Improvement Fund), creado para fortalecer la seguridad de los proyectos de código abierto, ha publicado los resultados de una auditoría del proyecto RustVMM, que proporciona componentes para la creación de hipervisores y monitores de máquinas virtuales (VMM) para tareas específicas. En el desarrollo del proyecto participan empresas como Intel, Alibaba, Amazon, Google, Linaro y Red Hat. Los hipervisores Intel Cloud Hypervisor y Dragonball se están desarrollando en base a RustVMM. La auditoría confirmó la alta calidad del código base y el uso de técnicas en la arquitectura e implementación destinadas a lograr la máxima seguridad. Durante la auditoría se identificaron 6 problemas que no tuvieron un impacto directo en la seguridad.
  • Google introdujo una nueva implementación del mecanismo de comunicación entre procesos Binder, reescrito en el lenguaje Rust, en la lista de correo de desarrolladores del kernel de Linux. La revisión se llevó a cabo como parte de un proyecto para fortalecer la seguridad, promover técnicas de programación seguras y aumentar la eficiencia de la identificación de problemas al trabajar con la memoria en Android (alrededor del 70% de todas las vulnerabilidades peligrosas identificadas en Android son causadas por errores al trabajar con la memoria ). La implementación de Binder en Rust ha logrado la paridad en funcionalidad con la versión original en lenguaje C, pasa todas las pruebas de AOSP (Proyecto de código abierto de Android) y se puede utilizar para crear ediciones funcionales de firmware. El rendimiento de ambas implementaciones está aproximadamente al mismo nivel (desviaciones entre -1.96% y +1.38%).

Fuente: opennet.ru

Añadir un comentario