Relax elimina el ciclo tradicional de 'construir-luego-ejecutar' en el desarrollo de Rust al compilar las funciones solo cuando se llaman por primera vez. Desarrollado como parte del proyecto Makepad, este entorno de ejecución JIT (Just-In-Time) permite a los desarrolladores aplicar ediciones directamente en un proceso en ejecución, manteniendo el estado del programa en lugar de requerir un reinicio completo.

Compilación bajo demanda y parcheado en caliente

A diferencia del flujo de trabajo estándar de Cargo y rustc, donde un programa debe compilarse completamente antes de su ejecución, Relax ejecuta un paquete de Cargo directamente desde el código fuente. Compila cada función la primera vez que se invoca y optimiza las funciones 'calientes' en segundo plano mientras el programa se está ejecutando.

Una característica clave de este enfoque es el parcheado en caliente. Cuando un desarrollador guarda un archivo, Relax vuelve a comprobar y recompila las funciones modificadas y las intercambia en el proceso en ejecución. Esto permite una iteración inmediata donde el estado de la aplicación —como el fotograma actual de un juego en 3D o el diseño actual de una interfaz de usuario— se preserva a través de los cambios de código.

Una demostración visual de partículas cambiando su movimiento durante un parche de función en vivo.
Una demostración de parcheado en caliente donde las partículas actualizan su comportamiento de movimiento instantáneamente sin reiniciar la aplicación.makepad.github.io

Esta imagen ilustra el concepto de parcheado en caliente donde el estado de la aplicación, como el movimiento de partículas de un juego en 3D, se preserva a través de los cambios de código.

“Relax ejecuta tu programa mientras lo construye.”

— Relax: Rust without the wait

Herramientas de desarrollo específicas para JIT

Debido a que Relax opera como un entorno de ejecución JIT, proporciona capacidades especializadas de depuración y perfilado. Incluye una función de 'pausa en caso de pánico' que detiene un hilo con su pila intacta, lo que permite a los desarrolladores leer variables locales y evaluar expresiones de Rust directamente dentro del marco del pánico.

El sistema también proporciona un 'grabador de vuelo' que guarda los últimos minutos de eventos del hilo y un comando 'why-hung' para diagnosticar bloqueos o hilos bloqueados. Para el análisis de rendimiento, ofrece una herramienta 'why-slow' que toma muestras de marcos JIT y nativos para identificar líneas calientes y árboles de llamadas.

Compensaciones y limitaciones de rendimiento

Existe un costo de rendimiento medible al usar Relax en comparación con una compilación nativa de CPU. En estado estable, el código generado por Relax es más lento que la salida de rustc --release, con una ralentización de media geométrica de 1.22x a 1.25x frente a las compilaciones nativas en 21 cargas de trabajo.

Una tabla comparativa que muestra métricas de rendimiento entre Relax y rustc.
Una tabla de comparación de rendimiento que destaca las compensaciones entre la ejecución JIT de Relax y las compilaciones estándar de rustc.makepad.github.io

La tabla proporciona puntos de datos específicos sobre la sobrecarga de rendimiento al usar el entorno de ejecución JIT de Relax en comparación con las compilaciones nativas.

El sistema también consume más memoria porque el compilador, sus cachés y cada versión de código publicada comparten el proceso del programa. Además, aunque los cuerpos de las funciones pueden parchearse en caliente, los cambios estructurales como diseños de estructuras modificados, importaciones o encabezados de rasgos todavía requieren un reinicio de la sesión.

Qué dicen los lectores de Hacker News

  • Alternativa: Un comentarista que compartió su experiencia con una herramienta diferente señaló que ha estado usando "mr boxington" para ayudar con su flujo de trabajo. comentario ↗
  • Escéptico: Un comentarista expresó escepticismo respecto al alcance del proyecto, sugiriendo que una reimplementación completa de Rust es una tarea increíblemente ambiciosa. comentario ↗
  • Escéptico: Otro usuario cuestionó la premisa del proyecto, argumentando que los tiempos de compilación de Rust no han sido un problema significativo durante una década y que difiere fundamentalmente de Lisp. comentario ↗
  • Escéptico: Un comentarista sugirió que el proyecto es un ejemplo claro de lo que los agentes de IA pueden lograr al abordar tareas ambiciosas pero conceptualmente trilladas que anteriormente requerían demasiado esfuerzo manual. comentario ↗

Resumen de opiniones del hilo de Hacker News; no son hechos verificados. Leer el debate completo ↗