Los backends de V: de la transpilación a C a los nuevos backends nativos SSA

Una de las decisiones de diseño más particulares de V es que, en su backend clásico y todavía por defecto, no genera código máquina directamente: transpila a C, y deja que un compilador C real (Clang, GCC o TCC) haga el trabajo pesado de optimización y generación de binario. Es una decisión pragmática, apoyarte en décadas de trabajo de optimización de los compiladores C en vez de reinventar esa rueda, pero también explica buena parte de las dudas de rendimiento que cubrimos en la noticia sobre la versión 0.5.1.

El backend C clásico

v programa.v              // compila usando el compilador C por defecto del sistema
v -cc gcc programa.v      // fuerza GCC
v -cc clang programa.v    // fuerza Clang
v -cc tcc programa.v      // usa TCC, mucho más rápido para compilar, menos para el binario final

La elección de compilador C es también una elección de compromiso: TCC compila casi instantáneamente y es ideal en desarrollo, mientras que Clang y GCC tardan más pero aplican optimizaciones agresivas que TCC no tiene, así que para binarios de producción la recomendación habitual es Clang o GCC con optimizaciones activadas.

Los nuevos backends «v2»

La versión 0.5.1, publicada el 9 de marzo de 2026, introdujo tres piezas nuevas bajo el paraguas de lo que el proyecto llama arquitectura v2:

  • cleanc: una reescritura del backend que traduce a C, con código generado más limpio que el backend clásico. Según las notas de la versión, ya es capaz de autocompilarse («self-host»), es decir, el propio compilador de V puede construirse a sí mismo usando este backend.
  • ssa/arm64: backend nativo basado en SSA (Static Single Assignment, la representación intermedia que usan la mayoría de compiladores modernos) que genera código máquina ARM64 directamente, sin pasar por C.
  • ssa/amd64: el mismo enfoque para arquitecturas x86-64.

La diferencia entre transpilar a C y generar código máquina vía SSA no es solo técnica, es también de independencia: con los backends SSA nativos, V deja de depender de tener un compilador C instalado en el sistema para producir un binario, algo que hasta ahora era un requisito silencioso pero real.

¿Por qué importa esto para el rendimiento?

Todos los benchmarks disponibles hasta ahora, incluidos los que citamos en la noticia sobre la 0.5.1, se hicieron contra V 0.4.11, la última versión antes de que estos backends existieran. Los propios mantenedores del proyecto han reconocido en discusiones de GitHub que las implementaciones de V en baterías de benchmarks externas «todavía no están bien optimizadas en comparación con las de otros lenguajes», así que hay dos variables mezcladas: la madurez del backend y la calidad del código de ejemplo usado en los benchmarks. Con los backends SSA todavía en desarrollo activo, hoy no existe ningún benchmark independiente y actualizado que permita separar esas dos variables.

Un dato de contexto: los backends nativos no partían de cero limpio

Vale la pena un poco de memoria histórica. V ya tenía un backend nativo x64 experimental desde hace años, y análisis independientes de versiones anteriores (como v0.4.6) documentaron fallos concretos en construcciones básicas: arrays y structs que directamente no funcionaban con ese backend. Los backends SSA de 0.5.1 no son una continuación de aquel código, son una reescritura completa, así que ese historial no predice necesariamente el resultado, pero sí explica por qué el proyecto ha sido cauto en las notas de la versión, limitándose a decir que cleanc «ya puede autocompilarse» en vez de anunciar el backend nativo como listo para producción.

Qué mirar de aquí en adelante

Si te interesa evaluar V para algo más que experimentar, el indicador a vigilar no es la versión del lenguaje sino qué backend estás usando para compilar. Un v -cc clang contra el backend C clásico de hoy es una historia de rendimiento; cuando los backends SSA nativos se estabilicen (no hay fecha comprometida en el roadmap), la historia puede cambiar bastante. En el último artículo de esta serie vamos a poner a V al lado de otro aspirante a sustituir a C con una filosofía bien distinta: Zig.

Imagen: Pexels / Leonid Altman

COMPARTE ESTE ARTÍCULO

COMPARTIR EN FACEBOOK
COMPARTIR EN TWITTER
COMPARTIR EN LINKEDIN
COMPARTIR EN WHATSAPP