El desarrollador de software Matt Keeter ha aprovechado una nueva funcionalidad en la versión nightly de Rust para crear un intérprete de alto rendimiento para la arquitectura de CPU Uxn. Mediante el uso de la palabra clave `become`, implementó con éxito la optimización de llamadas de cola (tail-call optimization), una técnica que ha ganado gran relevancia en la programación de sistemas por su capacidad para agilizar el despacho de instrucciones.
El proyecto de Keeter se centra en emular la CPU Uxn, una máquina de pila compacta utilizada en el ecosistema de Hundred Rabbits. Los intentos anteriores de optimizar este emulador requerían escribir miles de líneas de código ensamblador manual para ARM64 y x86-64. Aunque estas implementaciones en ensamblador ofrecían una mejora de rendimiento de entre el 40% y el 100% respecto a las versiones iniciales en Rust, introducían riesgos de seguridad significativos, incluyendo vulnerabilidades de corrupción de memoria.
Adiós al ensamblador inseguro
El nuevo enfoque basado en Rust permite obtener los beneficios del "código enhebrado" (threaded code) —un método donde las instrucciones saltan directamente de una a otra— sin los peligros asociados a la gestión manual del ensamblador. Keeter señaló que la implementación de llamadas de cola es "sorprendentemente agradable" de escribir y ofrece una alternativa viable a su anterior backend programado a mano. Aunque el nuevo backend de Rust conlleva una ligera penalización en el rendimiento en comparación con la versión en ensamblador, elimina los problemas de seguridad de memoria que anteriormente provocaban errores de segmentación en su fuzzer.
Keeter enfatizó que su trabajo más reciente ha sido redactado íntegramente por humanos, distanciándose de los experimentos que realizó recientemente utilizando modelos de lenguaje de gran tamaño para asistir en la migración de código ensamblador. La transición a la palabra clave `become` permite que el compilador gestione el estado subyacente de la máquina, reemplazando eficazmente la compleja lógica manual del ensamblador por un código de alto nivel más seguro que mantiene velocidades de ejecución competitivas.
Esta implementación marca el paso más reciente en un proyecto plurianual para mejorar la eficiencia de la emulación de Uxn. El trabajo de Keeter sirve como caso de estudio sobre cómo las características de los lenguajes modernos pueden cerrar la brecha entre la seguridad de alto nivel y los requisitos de rendimiento de bajo nivel en el diseño de máquinas virtuales.