Genéricos, traits, pattern matching y concurrencia multicore por actores — con errores como valores, sin null y sin excepciones. Escrito en Rust, con una superficie de dependencias mínima y deliberada.
enum Tree { Leaf, Node(Tree, int, Tree) } fn sum(t: Tree) -> int { match (t) { Tree.Leaf => 0, Tree.Node(l, v, r) => sum(l) + v + sum(r), } } fn main() { let t = Tree.Node(Tree.Node(Tree.Leaf, 1, Tree.Leaf), 2, Tree.Leaf); print(sum(t)); // 3 }
Un solo binario, sin dependencias: el instalador detecta tu plataforma
(macOS y Linux, arm64 y x86_64), descarga la release firmada y deja ray en
~/.local/bin. En Windows, descarga el binario de la
última release.
curl -sSfL https://raw.githubusercontent.com/ray-language/raylang/main/install.sh | shVerifícalo con ray version — un binario, todo incluido: compilador, VM, LSP, formateador y gestor de paquetes.
ray new hola && cd hola && ray runray new deja un ray.toml + src/main.ray; ray dev recompila y reinicia al guardar.
Una VM de bytecode para desarrollar, un binario nativo para desplegar y un intérprete como oráculo — salida byte a byte idéntica, verificada en CI.
ray build --native transpila a Rust y compila un ejecutable:
3–4× la VM en cargas de servicio y 28–57× en cómputo puro.
Heap aislado por fibra + transferencia de propiedad en send:
multicore real sin data races, con scheduler M:N.
Sin null y sin excepciones: Result/Option
+ ?, pattern matching exhaustivo y genéricos con traits.
ray trae proyecto, paquetes, tests, formateador, docs, REPL,
LSP para el editor y un servidor MCP para agentes LLM.
HTTP/1.1 y 2, JSON, TOML, DNS, WebSocket o los clientes de BD están escritos en raylang; cada crate de Cargo entra justificado y medido.
raylang lexea, parsea, chequea y ejecuta raylang: el compilador auto-alojado se ejecuta a sí mismo sobre los motores auto-alojados.
Servidor HTTP de producción con framework estilo Express, SSR con templates
compilados y tipados (.ray.html), WebSocket y streaming.
Manifiesto ray.toml + lockfile con hashes SHA-256; el registro
acepta versiones firmadas con Ed25519 y nombres reclamados.
El binario nativo se pelea de tú a tú con Go y rustc -O, y
le gana a node en 9 de los 10 programas de cómputo del banco poliglota. Las barras
salen de la tabla real del repositorio — re-medir el banco regenera esta gráfica.
Resultados (29 jul 2026 — M3 Pro, mediana de 10 corridas, 5 de calentamiento) · el mismo output en todas las variantes, verificado por checksum · barra más larga = más lento que el binario nativo de raylang (1×), truncada en 4×.
Extensiones oficiales sobre el LSP de raylang: diagnósticos en vivo, autocompletado, hover, ir a definición, renombrar y formateo.
raylang trae de serie las dos piezas para que un modelo escriba raylang correcto — y lo verifique solo.
CLAUDE.md.ray mcp — un servidor MCP embebido en el binario:
el bucle escribir → verificar → corregir con los diagnósticos
exactos del compilador y el código del modelo confinado (fuel + heap +
plazo, en subproceso).llms.txt se sirve como resource
(raylang://llms.txt) — el cliente lo inyecta antes de la
primera línea. Guía completa en
docs/mcp.md.$ claude mcp add raylang -- ray mcp
# tools
ray_check diagnósticos exactos, posicionados
ray_run stdout + exit, confinado
ray_test el runner @test
ray_fmt fuente canónico
ray_doc firma + doc de la stdlib
# resource
raylang://llms.txt
La VM completa compilada a WebAssembly — el playground corre raylang en tu navegador, sin servidor y sin instalar nada.
Alcance: corre el lenguaje completo y la stdlib pura
con import std/* (math, json, markdown, iteradores, actores/canales…). La
stdlib con E/S (fs, process, red) compila pero devuelve
Err al ejecutar — el navegador no tiene disco ni sockets. Los paquetes del
registro (net, web, rpc, db…) y los
módulos multi-archivo no resuelven aquí: para eso, instala ray y usa
ray add.
Servidores, herramientas y hasta juegos de terminal — dogfood real, publicado en la organización.
Las librerías también: la pila de red y formatos
(net — HTTP/1.1 y 2, DNS, WebSocket, TLS —, web,
rpc, db — Postgres, Redis, SQLite) vive en
packages/,
escrita en raylang puro, y los paquetes de la comunidad se publican en el
registro con hashes y firmas.
Un fuente, tres motores: el mismo programa corre igual — byte a byte — en desarrollo, en despliegue y bajo el oráculo de validación.