La plataforma de Android brinda compatibilidad con el desarrollo de componentes nativos del SO en Rust, un lenguaje de programación de sistemas moderno que proporciona garantías de seguridad de memoria con un rendimiento equivalente a C/C++. Rust utiliza una combinación de verificaciones en tiempo de compilación que aplican la vida útil y la propiedad del objeto, y verificaciones de tiempo de ejecución que garantizan accesos válidos a la memoria, lo que elimina la necesidad de un recolector de elementos no utilizados.
Rust ofrece una variedad de funciones modernas de lenguaje que permiten a los desarrolladores aumentar su productividad y la confianza en su código:
- Programación simultánea segura: La facilidad con la que los usuarios pueden escribir código eficiente y con protección de subprocesos generó el eslogan Simultaneidad intrépida de Rust.
- Sistema de tipos expresivos: Rust ayuda a evitar errores de programación lógicos, ya que permite tipos muy expresivos (como wrappers de Newtype y variantes de enumeración con contenido).
- Verificaciones de tiempo de compilación más sólidas: Mientras más errores se detecten en el tiempo de compilación, más aumentará la confianza de los desarrolladores respecto a que, cuando se compila correctamente el código, funciona según lo previsto.
- Framework de prueba integrado: Rust proporciona un framework de prueba integrado en el que se pueden colocar pruebas de unidades junto con la implementación que prueban, lo que facilita la inclusión de pruebas de unidades.
- Aplicación de manejo de errores: Las funciones con fallas recuperables pueden mostrar un tipo de resultado, que será una variante de éxito o de error. El compilador requiere que los llamadores verifiquen y manejen la variante de error de una enumeración
Result
que se muestra a partir de una llamada a función. Así, se reduce la posibilidad de que se produzcan errores debido a fallas no controladas. - Inicialización: Rust requiere que cada variable se inicialice con un miembro legal de su tipo antes de usarla, lo que evita una inicialización accidental en un valor no seguro.
- Manejo de números enteros más seguro: Todas las conversiones de tipo de número entero son conversiones explícitas. Los desarrolladores no pueden hacer una conversión por accidente durante una llamada a una función cuando se asigna a una variable o cuando intentan hacer aritmética con otros tipos. La verificación de desbordamiento está activada de forma predeterminada en Android para Rust, lo que requiere que las operaciones de desbordamiento sean explícitas.
Para obtener más información, consulta la serie de entradas de blog sobre la compatibilidad de Rust de Android:
- Rust en la plataforma de Android
Proporciona una descripción general de por qué el equipo de Android introdujo Rust como un lenguaje de plataforma nuevo. - Cómo integrar Rust en el Proyecto de código abierto de Android
Se analiza cómo se incorporó la compatibilidad con Rust en el sistema de compilación y por qué se tomaron ciertas decisiones de diseño. - Interoperabilidad de Rust/C++ en la plataforma de Android
Se analiza el enfoque para la interoperabilidad de Rust/C++ en Android.