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.
Funciones como valores
Section titled “Funciones como valores”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?Lambdas
Section titled “Lambdas”Funciones anónimas para cuando definir una pega completa es demasiado. La flecha -> hace lo que parece.
wea duplicar = (x) -> x * 2wea lista = [1, 2, 3, 4, 5]
// Se usan igual que cualquier otra pegaaltiro(duplicar(4)) // → 8Conversión de tipos: numero() y texto()
Section titled “Conversión de tipos: numero() y texto()”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")}Interpolación de strings
Section titled “Interpolación de strings”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.Pattern matching (según)
Section titled “Pattern matching (según)”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 ”Sistema de módulos
Section titled “Sistema de módulos”Un programa de más de un archivo. meter (nombre por definir) importa otro .cl por nombre, sin extensión.
meter utilsmeter 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.
piola fmt
Section titled “piola fmt”Un formateador oficial para que todo el código Piola se vea igual, independiente de quién lo escribió. Sin debates de estilo.
piola fmt mi_programa.clpiola fmt src/ # formatea un directorio completoExtensión para VS Code
Section titled “Extensión para VS Code”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.
v1.0 — Motor nuevo Futuro
Section titled “v1.0 — Motor nuevo ”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.
Compilador a bytecode
Section titled “Compilador a bytecode”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 10PUSH 20SUMARGUARDAR xStack VM
Section titled “Stack VM”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.
Garbage Collector
Section titled “Garbage Collector”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.
REPL mejorado
Section titled “REPL mejorado”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.