Índice

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:

ClaveRequeridaDescripcion
nameSiNombre del proyecto (se usa para el binario de salida)
versionSiVersion semantica (ej. "0.1.0")
mainNoArchivo de entrada (por defecto: src/main.nx)
descriptionNoDescripcion breve del proyecto
no_gcNoEstablecer 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

← Anterior: Caso de estudio — Como se construyo nyx-kv Siguiente: APIs web con nyx-serve →