Arquitectura
HyperEZ es un lenguaje compilado a bytecode que se ejecuta en una máquina virtual de pila, todo dentro de un único ejecutable escrito en C++20 (hyper). Este documento es el mapa; los detalles están en el compilador, la máquina virtual y el rendimiento.
Del texto a la ejecución
flowchart LR
A[archivo .hz] --> L[Lexer<br/>tokens]
L --> P[Parser<br/>árbol sintáctico]
P --> S[Analizador<br/>nombres y tipos]
S --> C[Generador<br/>bytecode]
C --> V[Máquina virtual<br/>ejecución]
S -. diagnósticos .-> D[errores y avisos]
S -. símbolos .-> LSP[servidor de lenguaje<br/>VS Code]
- Lexer (
src/lang/syntax/lexer.cpp): convierte el texto en tokens (números, textos con sus partes${}, palabras clave, operadores) y guarda los comentarios (los///son documentación). - Parser (
src/lang/syntax/parser.cpp): descenso recursivo que construye el árbol sintáctico (ast.h). Se recupera de los errores para seguir analizando el resto del archivo, y traduce el azúcar sintáctico (por ejemplo, la desestructuración) a construcciones básicas. - Analizador (
src/lang/sema/analyzer.cpp): resuelve cada nombre (local, global, de otro módulo, integrado), deduce y comprueba los tipos (tipado gradual), y registra símbolos, ámbitos y referencias para el editor. Aquí nacen casi todos los mensajes de error en español. - Generador de código (
src/lang/compiler/codegen.cpp): recorre el árbol ya analizado y emite el bytecode de cada función (bytecode.h), con optimizaciones de mirilla (peephole). - Máquina virtual (
src/lang/vm/): ejecuta el bytecode con una pila de valores, un recolector de basura, fibras paraasync/awaity eventos.
Todo el proceso tarda unos milisegundos: hyper programa.hz arranca, compila y ejecuta un programa pequeño en menos de 20 ms.
Carpetas del código
src/
core/ utilidades comunes: texto, UTF-8, archivos, consola, procesos
lang/
syntax/ lexer, parser, árbol sintáctico y formateador (hyper fmt)
sema/ analizador (tipos, nombres) y diagnósticos
compiler/ generador de bytecode, lista de instrucciones y desensamblador (hyper bytecode)
vm/ máquina virtual: valores, objetos, GC, intérprete, fibras, eventos
stdlib/ biblioteca nativa, un archivo por área
builtins.cpp funciones globales, texto, listas, mapas, JSON, tareas, eventos
extra.cpp pruebas, consola, File y System básicos, métodos extra
system.cpp Process, Path, Time, más File y System
binary.cpp Bytes, Hash, Base64, bases numéricas
regex.cpp Regex
net.cpp Http
matrix.cpp Matrix (también inversa, determinante y sistemas de ecuaciones)
image.cpp Image (dibujo, texto, filtros) y compresión de Bytes
server.cpp Http.serve y Process.start
more.cpp matemáticas, textos, colecciones, números, fechas y JSON en archivos (0.7)
mathtypes.cpp Vec2, Vec3, Color
prelude/ preludio escrito en HyperEZ (awaitAll, awaitAny...)
lib/ bibliotecas escritas en HyperEZ: ai, stats, csv, cli, x86, web, html, db, audio,
collections, algo, template, markdown, ini, log, svg, zip
editor/ HyperEZ Editor (Windows): editor clásico que enlaza la misma biblioteca del lenguaje
tools/
cli/ la orden hyper y sus plantillas de proyecto
repl/ consola interactiva
watch/ modo watch
lsp/ servidor de lenguaje (Language Server Protocol)
platform/ integración con Windows (registro, accesos) y Linux (xdg)
packaging/ instalador de Windows, paquetes de Linux y macOS, iconos
editors/vscode/ extensión de VS Code
tests/ pruebas (lenguaje, bibliotecas, juegos, errores, consola)
examples/ ejemplos por áreas
docs/ esta documentación
tools/ scripts de mantenimiento (versión, documentación generada)
Un solo ejecutable
hyper contiene el compilador, el formateador, el desensamblador, la máquina virtual, la biblioteca estándar, las bibliotecas .hz (incrustadas al compilar con cmake/embed_hz.cmake), la consola interactiva, el modo watch y el servidor de lenguaje. En Windows se enlaza de forma estática: no depende de ninguna DLL. hyperez-editor.exe enlaza la misma biblioteca hzlang (lexer, analizador, catálogo de la API y formateador) y lanza el hyper.exe que tiene al lado para ejecutar.
El servidor de lenguaje
hyper lsp habla el protocolo LSP por la entrada y salida estándar. Por cada documento abierto ejecuta lexer, parser y analizador (sin generar código) y responde con los diagnósticos, autocompletado, hover, definición, referencias, renombrado y esquema a partir de los símbolos y referencias que guarda el analizador. La extensión de VS Code es un cliente fino sobre él, así que cualquier editor con soporte LSP puede usarlo.
HyperEZ