Lyx no es solo otro lenguaje. Binarios nativos Linux x86_64, Linux ARM64 — sin libc, y Windows x64 sin enlazador, puro syscalls y WinAPI.
Comienza con Lyx en minutos.
# Construir compilador make build # Compilar y ejecutar programa Linux ./lyxc examples/hello.lyx -o hello ./hello # Compilación cruzada para Windows ./lyxc examples/hello.lyx -o hello.exe --target=win64 # Debug flags ./lyxc examples/hello.lyx --emit-asm # Emitir IR como pseudo-ensamblador ./lyxc examples/hello.lyx --dump-relocs # Mostrar realocaciones y símbolos ./lyxc examples/hello.lyx --no-opt # Desactivar optimizaciones IR
Salida:
Hello Lyx
Mientras otros lenguajes dependen de enormes bibliotecas estándar, Lyx habla directamente con el núcleo Linux y la API de Windows. Compilación cruzada incluida.
Una base de código, seis plataformas. Lyx soporta compilación cruzada para Linux, Windows, macOS y ESP32.
Binario ELF64 con SysV ABI. Syscalls directos para máximo rendimiento.
Raspberry Pi, Apple Silicon Linux, Cloud Servers
Binario PE32+ con convención de llamadas Windows x64. Shadow space + IAT.
Intel Macs, Mach-O binary with BSD syscalls
Apple Silicon Macs, M1/M2/M3 chips
Xtensa microcontroller, GPIO, UART, built-in syscalls
| Objetivo | Formato | Convención de Llamadas | Interfaz SO | Status |
|---|---|---|---|---|
linux |
ELF64 | SysV ABI (RDI, RSI, RDX, RCX, R8, R9) | Syscalls | Stable |
arm64 |
ELF64 | AAPCS64 (X0-X7) | Syscalls | Stable |
win64 |
PE32+ | Windows x64 (RCX, RDX, R8, R9 + Shadow Space) | kernel32.dll | Stable |
macosx64 |
Mach-O | SysV ABI | BSD Syscalls | Stable |
macos-arm64 |
Mach-O | AAPCS64 | BSD Syscalls | Stable |
esp32 |
ELF32 | Xtensa (A2-A7) | GPIO, UART | Experimental |
Nota: El parámetro --target es opcional. El compilador selecciona automáticamente el SO host como objetivo. El parámetro --arch también es opcional — la arquitectura se infiere automáticamente del objetivo.
You can also explicitly specify the architecture using --arch:
Probar binarios ARM64 en x86_64:
# Instalar QEMU sudo apt install qemu-user-static # Ejecutar binario ARM64 qemu-aarch64-static ./program
La libertad de la directeidad. En un mundo donde los lenguajes modernos a menudo arrastran runtimes enormes y dependencias complejas, Lyx vuelve a las raíces de la programación de sistemas — sin sacrificar la sintaxis moderna.
Verdadera independencia binaria. La mayoría de los lenguajes dependen de la biblioteca estándar C o enlazadores externos. Lyx rompe con esta tradición.
No estás aislado. Lyx soporta integración de bibliotecas externas cuando las necesitas.
extern fn extern fn para integración libc/libmLyx no es un lenguaje de scripting flexible. Está construido para sistemas en los que puedes confiar.
Lyx combina las fortalezas de lenguajes establecidos en algo nuevo.
Sistema de tipos completo con tipado estricto y sin casteos implícitos.
| Categoría | Tipos | Descripción |
|---|---|---|
| Entero con Signo | int8 int16 int32 int64 |
Signed 8/16/32/64-bit integers. int = int64 |
| Entero sin Signo | uint8 uint16 uint32 uint64 |
Unsigned 8/16/32/64-bit integers. uint = uint64 |
| Punto Flotante | f32 f64 |
32-bit and 64-bit IEEE 754 floating point |
| Puntero | pchar pchar? |
Non-nullable (default) and nullable pointers. pchar = null-terminated string |
| Booleano | bool |
true / false |
| Especial | void usize isize |
Retorno void, unsigned/isigned size_t |
| Arreglos | array parallel Array<T> |
Stack-allocated and SIMD-optimized heap arrays |
| Map & Set | Map<K,V> Set<T> |
Associative arrays with O(n) lookup |
| QBool | QBool |
Probabilistic boolean (0.0 to 1.0) |
Casteo explícito con el operador as.
Los tipos puntero pueden ser nullable con ?
parallel Array
¿Qué puedes construir con Lyx?
Acceso directo a hardware, drivers, componentes de sistema operativo. Control total sin sobrecarga de abstracción.
Imágenes de contenedor mínimas, microservicios, listo para Kubernetes. Binarios ultra-pequeños para máxima densidad.
Huella mínima desde 4KB, sin runtime requerida. Perfecto para entornos restringidos.
Sintaxis clara y legible inspirada en Pascal. Perfecto para aprender conceptos de programación de sistemas.
import std.math; type Point = struct { x: int64; y: int64; }; fn main(): int64 { // Struct literal with fields var p: Point := Point { x: 10, y: 20 }; // Pipe operator and standard library let result: int64 := -42 |> Abs64(); PrintInt(p.x + result); // 52 return 0; }
Funciones potentes para programación de sistemas moderna
Declare variables at top-level for global state.
Use con for compile-time constants - no stack allocation.
Quantum-like boolean type (0.0 to 1.0 probability).
Associative arrays for key-value storage.
OOP with polymorphism via Virtual Method Tables.
Built-in logging with levels: DEBUG, INFO, WARN, ERROR.
OS-level access: process, environment, time, filesystem.
No imports needed for common operations.
Del código fuente al ejecutable nativo en 8 etapas
Lyx optimizes for energy efficiency with configurable energy levels and per-function pragmas
--target-energy=<1-5>
@energy(1)
fn low_power_task() { ... }
@energy(5)
fn hot_path() { ... }
Inspecciona cualquier variable en tiempo de ejecución sin configuración. Salida directa a stderr.
Coloca Inspect() en cualquier parte de tu código para depuración instantánea.
fn main(): int64 { var count: int64 := 42; var isActive: bool := true; var message: pchar := "Hello, Debug!"; // Inspect any variable at runtime Inspect(count); // Outputs to stderr Inspect(isActive); Inspect(message); return 0; }
Así es como Inspect() muestra varios tipos:
=== count === Type: int64 Value: 42 === isActive === Type: bool Value: true === message === Type: pchar Value: Hello, Debug!
Inspect detecta y formatea automáticamente:
10 reglas incorporadas te ayudan a escribir código más limpio y seguro desde el inicio.
El linter integrado verifica tu código en busca de problemas comunes:
Múltiples pasadas de optimización producen código más rápido y pequeño.
Evalúa expresiones constantes en tiempo de compilación.
Elimina cálculos redundantes.
Elimina código inalcanzable y funciones no usadas.
Reemplaza copias por uso directo de valores.
Reemplaza operaciones costosas por más baratas.
Optimizaciones locales: operaciones identidad, movimientos redundantes.
Inlinia funciones pequeñas para reducir sobrecarga de llamadas.
Código más pequeño = ejecución más rápida = menos energía
Bibliotecas incorporadas completas — sin dependencias externas.
Clases con herencia, constructores, destructores. Asignación en heap con new/dispose. super para llamadas a clase base.
class extends para Herencia Simplenew ClassName(args) con constructordispose obj llama Destroy()super.method() para clase baseLinux x86_64, Linux ARM64 y Windows x64 desde una base de código. Un compilador, tres plataformas.
Import/Export completo con Biblioteca Estándar.