El gestor de paquetes
Por que un gestor de paquetes?
A medida que los proyectos crecen, necesitas una forma de organizar el codigo en modulos, compartir bibliotecas y garantizar compilaciones reproducibles. Nyx incluye un gestor de paquetes integrado que maneja todo esto a traves de un unico archivo de configuracion: nyx.toml.
No se requieren herramientas externas. Ni npm, ni pip, ni cargo que instalar por separado. Es parte del compilador.
El formato nyx.toml
Cada proyecto Nyx tiene un archivo nyx.toml en su raiz. Describe el proyecto y sus dependencias:
# nyx.toml [package] name = "myapp" version = "0.1.0" main = "src/main.nx" description = "A web API for managing tasks" [dependencies] json = "*" http = "https://github.com/nyxlang-dev/http"
La seccion [package] describe tu proyecto:
| Clave | Requerida | Descripcion |
|---|---|---|
name | Si | Nombre del proyecto (se usa para el binario de salida) |
version | Si | Version semantica (ej. "0.1.0") |
main | No | Archivo de entrada (por defecto: src/main.nx) |
description | No | Descripcion breve del proyecto |
no_gc | No | Establecer a true para modo sistemas sin recolector de basura |
La seccion [dependencies] lista las bibliotecas de las que depende tu proyecto. Cada dependencia se obtiene via git clone en un directorio packages/.
Crear un proyecto con nyx init
La forma mas rapida de iniciar un nuevo proyecto:
$ mkdir my-api $ cd my-api $ nyx init
Esto crea dos archivos:
my-api/ nyx.toml ← configuracion del proyecto src/ main.nx ← punto de entrada
El nyx.toml generado usa el nombre del directorio como nombre del proyecto, y src/main.nx contiene un programa hola-mundo.
Compilar y ejecutar
nyx build lee nyx.toml, resuelve las dependencias, compila el proyecto y produce un binario nativo:
$ nyx build Resolving dependencies... Compiling my-api v0.1.0 Built: my-api
Para compilaciones optimizadas, agrega el flag --release:
$ nyx build --release
Para compilar y ejecutar en un solo paso:
$ nyx run
Tras una compilacion exitosa, se escribe un archivo nyx.lock que registra las versiones exactas de todas las dependencias. Haz commit de este archivo en el control de versiones para compilaciones reproducibles.
Agregar dependencias
El comando nyx add agrega un paquete del registro por defecto:
$ nyx add json
Esto clona el paquete en packages/json/ y lo agrega a nyx.toml. Para agregar desde una URL personalizada:
$ nyx add mylib --from https://github.com/user/mylib
Importar desde paquetes
Despues de agregar un paquete, importa sus modulos usando el nombre del paquete como prefijo:
// Despues de: nyx add nyx-db import "nyx-db/src/query" fn main() { db_query("CREATE TABLE users (id INT PRIMARY KEY, name TEXT)") db_query("INSERT INTO users VALUES (1, 'Alice')") let rows: Array = db_query_rows("SELECT * FROM users") }
El compilador resuelve import "nyx-db/src/query" a packages/nyx-db/src/query.nx. Los imports internos del paquete (como import "src/store") se reescriben automaticamente para que las dependencias transitivas se resuelvan correctamente.
Inspeccionar un proyecto
El comando nyx info imprime los metadatos del proyecto:
$ nyx info name: my-api version: 0.1.0 main: src/main.nx description: A web API for managing tasks gc: enabled
Ejemplo practico
Construyamos un proyecto pequeno desde cero:
$ mkdir greeter && cd greeter $ nyx init
Edita src/main.nx:
fn greet(name: String) -> String { return "Hello, " + name + "!" } fn main() { let args: Array = get_args() if args.length() > 1 { let name: String = args[1] println(greet(name)) } else { println(greet("World")) } }
Compilar y ejecutar:
$ nyx run Hello, World! $ nyx build $ ./greeter Alice Hello, Alice!
Resumen
nyx.tomldescribe el proyecto y sus dependencias.nyx initgenera la estructura de un nuevo proyecto.nyx buildresuelve dependencias y compila a un binario nativo.nyx runcompila y ejecuta en un solo paso.nyx add <pkg>agrega una dependencia del registro o de una URL personalizada.nyx.lockregistra las versiones exactas para compilaciones reproducibles.