Un lenguaje. Ocho productos. Cero dependencias.
Lenguaje compilado self-hosting con rendimiento nativo y un ecosistema web completo.
Sintaxis limpia y familiar. Compila a codigo nativo via LLVM.
fn handle_usuario(req: Request) -> Response { let id: String = req.params.get("id") return response_json(200, "{\"id\": \"" + id + "\"}") } fn main() { let app: App = app_new() app_use(app, mw_cors) app_get(app, "/usuarios/{id}", handle_usuario) serve_app(app, 3000, 64) }
$ redis-cli -p 6382 > CREATE TABLE eventos (id INTEGER PRIMARY KEY, nombre TEXT) OK > INSERT INTO eventos VALUES (1, 'deploy') OK > SELECT nombre FROM eventos WHERE id = 1 1) "deploy"
$ redis-cli -p 6381 > ENQUEUE tareas '{"tarea": "enviar_email", "a": "alice@ejemplo.com"}' "msg_0001" > DEQUEUE tareas 1) "msg_0001" 2) "{\"tarea\": \"enviar_email\"}" > ACK tareas msg_0001 OK
fn handle_request(method: String, path: String, headers: Array, body: String) -> Array { let hdrs: Array = ["content-type", "application/json", "server", "nyx-http2"] return [200, hdrs, "{\"ok\": true, \"protocolo\": \"h2c\"}"] } fn main() -> int { h2_serve(3004, 4, handle_request) return 0 }
Todo lo que sirve este sitio web esta escrito en Nyx.
Compilado a codigo maquina via LLVM. Compite con C.
$ curl -sSf https://nyxlang.com/install.sh | sh
Linux (x86_64, ARM64) · Requiere Clang · ~10 segundos
Verificar: $ nyx --version → Nyx v0.12.0
$ echo 'fn main() { print("Hola!") }' > hola.nx $ nyx run hola.nx Hola!
$ nyx init miapp $ cd miapp && nyx run Hola desde miapp!
import "std/http" fn serve_req(request: Array) -> String { return http_response(200, "Hola desde Nyx!") } fn main() { http_serve_mt(8080, 4, serve_req) }
$ nyx run servidor.nx # Abrir http://localhost:8080
import "std/web" fn get_users(req: Request, resp: Response) { response_json(resp, "[{\"name\": \"Alice\"}]") } fn main() { let app: App = app_new() app_get(app, "/api/users", get_users) serve_app(app, 3000, 16) }
fn main() { let conn: int = tcp_connect("localhost", 6380) tcp_write(conn, "SET nombre Alice\r\n") let resp: String = tcp_read(conn) print(resp) // +OK tcp_close(conn) }
fn main() { let content: String = read_file("datos.csv") let lines: Array = content.split("\n") var count: int = 0 for line in lines { if line.contains("error") { print("Encontrado: " + line) count = count + 1 } } print("Total: " + int_to_string(count)) }
fn work(id: int, ch: Map) -> int { print("Worker " + int_to_string(id)) channel_send(ch, id * 10) return 0 } fn main() { let ch: Map = channel_new(2) thread_spawn(fn() -> int { return work(1, ch) }) thread_spawn(fn() -> int { return work(2, ch) }) let r1: int = channel_recv(ch) let r2: int = channel_recv(ch) print(int_to_string(r1) + ", " + int_to_string(r2)) }
31 capítulos · Bilingüe EN/ES · De lo básico a construir bases de datos
Todo lo que necesitas para crear, compilar, ejecutar y compartir proyectos Nyx.
$ curl -sSf https://nyxlang.com/install.sh | sh Nyx installed successfully!
Se instala en ~/.nyx/ y enlaza nyx a ~/.local/bin/nyx. Agrega el PATH a tu perfil de shell automáticamente.
$ nyx update Updating Nyx... Rebuilding compiler... Rebuilding package manager... Nyx updated successfully. nyx 0.12.0
Descarga el código más reciente y recompila. Ejecuta esto en cualquier momento para obtener nuevas funcionalidades y correcciones.
$ nyx uninstall Nyx has been uninstalled. Removed: ~/.nyx/ Removed: ~/.local/bin/nyx
Elimina Nyx completamente de tu sistema. Limpio y reversible.
$ mkdir miapp && cd miapp $ nyx init Initialized project: miapp Created: nyx.toml, src/main.nx Build: nyx build Run: nyx run
nyx init crea dos archivos: nyx.toml (configuración del proyecto) y src/main.nx (punto de entrada).
miapp/
nyx.toml # Configuración del proyecto
src/
main.nx # Punto de entrada (fn main)
packages/ # Dependencias (se crea automáticamente)
nyx.lock # Archivo lock (generado automáticamente)
# Todo proyecto Nyx tiene un nyx.toml en su raíz [package] name = "miapp" # Nombre del proyecto (nombre del binario) version = "0.1.0" # Versión semántica main = "src/main.nx" # Archivo de entrada description = "..." # Descripción (opcional) no_gc = false # Opcional: modo sistemas (sin GC) [dependencies] nyx-kv = "*" # Desde el registro (github.com/nyxlang-dev/) mylib = "https://..." # Desde URL personalizada
$ nyx build # Compilar (debug) Building: miapp v0.1.0 Compiling: src/main.nx ✓ Built: miapp $ nyx build --release # Compilar con optimizaciones (-O2) $ ./miapp # Ejecutar el binario compilado
$ nyx run # Compilar + ejecutar (dentro de un proyecto) Hola desde miapp!
$ nyx run hola.nx # Compilar y ejecutar un archivo suelto Hola! $ nyx hola.nx # Forma corta — mismo resultado Hola!
No necesita nyx.toml. Perfecto para scripts y experimentos rápidos.
$ nyx add nyx-kv Adding package: nyx-kv Fetching: https://github.com/nyxlang-dev/nyx-kv Updated nyx.toml Package 'nyx-kv' added.
Los paquetes se descargan de github.com/nyxlang-dev/<nombre> por defecto y se guardan en packages/.
$ nyx add mylib --from https://github.com/user/mylib Package 'mylib' added.
Usa --from para descargar desde cualquier repositorio Git.
$ rm -rf packages/ # Borrar paquetes locales $ nyx build # Se descargan automáticamente Resolving: nyx-kv Fetched: nyx-kv ✓ Built: miapp
Las dependencias en nyx.toml se resuelven automáticamente al compilar. El archivo nyx.lock registra las versiones exactas.
| Comando | Descripción |
|---|---|
nyx init | Crear un nuevo proyecto (nyx.toml + src/main.nx) |
nyx build | Compilar el proyecto |
nyx build --release | Compilar con optimizaciones |
nyx run | Compilar y ejecutar el proyecto |
nyx run archivo.nx | Compilar y ejecutar un archivo suelto |
nyx add <pkg> | Agregar una dependencia del registro |
nyx add <pkg> --from <url> | Agregar una dependencia desde una URL |
nyx info | Mostrar detalles del proyecto |
nyx update | Actualizar Nyx a la última versión |
nyx uninstall | Eliminar Nyx del sistema |
nyx --version | Mostrar versión instalada |
31 capitulos cubriendo desde lo basico hasta sistemas en produccion. Bilingue EN/ES.
Licencia Apache 2.0. Contribuciones bienvenidas.