Skip to content

Roadmap

Piola funciona. Corre, tiene REPL, se instala con un script. Pero todavía le faltan cosas para ser el lenguaje que tiene que ser. Esto es lo que viene.

v0.2 — El lenguaje completo Próximo

Section titled “v0.2 — El lenguaje completo ”

Todo lo que hace falta para escribir programas reales sin estar peleando con el lenguaje.

Las funciones son ciudadanos de primera clase. Se guardan en variables, se pasan como argumentos, se retornan desde otras funciones.

wea investigar = pega(ser_vivo) {
"El misterio de los seres vivos: ¿Por qué " + ser_vivo + " hace lo que hace?"
}
altiro(investigar("el oso"))
// → El misterio de los seres vivos: ¿Por qué el oso hace lo que hace?

Funciones anónimas para cuando definir una pega completa es demasiado. La flecha -> hace lo que parece.

wea duplicar = (x) -> x * 2
wea lista = [1, 2, 3, 4, 5]
// Se usan igual que cualquier otra pega
altiro(duplicar(4)) // → 8

Sin esto, pregunta() es casi inútil. Cualquier input del usuario llega como texto, y no hay forma de operarlo como número.

wea entrada = pregunta("¿Cuántos años tienes? ")
wea edad = numero(entrada)
cachai (edad >= 18) {
altiro("Bienvenido")
}

Concatenar con + funciona, pero se vuelve ilegible rápido. Los strings interpolados llevan $ antes de la comilla y las expresiones van entre {}.

wea nombre = "Bodoque"
wea edad = 42
altiro($"Wena {nombre}, tienes {edad} años.")
// → Wena Bodoque, tienes 42 años.

Una forma más limpia de comparar un valor contra múltiples posibilidades. El comodín _ cubre todo lo que no calce explícitamente.

wea tipo = cachar(x)
según tipo {
"numero" -> altiro($"{x} es un número")
"texto" -> altiro($"{x} es un texto")
_ -> altiro("no sé qué wea es esto")
}

v0.3 — Tooling Planificado

Section titled “v0.3 — Tooling ”

Un programa de más de un archivo. meter (nombre por definir) importa otro .cl por nombre, sin extensión.

meter utils
meter math/vectores
utils::saludar("Piola")

Si hay colisión de nombres, el intérprete falla fuerte y obliga a usar alias — nada de sobrescribir en silencio.

Un formateador oficial para que todo el código Piola se vea igual, independiente de quién lo escribió. Sin debates de estilo.

Terminal window
piola fmt mi_programa.cl
piola fmt src/ # formatea un directorio completo

Soporte básico de editor: syntax highlighting, detección de errores mientras escribes, y autocompletado simple.


v0.4 — Standard library Planificado

Section titled “v0.4 — Standard library ”

Funciones que todo programa eventualmente necesita. Organizada en módulos según el dominio.

El alcance exacto se define después de que los módulos existan y haya programas reales escritos en Piola que indiquen qué falta.


La diferencia entre v0.x y v1.0 no es el lenguaje, la sintaxis no cambia. Es lo que pasa por debajo cuando corres un programa.

Hoy, Piola ejecuta el programa recorriendo el árbol sintáctico directamente. En v1.0, primero lo compila a una lista de instrucciones simples — el bytecode — y después las ejecuta. Es como la diferencia entre leer una receta e ir preparando cada ingrediente a medida que lees, versus preparar todo antes de empezar a cocinar.

// Esto:
wea x = 10 + 20
// Se convierte en instrucciones como:
PUSH 10
PUSH 20
SUMAR
GUARDAR x

Una máquina virtual propia que ejecuta ese bytecode. Un loop que lee instrucción por instrucción y mantiene una pila de valores. Simple, rápida, y completamente controlable.

Para que los programas largos no se coman la RAM. El GC de Piola revisa periódicamente qué valores en memoria ya no son accesibles desde ningún lado y los libera. Mark-and-sweep: primero marca todo lo alcanzable, después elimina todo lo que no fue marcado.

El REPL actual funciona, pero olvida todo entre líneas. El REPL de v1.0 mantiene estado: defines una pega en una línea y la usas diez líneas después, todo en la misma sesión.