POO
Async
LSP+DAP
WASM
Natívo
StdLib
Multiplatform
Supabase
FastAPI
v0.18.0
0 0
Paquetes

Introducción

Alvz es un lenguaje de programación de alto rendimiento basado en Python, diseñado para ser intuitivo y potente, con palabras clave en español. Permite crear aplicaciones conectadas a la nube y generar contenido web de forma nativa.

¿Por qué Alvz?
Alvz elimina la barrera del idioma y simplifica tareas complejas como la conexión a bases de datos o el manejo de archivos en un solo comando.

v0.18.0 — Compilador WASM con 40+ opcodes nativos + 42 host calls. Compatible con wasmtime 45. Memoria compartida entre módulo y host functions. StdLib (13 módulos: matematicas, cadenas, http, sqlite, json, csv, etc.), Package Manager (30 paquetes), LSP + DAP reales, 83 opcodes en VM. 626 tests, 0 fallos.

Plan de Aprendizaje Paso a Paso 🚀

Domina Alvz desde cero con este camino guiado, sin prisa pero sin pausa. Cada lección explica qué harás, los conceptos clave que aprenderás y un reto para practicar. ¡Tú pones el ritmo!

🌱

1. Primeros pasos

Qué harás: Escribir tu primer programa y entender cómo funciona Alvz.

Conceptos: Instalación, terminal, imprimir, variable, números y texto.

Reto: Crea un programa que imprima tu nombre y edad.

Empezar →
🧠

2. Toma decisiones

Qué harás: Hacer que tu programa reaccione según condiciones.

Conceptos: si, sino, comparaciones (==, <, >), verdadero, falso.

Reto: Pide una edad al usuario y dile si es mayor o menor de edad.

Ver más →
🔄

3. Repite sin aburrirte

Qué harás: Automatizar tareas repetitivas con bucles.

Conceptos: mientras, para, cada, rangos (de 1 a 10).

Reto: Imprime la tabla de multiplicar del 7 del 1 al 10.

Ver más →
📦

4. Organiza tu código

Qué harás: Crear bloques reutilizables con funciones.

Conceptos: funcion, parámetros, retornar, ámbito de variables.

Reto: Escribe una función que reciba un número y devuelva si es par o impar.

Ver más →
🗂️

5. Colecciones de datos

Qué harás: Guardar múltiples valores en listas y diccionarios.

Conceptos: [], {}, índices, longitud, agregar, bucles cada.

Reto: Crea una lista de compras, agrega 3 items, y muestra cada uno.

Ver más →
🏗️

6. Crea tus propios objetos

Qué harás: Modelar cosas del mundo real con clases.

Conceptos: clase, nuevo, inicializar(), self, métodos.

Reto: Crea una clase Libro con título, autor y un método mostrar().

Ver más →
👪

7. Herencia y más POO

Qué harás: Reutilizar código con herencia y usar getters/setters.

Conceptos: clase ... de ..., super, instancia, propiedad, estatico.

Reto: Crea VehiculoCoche que herede y sobrescriba un método.

Ver más →
🔧

8. Librería Estándar

Qué harás: Usar módulos ya hechos para ahorrar tiempo.

Conceptos: importar, matematicas, cadenas, colecciones, fecha.

Reto: Importa matematicas y calcula el factorial de un número.

Ver más →
📂

9. Archivos y JSON

Qué harás: Leer y escribir archivos, guardar datos en JSON.

Conceptos: sistema, archivo_leer, archivo_escribir, json.

Reto: Guarda una lista de tareas en un archivo JSON y luego léela.

Ver más →
🌐

10. Consumir APIs

Qué harás: Obtener datos de internet con peticiones HTTP.

Conceptos: importar "http", http_obtener, http_json, JSON.

Reto: Obtén datos del clima de una API pública y muestra la temperatura.

Ver más →

11. Async — haz varias cosas a la vez

Qué harás: Ejecutar tareas en paralelo sin bloquear tu programa.

Conceptos: funcion async, aguardar, esperar, concurrencia real.

Reto: Lanza 3 tareas async que esperen diferente tiempo y observa el orden.

Ver más →
📦

12. Paquetes de terceros

Qué harás: Instalar y usar paquetes del registro público.

Conceptos: alvz install, alvz search, registro de paquetes, dependencias.

Reto: Instala el paquete math y usa fibonacci(10).

Ver más →
🐍

13. SQLite — base de datos local

Qué harás: Guardar datos persistentes con SQLite sin instalar nada.

Conceptos: sqlite, base_abrir, base_crear_tabla, base_insertar, base_consultar.

Reto: Crea una tabla de contactos, inserta 3 y muéstralos.

Ver más →
🚀

14. Compila y distribuye

Qué harás: Convertir tu programa en un .exe o .wasm para compartirlo.

Conceptos: alvz build, --nuitka, --wasm, ejecutable standalone.

Reto: Compila tu juego de adivinanza a .exe y pásalo a un amigo.

Ver más →
🌍

15. Web con FastAPI

Qué harás: Crear un servidor web y una API REST desde Alvz.

Conceptos: iniciar_servidor, rutas, GET/POST, parámetros de ruta, JSON.

Reto: Crea una API que reciba un nombre y responda "Hola, {nombre}!".

Ver más →
☁️

16. Supabase — tu app en la nube

Qué harás: Conectar tu app a una base de datos en la nube real.

Conceptos: supabase_insertar, supabase_consultar, PostgreSQL, API key.

Reto: Crea un contador de visitas que se guarde en Supabase.

Ver más →
💎

17. Tipado estático

Qué harás: Hacer tu código más seguro y predecible con tipos.

Conceptos: : numero, : texto, : booleano, --check-types, type checker.

Reto: Anota tipos en una función suma y verifica que funcione.

Ver más →
🧪

18. Pruebas unitarias

Qué harás: Asegurarte de que tu código funciona con tests automáticos.

Conceptos: importar "testing", describir, probar, afirmar_igual, alvz test.

Reto: Escribe tests para una función que valide emails.

Ver más →
🎯

19. Lambda y funcional

Qué harás: Escribir funciones anónimas y operar listas al estilo funcional.

Conceptos: funcion() {} como expresión, .mapear(), .filtrar(), callbacks.

Reto: Toma [1,2,3,4,5], filtra los pares y duplícalos con una lambda.

Ver más →
🛠️

20. Herramientas CLI

Qué harás: Usar el formateador, fixer, benchmarks y scaffolding de Alvz.

Conceptos: alvz fmt, alvz fix, alvz bench, alvz nuevo, alvz debug.

Reto: Genera un proyecto completo con alvz nuevo proyecto mi_app.

Ver más →
💡 Consejo

No necesitas seguir el orden al pie de la letra. Si algo te aburre, salta al siguiente tema y vuelve después. Lo importante es escribir código todos los días, aunque sean 10 minutos. ¡La práctica hace al maestro!

🧪 Practica cada lección

Selecciona un reto, escribe tu solución en Alvz y presiona Ejecutar para ver el resultado. Cuando creas que está bien, presiona Verificar.

Selecciona un reto para ver su descripción.
Salida
Presiona "Ejecutar" para ver el resultado aquí.

Instalación

Alvz funciona en Windows, Linux y macOS. Hay varias formas de instalarlo.

Windows — Instalador

Descarga el ZIP con el instalador y la extensión de VS Code.

Descargar Instalador (.zip)

Linux / macOS / Windows — vía PyPI

Alvz está disponible en PyPI (Python Package Index), el repositorio oficial de paquetes Python. Instálalo con un solo comando:

pip install alvz-lenguaje

# Con soporte WebAssembly (wasmtime)
pip install alvz-lenguaje[wasm]

# Con servidor web (FastAPI)
pip install alvz-lenguaje[web]

Verificar instalación

$ alvz --version
Alvz v0.18.0

Extensión para VS Code

Mejora tu experiencia de desarrollo con resaltado semántico, autocompletado real y más de 60 snippets inteligentes para Alvz.

v1.6.0 — WASM 40+ opcodes + Resaltado semántico + Autocompletado real

Resaltado semántico: Variables, funciones, clases, keywords, strings, números, builtins, propiedades y comentarios se colorean según su rol en el código, no solo por sintaxis.

Autocompletado real: Sugiere keywords, estructuras completas vía snippets, funciones de la StdLib con parámetros, constantes y módulos stdlib al escribir importar "...".

Snippets para Supabase, API REST, CRUD, archivos, JSON, async/paralelo, POO, menús, validación, fecha/hora, regex, listas, errores y más.

Instalación

Disponible directamente en el Marketplace de VS Code. Dos formas de instalar:

Opción 1 — Desde el Marketplace:

  1. Abre VS Code
  2. Ve a la sección de Extensiones (Ctrl+Shift+X)
  3. Busca "Alvz en Español"
  4. Haz clic en Instalar

Opción 2 — Desde el navegador:

  1. Visita marketplace.visualstudio.com
  2. Haz clic en Install

Nota: También puedes descargar el archivo .vsix desde el instalador (.zip) e instalarlo manualmente si no tienes acceso al Marketplace.

Características

Snippets incluidos

CategoríaPrefixDescripción
Supabasesupabase, supainsert, supacrudConexión, inserción y API CRUD con Supabase
API/FastAPIservidor, api, apijsonServidor REST, rutas GET/POST, persistencia JSON
CRUDcrudCRUD completo en memoria (crear, listar, actualizar, eliminar)
Archivosleerarchivo, escribirarchivoLectura y escritura de archivos
JSONjsonenc, jsondecCodificar y decodificar JSON
HTTPenviarwebEnviar peticiones HTTP POST
AsyncasyncparEjecución paralela de corutinas
POOclaseh, persona, propiedad, estaticoHerencia, propiedades, métodos estáticos
Validaciónvalidaremail, validarreqValidación de email y campos requeridos
Fecha/Horafecha, timestampFormateo de fecha y timestamp Unix
Listasfiltrar, mapear, ordenar, contarOperaciones funcionales sobre listas
Textodividir, unir, regex, reemplazarManipulación de cadenas
Erroresintentar, lanzarBloques try-catch
MenúsmenuMenú interactivo por consola
Utilidadesleer, azar, tipo, potencia, salida, baseEntrada, aleatorios, tipos, matemáticas, script base

Glosario de Palabras Reservadas

En Alvz, el código se lee casi como una oración en español. Aquí tienes las palabras que el lenguaje usa para entenderte:

Categoría Palabras Clave Propósito
Lógica si, sino, mientras, para, cada Controlan el flujo del programa.
Conectores de, a, en Ayudan a leer bucles: para i de 1 a 10.
Definiciones variable, funcion, clase, nuevo, super, propiedad, estatico Crean nuevos elementos y acceden a la clase padre.
Valores verdadero, falso, nulo Valores booleanos y nulo.
Lógica y, o, instancia Operadores lógicos y verificación de tipo.

Hola Mundo

Compara cómo se ve el mismo código en Alvz y en Python:

variable mensaje = "¡Hola desde Alvz!"
imprimir(mensaje)
mensaje = "¡Hola desde Alvz!"
print(mensaje)

Ejecútalo desde la terminal:

Terminal
$ alvz inicio.alvz
¡Hola desde Alvz!

Variables y Tipos

Alvz es dinámicamente tipado con soporte opcional de anotaciones de tipo estáticas.

Tipos de datos

Tipo Ejemplo
Texto "Hola Mundo"
Número 10 o 3.14
Booleano verdadero o falso
Nulo nulo
Lista [1, 2, 3]
Diccionario {"clave": "valor"}

Anotaciones de tipo (opcionales)

Puedes declarar el tipo esperado de una variable usando : después del nombre.

variable x: numero = 5
variable s: texto = "hola"
variable b: booleano = verdadero
variable n: nulo = nulo

Tipado Estático

Alvz incluye un verificador de tipos estático opcional que analiza tu código en tiempo de compilación. Se activa con --check-types o -T.

Anotaciones en variables

Puedes declarar el tipo de una variable usando : después del nombre.

variable x: numero = 5
variable nombre: texto = "Alvz"
variable activo: booleano = verdadero

Anotaciones en funciones

Puedes anotar tipos en parámetros y valor de retorno. El verificador valida que los argumentos coincidan.

funcion suma(a: numero, b: numero): numero {
    retornar a + b
}

# Error en compilacion:
variable x: texto = suma(1, 2)  # esperaba texto, encontro numero
Inferencia automática
El type checker infiere tipos desde literales. Si asignas 5, sabe que es numero. Sin anotaciones, no hay verificación.

Tipos disponibles

Funciones

Las funciones te permiten reutilizar bloques de código. Compara la sintaxis:

funcion sumar(a: numero, b: numero): numero {
    retornar a + b
}

variable resultado = sumar(10, 5)
imprimir(resultado)
def sumar(a, b):
    return a + b

resultado = sumar(10, 5)
print(resultado)

Funciones Anónimas (Lambdas)

Las funciones anónimas (también llamadas lambdas) permiten definir funciones sin nombre como expresiones. Son ideales para callbacks, operaciones sobre listas y composición funcional.

Sintaxis

Una función anónima se define con la palabra clave funcion seguida de parámetros y cuerpo entre llaves, todo como una expresión:

funcion(a, b) {
    retornar a + b
}

Asignación a variable

variable suma = funcion(a, b) {
    retornar a + b
}
imprimir(suma(3, 4))  # 7

Uso como argumento (callbacks)

funcion aplicar_operacion(x, y, operacion) {
    retornar operacion(x, y)
}

variable resultado = aplicar_operacion(10, 5, funcion(a, b) {
    retornar a * b
})
imprimir(resultado)  # 50

Con listas: mapear y filtrar

Las lambdas son especialmente útiles al trabajar con listas:

variable numeros = [1, 2, 3, 4, 5]

# Mapear: doblar cada valor
variable dobles = numeros.mapear(funcion(n) {
    retornar n * 2
})
imprimir(dobles)  # [2, 4, 6, 8, 10]

# Filtrar: solo pares
variable pares = numeros.filtrar(funcion(n) {
    retornar n % 2 == 0
})
imprimir(pares)  # [2, 4]

Clases y Objetos (POO)

Alvz soporta programación orientada a objetos con sintaxis limpia en español.

Definición básica

self se agrega automáticamente como primer parámetro. No necesitas declararlo.

clase Persona {
    variable nombre = ""
    funcion saludar() {
        imprimir("Hola, soy " + self.nombre)
    }
}

variable p = nuevo Persona()
p.nombre = "Juan"
p.saludar()
class Persona:
    def __init__(self):
        self.nombre = ""
    def saludar(self):
        print("Hola, soy " + self.nombre)

p = Persona()
p.nombre = "Juan"
p.saludar()

Constructor con argumentos

Define inicializar() para recibir argumentos al crear la instancia.

clase Punto {
    variable x = 0
    variable y = 0
    funcion inicializar(x, y) {
        self.x = x
        self.y = y
    }
}

variable p = nuevo Punto(10, 20)
imprimir(p.x)

Propiedades con expresiones

Las propiedades pueden inicializarse con cualquier expresión, no solo con valores simples.

clase Caja {
    variable items = [1, 2, 3]
    variable total = 5 + 10
}

variable c = nuevo Caja()
imprimir(c.items)
imprimir(c.total)

Herencia

Usa clase Hijo de Padre para heredar propiedades y métodos.

clase Animal {
    variable nombre = ""
    funcion inicializar(nombre) {
        self.nombre = nombre
    }
    funcion saludar() {
        retornar "Soy " + self.nombre
    }
}
clase Perro de Animal {
    funcion ladrar() {
        retornar "Guau!"
    }
}

variable p = nuevo Perro("Rex")
imprimir(p.saludar())
imprimir(p.ladrar())

super e instanceof

Alvz soporta dos características clave de POO avanzado: llamadas a métodos de la clase padre y verificación de tipo en tiempo de ejecución.

super.metodo()

Llama explícitamente a un método de la clase padre desde una clase hija.

clase Animal {
    funcion saludar() {
        retornar "Hola, soy un animal"
    }
}
clase Perro de Animal {
    funcion saludar() {
        retornar super.saludar() + " (perro)"
    }
}

variable p = nuevo Perro()
imprimir(p.saludar()) # "Hola, soy un animal (perro)"

obj instancia Clase

Verifica si un objeto es una instancia de una clase (o de sus clases padre).

clase Animal {}
clase Perro de Animal {}

variable p = nuevo Perro()
imprimir(p instancia Perro)    # verdadero
imprimir(p instancia Animal)   # verdadero (hereda)
imprimir(p instancia Texto)     # falso
imprimir(42 instancia Perro)    # falso (no es objeto)
Soporta cadenas de herencia
instancia recorre toda la cadena de padres. Si alguna clase en la jerarquía coincide, devuelve verdadero.

Getters y Setters

Define propiedades calculadas con acceso controlado usando la sintaxis propiedad.

clase Persona {
    variable _nombre = ""
    propiedad nombre {
        obtener {
            retornar mayusculas(self._nombre)
        }
        establecer(valor) {
            self._nombre = valor
        }
    }
    funcion inicializar(nombre) {
        self._nombre = nombre
    }
}

variable p = nuevo Persona("juan")
imprimir(p.nombre)  # "JUAN" (getter aplica mayusculas)
p.nombre = "maria"
imprimir(p.nombre)  # "MARIA"

Los getters y setters soportan herencia. Una clase hija puede heredar propiedades con getter/setter de la clase padre.

Métodos Estáticos

Define métodos que pertenecen a la clase, no a la instancia, usando funcion estatico.

clase Matematicas {
    funcion estatico cuadrado(n) {
        retornar n * n
    }
    funcion estatico pi() {
        retornar 3.1416
    }
}

imprimir(Matematicas.cuadrado(5))  # 25
imprimir(Matematicas.pi())           # 3.1416

Los métodos estáticos se llaman directamente desde la clase, sin necesidad de crear una instancia con nuevo.

Control de Flujo

Alvz soporta las estructuras de control clásicas para tomar decisiones y repetir tareas.

Condicionales (si / sino)

si edad >= 18 {
    imprimir("Eres mayor de edad")
} sino {
    imprimir("Eres menor de edad")
}

Bucles (mientras / para)

Alvz ofrece bucles potentes, incluyendo iteración sobre rangos y listas.

# Bucle mientras
variable i = 1
mientras i <= 5 {
    imprimir(i)
    i = i + 1
}

# Bucle para (rango)
para j de 1 a 5 {
    imprimir(j)
}

# Bucle para cada (listas)
variable colores = ["rojo", "verde", "azul"]
para cada c en colores {
    imprimir(c)
}

global keyword

La palabra clave global permite declarar y modificar variables globales dentro del ámbito de una función.

Declaración

Usa global para indicar que una variable pertenece al ámbito global:

variable contador = 0

funcion incrementar() {
    global contador
    contador = contador + 1
}

incrementar()
imprimir(contador)  # 1

Lectura y escritura

Sin global, una función crea una variable local al asignar. Con global, lee y escribe la variable del ámbito global:

variable mensaje = "Hola"

funcion cambiar_mensaje() {
    global mensaje
    mensaje = "Mundo"
}

cambiar_mensaje()
imprimir(mensaje)  # "Mundo"

Asignación compuesta

variable total = 100

funcion agregar(valor) {
    global total
    total += valor
}

agregar(50)
imprimir(total)  # 150

Múltiples variables globales

Puedes declarar varias variables globales en una sola línea:

variable x = 1
variable y = 2
variable z = 3

funcion reiniciar() {
    global x, y, z
    x = 0
    y = 0
    z = 0
}

reiniciar()
imprimir(x, y, z)  # 0 0 0

Desarrollo Web con FastAPI Pro

Alvz soporta ahora la potencia completa de FastAPI, permitiendo parámetros de ruta, diferentes métodos HTTP y recepción de datos JSON.

API REST Completa

# Función con parámetro de ruta {id}
funcion obtener_usuario(id) {
    retornar {"id": id, "nombre": "Usuario " + id}
}

# Función para POST con datos del Body
funcion crear(nombre, precio) {
    retornar {"estado": "ok", "nombre": nombre}
}

variable rutas = {
    "/usuarios/{id}": "obtener_usuario",
    "/items": {"metodo": "POST", "funcion": "crear"}
}

iniciar_servidor(8000, rutas)
from fastapi import FastAPI
app = FastAPI()

@app.get("/usuarios/{id}")
async def obtener_usuario(id: str):
    return {"id": id, "nombre": f"Usuario {id}"}

@app.post("/items")
async def crear(item: dict):
    return {"estado": "ok", "nombre": item.get("nombre")}

import uvicorn
uvicorn.run(app, port=8000)

Python Power: Características Avanzadas

Alvz hereda las características más potentes de Python. Mira las diferencias:

Herencia

clase Perro de Animal {
    funcion inicializar() {
        self.tipo = "Canino"
    }
}
class Perro(Animal):
    def __init__(self):
        self.tipo = "Canino"

Slicing

imprimir(lista[1:4])
imprimir(texto[0:4])
print(lista[1:4])
print(texto[0:4])

Integración con Supabase

Conecta tu app a la nube en segundos. Alvz permite interactuar con bases de datos PostgreSQL a través de la API de Supabase sin configuraciones complejas.

nube.alvz
variable url = "https://tu-proyecto.supabase.co"
variable key = "tu-anon-key"

# Insertar datos
variable datos = {"usuario": "alvz_user", "puntos": 100}
variable status = supabase_insertar(url, key, "ranking", datos)

# Consultar datos
variable resultado = supabase_consultar(url, key, "ranking")
imprimir(resultado)

Módulos (importar)

Divide tu código en archivos para una mejor organización. También puedes importar módulos de la librería estándar.

Importar un archivo local

app.alvz
importar "calculos.alvz"

variable r = calcular_total(100, 15)
imprimir(r)

Importar de la librería estándar

app.alvz
importar "matematicas"
imprimir(factorial(5))  # 120
imprimir(maximo(10, 20)) # 20

Importar desde paquetes instalados

Los paquetes instalados con alvz install se importan igual que los módulos de la StdLib:

app.alvz
importar "http"

variable resp = http_obtener("https://api.example.com")
imprimir(resp)

Librería Estándar (StdLib)

Alvz incluye módulos reutilizables que puedes importar con importar "nombre".

matematicas

Función Descripción
factorial(n)Calcula el factorial de n.
maximo(a, b)Devuelve el mayor de dos números.
minimo(a, b)Devuelve el menor de dos números.
promedio(lista)Calcula el promedio de una lista de números.
es_par(n)Devuelve verdadero si n es par.
es_impar(n)Devuelve verdadero si n es impar.
importar "matematicas"
imprimir(factorial(5))       # 120
imprimir(maximo(10, 20))    # 20
imprimir(promedio([1,2,3])) # 2

cadenas

Función Descripción
reversa(texto)Invierte el texto.
capitalizar(texto)Pone la primera letra en mayúscula.
contiene(texto, subcadena)Verifica si un texto contiene una subcadena.
empieza_con(texto, prefijo)Verifica si un texto empieza con un prefijo.
termina_con(texto, sufijo)Verifica si un texto termina con un sufijo.
recortar(texto)Elimina espacios al inicio y final.
importar "cadenas"
imprimir(reversa("Hola"))        # aloH
imprimir(capitalizar("hola"))    # Hola
imprimir(contiene("Hola Mundo", "Mundo"))  # verdadero
imprimir(recortar("  texto  "))  # "texto"

colecciones

Función Descripción
vacio(lista)Verifica si una lista está vacía.
primero(lista)Devuelve el primer elemento.
ultimo(lista)Devuelve el último elemento.
contiene(lista, elem)Verifica si un elemento está en la lista.
sin_duplicados(lista)Elimina elementos duplicados.
invertir(lista)Invierte el orden de la lista.
importar "colecciones"
imprimir(primero([10, 20, 30]))       # 10
imprimir(ultimo([10, 20, 30]))        # 30
imprimir(contiene([1, 2, 3], 2))     # verdadero
imprimir(sin_duplicados([1, 1, 2]))  # [1, 2]

http

Cliente HTTP para consumir APIs REST. Los métodos devuelven un diccionario con codigo, cuerpo y json.

FunciónDescripción
http_obtener(url, params)Realiza una petición GET con parámetros opcionales.
http_post(url, datos)Realiza una petición POST con datos JSON.
http_put(url, datos)Realiza una petición PUT con datos JSON.
http_eliminar(url)Realiza una petición DELETE.
http_exito(respuesta)Devuelve verdadero si el código es 2xx.
http_cuerpo(respuesta)Obtiene el cuerpo como texto.
http_json(respuesta)Obtiene la respuesta parseada como JSON.
importar "http"
variable resp = http_obtener("https://api.github.com", {})
si http_exito(resp) {
    variable datos = http_json(resp)
    imprimir(datos)
}

fecha

Funciones para obtener y formatear fecha/hora actual.

FunciónDescripción
ahora()Devuelve fecha y hora actual: YYYY-MM-DD HH:MM:SS.
hoy()Devuelve fecha actual: YYYY-MM-DD.
hora_actual()Devuelve hora actual: HH:MM:SS.
timestamp_actual()Devuelve el timestamp Unix actual en segundos.
formatear_fecha(formato)Formatea la fecha actual con el formato dado.
anio_actual()Devuelve el año actual.
mes_actual()Devuelve el mes actual.
dia_actual()Devuelve el día actual.
importar "fecha"
imprimir(ahora())                  # 2026-05-27 12:00:00
imprimir(dia_actual())             # 27
imprimir(formatear_fecha("%d/%m/%Y"))  # 27/05/2026

testing

Framework de pruebas unitarias para testear tu código Alvz.

FunciónDescripción
describir(nombre)Inicia un grupo de tests con nombre descriptivo.
probar(nombre, funcion)Ejecuta una prueba. Si falla, captura el error y continua.
afirmar(condicion, msj)Lanza error si la condición es falso.
afirmar_igual(a, b, msj)Lanza error si a != b.
afirmar_diferente(a, b, msj)Lanza error si a == b.
afirmar_error(funcion, msj)Verifica que una función lance un error con el mensaje esperado.
resumen()Muestra total de tests, exitos y fallos.
importar "testing"

describir("Matematicas")
probar("suma funciona", funcion() {
    afirmar_igual(5, 2 + 3, "2+3=5")
})
probar("division", funcion() {
    afirmar_igual(2, 10 / 5, "10/5=2")
})
resumen()

sistema

Operaciones del sistema: archivos, JSON, rutas.

FunciónDescripción
archivo_existe(ruta)Verifica si un archivo existe.
archivo_leer(ruta)Lee el contenido de un archivo.
archivo_escribir(ruta, cont)Escribe contenido en un archivo.
archivo_copiar(origen, dest)Copia un archivo.
json_a_texto(datos)Convierte un diccionario/lista a texto JSON.
texto_a_json(texto)Convierte texto JSON a diccionario/lista.
archivo_leer_json(ruta)Lee y parsea un archivo JSON.
archivo_escribir_json(ruta, datos)Convierte a JSON y guarda en archivo.
importar "sistema"
variable datos = {"nombre": "Alvz", "version": 1}
archivo_escribir_json("datos.json", datos)
variable leido = archivo_leer_json("datos.json")
imprimir(leido["nombre"])  # Alvz

sqlite

Base de datos SQLite embebida para persistencia local.

FunciónDescripción
base_abrir(ruta)Abre (o crea) una base de datos SQLite.
base_ejecutar(conn, sql)Ejecuta una sentencia SQL (INSERT, UPDATE, DELETE).
base_consultar(conn, sql)Ejecuta una consulta SELECT, devuelve lista de registros.
base_crear_tabla(conn, nom, cols)Crea una tabla con las columnas especificadas.
base_insertar(conn, tabla, datos)Inserta un diccionario como fila en la tabla.
base_seleccionar(conn, tabla, cond)Selecciona registros con condición WHERE opcional.
base_cerrar(conn)Cierra la conexión a la base de datos.
importar "sqlite"
variable db = base_abrir("ejemplo.db")
base_crear_tabla(db, "usuarios", ["id INTEGER PRIMARY KEY", "nombre TEXT", "edad INTEGER"])
base_insertar(db, "usuarios", {"id": 1, "nombre": "Ana", "edad": 30})
variable resultados = base_seleccionar(db, "usuarios", "")
cada r en resultados {
    imprimir(r["nombre"])  # Ana
}
base_cerrar(db)

aleatorio

Números aleatorios, selección y mezcla de colecciones, generación de cadenas aleatorias.

FunciónDescripción
aleatorio_numero(min, max)Devuelve un entero aleatorio entre min y max (inclusive).
aleatorio_flotante(min, max)Devuelve un número decimal aleatorio entre min y max.
aleatorio_escoger(lista)Selecciona un elemento al azar de la lista.
aleatorio_escoger_varios(lista, n)Selecciona n elementos distintos al azar.
aleatorio_mezclar(lista)Devuelve una copia de la lista con elementos reordenados aleatoriamente.
aleatorio_cadena(longitud)Genera una cadena alfanumérica aleatoria de la longitud dada.
aleatorio_booleano()Devuelve verdadero o falso al azar.
importar "aleatorio"
variable dado = aleatorio_numero(1, 6)
variable cartas = ["A", "K", "Q", "J"]
variable mano = aleatorio_escoger_varios(cartas, 2)
variable token = aleatorio_cadena(16)
imprimir(dado, mano, token)

csv

Lectura y escritura de archivos CSV con soporte para formato de diccionarios y listas.

FunciónDescripción
csv_a_listas(texto)Parsea texto CSV y devuelve una lista de listas.
csv_a_diccionarios(texto)Parsea texto CSV usando la primera fila como encabezados, devuelve lista de diccionarios.
csv_leer(ruta)Lee un archivo CSV y devuelve lista de diccionarios.
csv_listas_a_texto(datos)Convierte una lista de listas a texto CSV.
csv_diccionarios_a_texto(datos)Convierte una lista de diccionarios a texto CSV.
csv_escribir(ruta, datos)Guarda una lista de diccionarios como archivo CSV.
importar "csv"
importar "sistema"

variable usuarios = [
    {"nombre": "Ana", "edad": "30"},
    {"nombre": "Bob", "edad": "25"}
]
csv_escribir("usuarios.csv", usuarios)
variable datos = csv_leer("usuarios.csv")
cada u en datos {
    imprimir(u["nombre"])
}

expresiones_regulares

Validación y extracción de patrones con expresiones regulares.

FunciónDescripción
regex_coincide(texto, patron)Devuelve verdadero si el patrón aparece al menos una vez.
regex_extraer(texto, patron)Devuelve la primera coincidencia del patrón, o cadena vacía.
regex_todas(texto, patron)Devuelve una lista con todas las coincidencias.
regex_contar(texto, patron)Cuenta cuántas veces aparece el patrón en el texto.
importar "expresiones_regulares"
variable email = "usuario@ejemplo.com"
si regex_coincide(email, "^.+@.+\\..+$") {
    imprimir("Email válido")
}
variable texto = "precio: $10, $20, $30"
imprimir(regex_todas(texto, "\\$\\d+"))  # ["$10", "$20", "$30"]

consola

Utilidades interactivas para terminal: menús, confirmaciones, colores y barras de progreso.

FunciónDescripción
consola_color(texto, color)Envuelve el texto en códigos ANSI del color especificado (rojo, verde, azul, etc.).
consola_preguntar(pregunta)Muestra una pregunta y devuelve la respuesta del usuario.
consola_confirmar(pregunta)Muestra una pregunta de sí/no y devuelve verdadero o falso.
consola_menu(titulo, opciones)Muestra un menú numerado y devuelve la opción seleccionada.
consola_progreso(actual, total, ancho)Genera una barra de progreso visual como texto.
consola_separador()Imprime una línea separadora.
consola_titulo(texto)Imprime un título formateado.
importar "consola"
variable nombre = consola_preguntar("¿Cómo te llamas?")
si consola_confirmar("¿Quieres continuar?") {
    variable opcion = consola_menu("Elige:", ["Opción A", "Opción B"])
    imprimir(consola_color("Listo", "verde"))
}

json

Codificación y decodificación JSON, validación y lectura/escritura de archivos.

FunciónDescripción
json_a_texto(datos)Convierte un diccionario o lista a cadena JSON.
texto_a_json(texto)Convierte una cadena JSON a diccionario o lista.
json_leer_archivo(ruta)Lee y parsea un archivo JSON.
json_escribir_archivo(ruta, datos)Convierte datos a JSON y los guarda en un archivo.
json_valido(texto)Devuelve verdadero si el texto es JSON válido.
importar "json"
variable datos = {"nombre": "Ana", "edad": 30}
variable texto = json_a_texto(datos)
imprimir(texto)              # {"nombre": "Ana", "edad": 30}
variable recuperado = texto_a_json(texto)
imprimir(recuperado["nombre"])  # Ana

Funciones incorporadas

Función Descripción
leer() Lee una entrada del usuario (texto o número).
leer_numero() Lee una entrada y obliga al usuario a ingresar un número válido.
tiempo() Obtiene el tiempo actual en segundos (Unix timestamp).
tipo(valor) Devuelve el tipo de dato (texto, numero, booleano, lista, diccionario, nulo).
json_codificar(v) Convierte una lista o diccionario a una cadena JSON.
reemplazar(t, v, n) Reemplaza en el texto t todas las ocurrencias de v por n.
absoluto(n) Devuelve el valor absoluto de un número.
azar(min, max) Genera un número aleatorio entre el rango dado.
ejemplo_stdlib.alvz
importar "matematicas"
importar "fecha"
importar "aleatorio"
importar "json"

imprimir(factorial(5))                    # 120
imprimir(ahora())                          # "2026-05-27 12:00:00"
variable token = aleatorio_cadena(16)
imprimir(json_a_texto({"token": token}))  # {"token": "a3f8..."}

Async / Await

Alvz soporta programación asíncrona con las palabras clave async y aguardar. Las funciones marcadas como async se ejecutan mediante un event loop real con threads, permitiendo concurrencia verdadera.

async.alvz
funcion async obtener_datos(id) {
    retornar id * 2
}

variable resultado = aguardar obtener_datos(5)
imprimir(resultado)  # 10

Concurrencia real

Múltiples tareas async se ejecutan en paralelo usando ThreadPoolExecutor. Ejemplo con esperar():

funcion async tarea(n, segundos) {
    imprimir("Inicia tarea " + n)
    esperar(segundos)
    imprimir("Termina tarea " + n)
}

aguardar tarea("A", 0.5)
aguardar tarea("B", 0.3)

Sintaxis

aguardar puede usarse tanto en expresiones (asignación) como en sentencias (llamada directa):

// Como expresión
variable x = aguardar foo()

// Como sentencia
aguardar foo()
Concurrencia real
El event loop usa ThreadPoolExecutor para lanzar corutinas en threads separados. Las tareas con esperar() se ejecutan verdaderamente en paralelo.

Optimizador de Bytecode

Alvz incluye un optimizador de bytecode que mejora el rendimiento de tus programas. Se activa con la bandera --optimize o -O al ejecutar un archivo.

Terminal
$ alvz --optimize script.alvz

Ejecución WebAssembly

Alvz puede ejecutar archivos directamente via WebAssembly con --wasm, usando wasmtime en vez de la VM Python. 37 opcodes se ejecutan como WASM nativo y el resto via host calls.

Terminal
$ alvz --wasm programa.alvz    # Ejecuta via WASM (requiere wasmtime)
Rendimiento WASM

Para scripts sin clases ni imports complejos, WASM ofrece velocidad nativa con 37+ opcodes compilados directamente a instrucciones WASM. Los opcodes restantes se manejan como host calls desde Python.

Optimizaciones

Compatibilidad

El optimizador es completamente transparente: el programa produce el mismo resultado con o sin --optimize. La diferencia está en la velocidad de ejecución y el tamaño del bytecode.

Package Manager

Alvz incluye un gestor de paquetes para instalar y compartir librerías. Los paquetes se obtienen del registro público en github.com/interpago/alvz-packages.

Paquetes disponibles

Actualmente hay 30 paquetes en el registro:

PaqueteVersiónDescripción
base-convert1.0.0Conversión de bases: binario, octal, hexadecimal
collections1.0.0Operaciones con listas: agrupar, ordenar, unique, aplanar
color-utils1.0.0Colores terminal ANSI: rojo, verde, azul, negrita, subrayado
crypto1.0.0Utilidades crypto: base64, hash simple, IDs, sanitización HTML
csv-extra1.0.0CSV con tipos automáticos: parsear con detección de números
datos1.0.0Procesamiento tabular: CSV, filtrar, seleccionar columnas
date-utils1.0.0Cálculos de fechas: sumar días, diferencia, timestamp
file-utils1.0.0Operaciones avanzadas de archivos: glob, mover, temporales
fs-extra1.0.0Operaciones de archivos: directorios, estadísticas, copiar
html-utils1.0.0Generación HTML: tablas, listas, enlaces, escape
ini-utils1.0.0Parseo INI: leer y generar archivos de configuración
json-utils1.0.0Utilidades JSON: merge, diff, patch, validar esquemas
markdown1.0.0Generación Markdown: encabezados, listas, tablas, código
math1.0.0Funciones matemáticas: fibonacci, primos, combinatoria
math-extra1.0.0Matemáticas adicionales: MCD, MCM, factorial, permutaciones
path-utils1.0.0Manipulación de rutas: join, dirname, basename, extension
random-utils1.0.0Aleatorias: choice, shuffle, sample, weighted choice
retry1.0.0Reintentos: backoff, respaldo, condicional
semver1.0.0Versionado semántico: parsear, comparar, compatible
slugify1.0.0Generación de slugs URL a partir de textos
stats1.0.0Estadísticas: media, mediana, moda, varianza, desviación
strings1.0.0Manipulación de textos: invertir, capitalizar, palíndromos
template1.0.0Plantillas simples: render, repetir, reemplazar
text-utils1.0.0Utilidades de texto: wrap, indent, center, tabular
throttle1.0.0Rate limiting: throttle, espera, rate limiter
tiempo1.0.0Formateo de fecha/hora: timestamps, bisiestos, días entre fechas
unit-convert1.0.0Conversión de unidades: temperatura, distancia, peso, volumen
validacion1.0.0Validación de datos: email, teléfono, URL, rangos, longitud
xml-utils1.0.0Generación XML: escape, elementos, documentos
yaml-utils1.0.0Serialización YAML: diccionarios y listas a YAML

Instalación

Terminal
$ alvz install math          # Instala la última versión
$ alvz install json-utils    # Utilidades JSON
$ alvz install fs-extra@1.0.0 # Versión específica
$ alvz search json           # Busca paquetes relacionados

Comandos

ComandoDescripción
alvz install <paquete>[@version]Instala un paquete (con versión opcional)
alvz uninstall <paquete>Desinstala un paquete
alvz search <consulta>Busca paquetes en el registro
alvz list-packagesLista paquetes instalados
alvz info <paquete>Muestra información detallada de un paquete
alvz debug <archivo>Depuración con DAP (breakpoints, paso a paso, variables)

Instalación de paquetes

Terminal
$ alvz install stats           # Estadísticas
$ alvz install html-utils      # Generación HTML
$ alvz install semver          # Versionado semántico
$ alvz install retry           # Reintentos
$ alvz list-packages           # Ver instalados
Terminal
$ alvz list-packages
$ alvz info math
$ alvz uninstall json-utils

Los paquetes se instalan en ~/.alvz/packages/ y pueden importarse con importar "nombre".

Uso desde código

# Después de instalar un paquete:
importar "strings"
importar "stats"
importar "html-utils"

variable texto = "Hola Mundo"
imprimir(invertir(texto))    # odnuM aloH

variable nums = [4, 7, 1, 9, 3]
imprimir(media(nums))        # 4.8
Registro público
El registro oficial está en github.com/interpago/alvz-packages. Los paquetes se obtienen del archivo index.json en ese repositorio. ¡Puedes contribuir con tus propios paquetes!

Compilación Nativa & Multiplataforma

Alvz genera ejecutables independientes mediante alvz build que funcionan en Windows, Linux y macOS. Todos los 83 opcodes del VM están soportados: clases, SQLite, HTTP, lambdas, async/await, etc. Los binarios se empaquetan con PyInstaller y no requieren dependencias externas.

Terminal
$ alvz build programa.alvz
$ ./programa

Cómo funciona

  1. El código fuente Alvz se compila a bytecode
  2. El bytecode se empaqueta con el VM Python vía PyInstaller
  3. Se genera un ejecutable standalone para la plataforma actual
programa.alvz
funcion suma(a: numero, b: numero): numero {
    retornar a + b
}
variable x = suma(10, 20)
imprimir(x)
Multiplataforma
El ejecutable generado es un binario nativo sin dependencias externas, ideal para distribución y despliegue en cualquier sistema operativo.

Compilación WASM

Alvz puede compilar tu código a WebAssembly (WASM), permitiendo ejecutar programas Alvz en cualquier runtime WASM como wasmtime, wasmer o en el navegador web.

Terminal
$ alvz build --wasm programa.alvz
$ wasmtime programa.wasm

Opcodes Soportados (40+/83)

CategoríaOpcodes
Aritmética+ - * /, negación unaria
Comparaciones== != < > <= >=
Lógicay (AND), o (OR)
Variablesload, store, load_global, store_global
Controljump, jump_if_false, call, return, halt
IOprint (numérico, booleano, string), leer()
Aleatorioazar(min, max)
Listascrear, agregar, obtener índice, establecer índice, longitud
Diccionarioscrear (placeholder)
Valoresconstante, null, pop
Arquitectura
El compilador WASM implementa una máquina virtual de bytecode dentro del módulo WASM, con una pila de valores en memoria lineal (tag i32 + data f64 = 16 bytes por entrada). El bytecode y las constantes se almacenan como data segments en la memoria WASM.
programa.alvz
funcion suma(a: numero, b: numero): numero {
    retornar a + b
}
variable x = suma(10, 20)
imprimir(x)
Compilar y ejecutar
$ alvz build --wasm programa.alvz
# Genera programa.wasm
$ wasmtime programa.wasm
# 30

Arquitectura Interna de Alvz

Alvz está construido sobre una arquitectura modular de 6 capas que transforman código fuente en ejecución. A continuación se explica cada componente clave del lenguaje.

Pipeline de Compilación

Código fuente → Ejecución
# 1. Lexer   Código .alvz → Tokens (Lexer)
# 2. Parser   Tokens → Árbol + Bytecode (ParserBase + Parser)
# 3. Opt.     Bytecode → Bytecode optimizado (Optimizer)
# 4. Type     Bytecode → Verificación de tipos (TypeChecker)
# 5. VM       Bytecode → Ejecución (VM con 83 opcodes)
# 6. Backends Bytecode → WASM / Nativo (wasm_compiler / compiler)

1. Lexer (Lexer)

El lexer (alvz/core/lexer.py, 262 líneas) tokeniza el código fuente usando expresiones regulares en un solo paso. Reconoce 30+ tipos de tokens incluyendo palabras clave en español (funcion, clase, mientras, importar, etc.), identificadores, números, strings, operadores y símbolos. Soporta strings con escape de comillas y comentarios de línea con #.

2. Parser (ParserBase + Parser)

El parser (parser_base.py + parser.py, ~2100 líneas) es un compilador de una sola pasada que genera bytecode directamente sin AST intermedio. Características clave:

3. Bytecode (83 opcodes)

El bytecode Alvz (alvz/core/bytecode.py) es una representación intermedia basada en pila con 83 opcodes. Cada instrucción es un byte (0-81) seguido de 0-2 bytes de operandos. Categorías:

CategoríaOpcodesRango
AritméticaOP_SUMA, OP_RESTA, OP_MUL, OP_DIV, OP_NEG0-4, 22
ComparaciónOP_EQ, OP_NEQ, OP_LT, OP_GT, OP_LTE, OP_GTE5-10
LógicaOP_AND, OP_OR, OP_NOT11-13
VariablesOP_LOAD, OP_STORE, OP_LOAD_GLOBAL, OP_STORE_GLOBAL14-17
ControlOP_JUMP, OP_JUMP_IF_FALSE, OP_CALL, OP_RETURN, OP_HALT18-21, 23, 25
ConstantesOP_CONSTANT, OP_NULL24, 26
Listas/DictsOP_NEW_LIST, OP_ADD_ITEM, OP_INDEX, OP_INDEX_ASSIGN, OP_LIST_LEN, OP_NEW_DICT, OP_DICT_KEYS27-32, 82
POOOP_NEW_OBJECT, OP_GET_ATTR, OP_SET_ATTR, OP_CALL_METHOD, OP_SUPER, OP_INSTANCEOF, OP_MAKE_FUNC33-40
IO/UtilOP_PRINT, OP_READ, OP_RANDOM, OP_TIME, OP_TYPE, OP_SLICE, OP_ERROR_MSG41-47, 75
AsyncOP_ASYNC_CALL, OP_AWAIT76-77
SQLiteOP_SQLITE_ABRIR, OP_SQLITE_EJECUTAR, OP_SQLITE_CONSULTAR, OP_SQLITE_CERRAR78-81
HTTPOP_SOLICITUD_HTTP (HTTP request)69
Try/CatchOP_TRY_SETUP, OP_TRY_POP, OP_THROW48-50
PropiedadesOP_GETTER, OP_SETTER (getter/setter dispatch)51-52
Llamada rápidaOP_FAST_CALL, OP_FAST_CALL253-54
DiccionarioOP_DICT_MERGE, OP_DICT_CONTAINS55-56
StringsOP_STR_ADD, OP_STR_MUL, OP_STR_LEN, OP_STR_CONTAINS, OP_MAYUSCULAS, OP_MINUSCULAS57-62
IteraciónOP_ITER, OP_NEXT, OP_FOR_LOOP63-65
LambdaOP_MAKE_FUNC = 70 (descriptor de función)70

4. Máquina Virtual (VM)

El VM (alvz/core/vm.py, ~1127 líneas) es un intérprete de bytecode basado en pila implementado en Python puro. Características:

5. Optimizador de Bytecode

El optimizador (alvz/core/optimizer.py, ~230 líneas) mejora el bytecode antes de ejecución:

Se activa con --optimize / -O.

6. Type Checker (Tipado Estático)

El verificador de tipos (alvz/core/type_checker.py, ~457 líneas) analiza el bytecode post-compilación:

7. Backend WASM

El compilador WASM (wasm_compiler.py + wasm_encoder.py, ~2300 líneas) traduce bytecode Alvz a módulos WebAssembly binarios:

8. Backend Nativo (PyInstaller / Nuitka)

El compilador nativo (alvz/core/compiler.py, ~227 líneas) genera ejecutables standalone:

9. LSP (Language Server Protocol)

El servidor LSP (alvz/lsp/, ~880 líneas) se comunica vía JSON-RPC sobre stdin/stdout:

10. DAP (Debug Adapter Protocol)

El depurador DAP (alvz/lsp/dap.py) permite depuración interactiva:

Se ejecuta con alvz-dap o alvz debug.

11. StdLib (Librería Estándar)

13 módulos en alvz/stdlib/ escritos en Alvz puro:

MóduloDescripción
matematicasFactorial, máximo, mínimo, promedio, par/impar
cadenasReversa, capitalizar, contiene, recortar
coleccionesVacío, primero, último, sin_duplicados, invertir
httpGET, POST, PUT, DELETE con parseo JSON
fechaAhora, hoy, timestamp, formatear fecha
testingDescribir, probar, afirmar_igual, resumen
sistemaArchivos, JSON, rutas, copiar
sqliteBase de datos SQLite embebida
aleatorioNúmeros aleatorios, escoger, mezclar, cadena
csvLectura/escritura de CSV
jsonCodificar, decodificar, leer/escribir archivos
expresiones_regularesCoincidir, extraer, contar con regex
consolaMenús, colores, confirmaciones, progreso

12. Package Manager

30 paquetes disponibles en github.com/interpago/alvz-packages. El registro se obtiene de index.json vía GitHub raw. Los paquetes se instalan en ~/.alvz/packages/ y se importan con importar "nombre". Soporta dependencias entre paquetes.

Comandos: alvz install, alvz uninstall, alvz search, alvz list-packages, alvz info.

Estadísticas del Proyecto

MétricaValor
Tests626 (0 fallos, 0 errores)
Opcodes VM83
Opcodes WASM nativos40+
Host calls WASM42
Módulos StdLib13
Paquetes en registro30
Líneas de código Python~12,000
Líneas de código Alvz (StdLib)~1,200
VS Code Extensionv1.6.0

Herramientas CLI

Alvz incluye herramientas de línea de comandos para testear, formatear y generar proyectos.

Test Runner

Ejecuta pruebas unitarias automáticamente. Descubre archivos test_*.alvz o *_test.alvz.

Terminal
$ alvz test tests/              # Ejecuta todos los tests en la carpeta
$ alvz test test_mi_app.alvz    # Ejecuta un archivo específico
test_ejemplo.alvz
importar "testing"

funcion suma(a, b) {
    retornar a + b
}

describir("Pruebas de suma")

probar("suma funciona", funcion_suma_test)
funcion funcion_suma_test() {
    afirmar_igual(5, suma(2, 3), "2 + 3 = 5")
}

resumen()

Formateador

Formatea automáticamente tu código Alvz con indentación correcta de llaves.

Terminal
$ alvz fmt app.alvz              # Formatea el archivo
$ alvz fmt --check app.alvz     # Solo verifica (no modifica)

Scaffolding

Genera proyectos completos con estructura lista para usar.

Terminal
$ alvz nuevo proyecto mi_app    # Proyecto completo
$ alvz nuevo api mi_api          # API REST con FastAPI
$ alvz nuevo cli mi_cli          # Aplicación CLI
$ alvz nuevo lib mi_lib          # Librería reutilizable
$ alvz nuevo test mis_pruebas    # Archivo de test

Servidor de Lenguaje (LSP)

Alvz incluye un servidor LSP (Language Server Protocol) que proporciona asistencia inteligente en tu editor.

Características

Uso

Ejecuta el servidor LSP desde la terminal:

Terminal
$ alvz-lsp

Luego configura tu editor para conectarse al servidor. El LSP se comunica vía JSON-RPC sobre stdin/stdout.

Depurador (DAP)

Alvz implementa el Debug Adapter Protocol (DAP) para depuración interactiva desde tu editor.

Características

Uso

Terminal
$ alvz-dap

El depurador se comunica vía JSON-RPC sobre stdin/stdout. Compatible con editores que soporten DAP (VS Code, etc.).

Consola Interactiva (REPL)

Prueba código al instante sin crear archivos. Solo escribe alvz en tu terminal.

Consola Alvz
alvz> variable a = 5
alvz> variable b = 5
alvz> imprimir(a + b)
10

Gestión de Errores Amigable

Alvz está diseñado para ayudarte a programar. Si cometes un error tipográfico o intentas acceder a algo que no existe, el lenguaje te dará sugerencias inteligentes.

Terminal
$ alvz script.alvz
Error: La función 'imprimr' no existe. ¿Quisiste decir 'imprimir'?

Manejo de Excepciones (intentar / capturar)

Puedes capturar errores para evitar que tu programa se detenga inesperadamente.

intentar {
    variable resultado = 10 / 0
} capturar {
    imprimir("¡Ocurrió un error: " + error_msj() + "!")
}

Tipos de Errores Soportados