3 min de lectura

Julia incorpora UnifiedIR en un ambicioso borrador de compilador

Una solicitud de extracción en borrador para Julia añade UnifiedIR, una única representación intermedia diseñada para abarcar el parseo, el lowering, la inferencia y la optimización sin dependencias.

Imagen: Hacker News

Una solicitud de extracción en borrador para Julia introduce UnifiedIR, una única representación intermedia pensada para abarcar la canalización del compilador y compiladores externos. El trabajo, publicado por Keno el 11 de julio de 2026, describe una única estructura de datos IR compartida para sintaxis, lowering, inferencia y optimización, sin dependencias e integrada tempranamente en Base.

En el núcleo hay una tabla plana de sentencias con regiones híbridas sobre una capa de almacenamiento compartida llamada AttrGraph, además de un verificador, un printer/parser, un intérprete de referencia y una compactación tipo GC mediante compact_graph! y collect_syntax!. La propuesta integra UnifiedIR en los paquetes de nivel superior de Julia, lo incorpora al bootstrap de Base inmediatamente antes de JuliaSyntax y reconstruye sysbase cuando cambian sus fuentes. En esa configuración, SyntaxGraph de JuliaSyntax se ejecuta sobre UnifiedIR.

El borrador también consolida varios conceptos existentes en un único sustrato:

  • Un núcleo de almacenamiento: SyntaxGraph envuelve a UnifiedIR.AttrGraph
  • Una interfaz de alto nivel (porcelain): SyntaxTree{Attrs} se convierte en UnifiedIR.Tree{SyntaxGraph{Attrs}}
  • Un registro de tipos: los dialectos reclaman bloques contiguos de opcodes en un registro compartido

Los IDs de dialecto reservados se fijan para la pila de arranque: core=0, JuliaSyntax=1, JuliaLowering=2 y formatter=3. La numeración se describe como determinista para que las constantes precompiladas sigan siendo válidas.

Ruta de compilación unificada y trabajo de optimización

La solicitud de extracción añade JuliaLowering.UnifiedBackend como un backend aditivo que mantiene la primera mitad del lowering sin cambios —incluyendo la expansión de macros, desugarización, análisis de ámbitos y conversión de closures— pero emite formas de región estructurada de UnifiedIR en lugar de IR lineal basado en goto. Cada sentencia emitida lleva una entrada :source que apunta de vuelta al cursor de sintaxis originario, lo que permite que las comprobaciones y diagnósticos remitan el IR optimizado al texto fuente exacto.

Recomendado

Biren presenta supernodo de IA con 1,024 aceleradores

En el lado del proveedor, solo en modo paquete, el borrador incluye:

  • Convertidores entre CodeInfo y UnifiedIR
  • Un puerto de inferencia que corre de forma nativa sobre UnifiedIR
  • Pases de optimizador incluyendo SROA, inlining vía splice_body!, ADCE, structurization y cell promotion
  • Una API de Queries
  • Activación mediante el mecanismo de reemplazo del compilador de Julia

Según la PR, el puerto de inferencia fue validado diferencialmente con un 100% de tipos de retorno iguales o mejores respecto a la canalización estándar en MethodInstances de sesión.

La configuración de pruebas y demo es inusualmente extensa para un borrador. La PR enlaza UnifiedIR/test con el arnés de pruebas de Julia, añade UnifiedIR/demo/provenance_demo.jl e incluye Compiler/test/unified/. También añade una entrada en NEWS.md bajo mejoras del compilador/tiempo de ejecución.

Commits posteriores en el mismo borrador mejoran las herramientas alrededor del nuevo IR. typed_ir ahora muestra por defecto el listado completo de print_ir bajo text/plain, con truncamiento optativo mediante display_maxlines!(n) u IOContext(io, :ir_maxlines => n). Un nuevo macro @code_unified refleja a @code_typed, y los tipos lattice de Core.Const ahora se representan como Const(value).

El borrador también renombra el terminador de valor de región de yield a result, explícitamente para evitar conflicto con el significado existente de suspensión de tareas de Base.yield en Julia, sin cambio semántico.

Gran parte del trabajo posterior se centra en cell-promotion y la construcción SSA. Un commit indica que el tiempo de pared del optimizador sobre el corpus baja alrededor de un 18%, y que typed_ir(gcd, (Int,Int)) conserva cero operaciones de cell después de la promoción. Otro indica que las violaciones al stock-oracle en el corpus Base/stdlib caen de 38 cuerpos a 16, mientras que la eliminación de operaciones de cell en el corpus sube del 20% al 55%. La PR también describe un fuzzer estructurado, CellFuzz, que ejecutó 10k casos sin errores, además de un benchmark de completitud sobre un corpus de 600 cuerpos y 10k casos de fuzz.

La solicitud de extracción sigue marcada como borrador.

Marcus Vance

Enterprise Editor

Marcus follows the money. He covers enterprise software, cloud architecture, and the tectonic shifts in Big Tech strategy. He translates dense earnings calls and complex M&A activity into actionable insights about where the industry is actually heading. If a tech giant makes a silent pivot, Marcus is usually the first to notice.

vía Hacker News

// Sigue leyendo