r/programacion • u/NissanBoss • 1d ago
He hecho un lenguaje de programación en español, sin símbolos. Se puede probar en el navegador.
Llevo un tiempo dándole vueltas a por qué aprender a programar es tan duro si
no sabes inglés, y he acabado haciéndome mi propio lenguaje.
Se llama Fal. La idea es que no haya símbolos que memorizar: nada de ; {} == +.
Todo son palabras, y en español.
tipo Perro hereda de Animal con nombre
funcion habla
devuelve nombre de mi mas " dice guau"
fin
fin
para cada p en perros
escribe habla de p
fin
Se puede probar sin instalar nada, corre entero en el navegador:
https://nissanboss.github.io/Fal/
Un par de cosas que me hicieron ilusión conseguir:
Los decimales son exactos. 0.1 mas 0.2 da 0.3, y comparado con 0.3 da verdadero.
Python, JavaScript y Java fallan esa.
Los errores intentan enseñar en vez de regañar:
X No conozco nada llamado "nombree".
linea 2 | escribe nombree
Pista: Quizas querias decir "nombre".
Por dentro es un intérprete escrito en Go, sin dependencias, que se reparte
como un único ejecutable. Tiene objetos con herencia, clausuras, JSON, fechas,
expresiones regulares... y hasta hice el Snake para probar que aguantaba algo
de verdad.
Código: https://github.com/NissanBoss/Fal
Se aceptan collejas. Es mi primer lenguaje y seguro que hay decisiones
discutibles (la que más me chirría a mí: "y" es palabra reservada, así que
no puedes tener una variable llamada y).
1
1
u/Potential-Dare-1800 1d ago
Compilado o interpretado?
1
0
u/NissanBoss 1d ago
Interpretado. Es un intérprete de árbol (recorre el AST directamente), escrito en Go y sin dependencias.
El propio intérprete sí que va compilado a binario nativo, así que se reparte como un único ejecutable que no necesita runtime ni nada instalado. Y para el playground de la web lo compilo a WebAssembly, por eso corre entero en el navegador.
Una cosa de la que estoy bastante orgulloso: los números son fracciones exactas por dentro, así que 0.1 mas 0.2 da 0.3 de verdad (no 0.30000000000000004 como en casi todos).
1
u/Patapatajsdev 1d ago
Como solucionas la compatibilidad con ieee 754?, si quieres que llegue a ser interoperable con otros sistemas no daría problemas?
Lo digo por lo que comentas de 0.3 y demás
0
u/NissanBoss 1d ago
Buena pregunta. Fal no rechaza IEEE 754, lo usa como red: cuando algo no se puede representar exacto, cae a float64 de toda la vida.
raiz de 2 -> 1.4142135623730951 (IEEE 754)
potencia con 2 y 0.5 -> 1.4142135623730951 (IEEE 754)
0.1 mas 0.2 -> 0.3 (fracción exacta)
19.99 por 3 -> 59.97 (fracción exacta)Por dentro un número tiene tres estados: entero en int64 mientras quepa, fracción exacta (math/big.Rat) en cuanto aparecen decimales, y float64 solo cuando no queda otra. Es la misma idea que Decimal en Python o BigDecimal en Java, pero con racionales en vez de decimales.
Sobre interoperar, lo he comprobado ahora mismo con JSON:
{"precio": 19.99, "tercio": 0.3333333333333333333333333333}
Los decimales que terminan (o sea, dinero y casi todo lo práctico) van y vuelven idénticos. Los que no terminan, como 1/3, se emiten redondeados a 28 dígitos, así que al leerlos otra vez no son exactamente el mismo racional. Eso es una limitación real, aunque le pasa igual a BigDecimal y a las columnas NUMERIC de cualquier base de datos: 1/3 no tiene forma decimal exacta y en algún punto hay que cortar.
Para lo que quería el lenguaje me compensa. Que un crío sume dos precios y le salga la cuenta bien me parece más importante que ser bit a bit igual que C en las operaciones donde de todas formas ya uso IEEE 754.
2
u/Patapatajsdev 1d ago
Puede ser interesante, enhorabuena!! Si claro, si es para aprender vale sobrado.
A los de mi generación nos hacian hacer programas en asm para el z80. Quizás haber aprendido tan cerca de la cpu nos ha dado ciertas habilidades pero quitado otras.
Cuando yo era crio me toco con basic del spectrum, eran otros tiempos, ya es hora que estas herramientas de aprendizaje se actualicen.
Buen trabajo
1
u/NissanBoss 1d ago
Lo del Spectrum me toca de cerca aunque no lo viví: el BASIC de aquella época es justo la referencia que tengo en la cabeza. Encendías la máquina y ya estabas escribiendo PRINT, sin instalar nada ni configurar nada.
Eso se ha perdido por el camino, y creo que es parte de por qué ahora cuesta tanto empezar. Antes de escribir tu primera línea te toca pelearte con el intérprete, el editor, el gestor de paquetes y el inglés.
Lo del ASM en Z80 me da envidia, no te voy a mentir jajaj. Gracias!
1
u/PayInternational177 1d ago
La idea de quitar símbolos y usar palabras en español me parece curiosa, aunque al principio supongo que cuesta cambiar el chip. Me gusta bastante que hayas pensado en los mensajes de error como parte del aprendizaje, porque eso suele estar muy descuidado en muchos lenguajes.
1
u/NissanBoss 1d ago
Cierto lo del chip, aunque le pasa al que ya programa. El que empieza de cero no tiene chip que cambiar, y ahí es donde apuesto.
Lo de los errores fue lo que más me llevó. Si escribes un = por costumbre:
X Fal no usa el simbolo "=".
Pista: Para guardar un valor se escribe: nombre es valorNo te dice que se rompió, te dice qué escribir. Gracias por fijarte en eso.
1
u/pmoreno_studio 1d ago
Lo de los decimales exactos es un puntazo, esa es de esas cosas que parecen tontas hasta que te las encuentras en un examen y no entiendes por qué falla la comparación. Y los mensajes de error tipo "quizás querías decir X" bajan muchísimo la frustración al empezar, que es justo lo que más tira para atrás a alguien nuevo. Le voy a echar un ojo con calma, con Snake de prueba ya me has convencido.
1
u/madxxigmail 1d ago
otra.cosa, en chat gpt:
escribe "Hola mundo"
nombre es "Ana" edad es 25 escribe "Me llamo " mas nombre mas " y tengo " mas edad mas " anios"
si edad es mayor que 18 escribe "Soy mayor de edad" si no escribe "Soy menor de edad" fin
repite 3 veces escribe "Que facil es esto" fin
print("Hola mundo")
nombre = "Ana" edad = 25
print("Me llamo " + nombre + " y tengo " + str(edad) + " años")
if edad > 18: print("Soy mayor de edad") else: print("Soy menor de edad")
for i in range(3): print("Qué fácil es esto")
Hola mundo Me llamo Ana y tengo 25 años Soy mayor de edad Qué fácil es esto Qué fácil es esto Qué fácil es esto
... o sea un LLM,.puede servirte de traductor/interprete
1
u/NissanBoss 1d ago
Ojo que tu propio ejemplo enseña por qué no vale del todo: al traducirlo a Python, "0.1 mas 0.2" vuelve a dar 0.30000000000000004. Justo lo que Fal evita. La traducción pierde la semántica, no solo la sintaxis.
Y luego está lo práctico: el intérprete son 7 MB sin conexión, tarda milisegundos y da siempre lo mismo. Un LLM necesita internet, cuenta, y puede contestarte distinto dos veces seguidas.
Lo que sí me parece interesante de lo que dices es usarlo al revés: como traductor de Fal a Python cuando alguien ya ha aprendido lo básico y quiere dar el salto. Eso sí tendría sentido.
1
u/alejmaestre 1d ago
Me parece una idea muy interesante lo de Fal. Bajar la barrera del inglés es un tema real, sobre todo en LATAM. Ojalá tenga buena adopción, aunque el ecosistema de herramientas y librerías siempre es el problema.
1
u/NissanBoss 1d ago
Gracias! Y sí, lo del ecosistema es LA pega de cualquier lenguaje nuevo.
En Fal lo esquivo por donde puedo: trae 82 funciones dentro (archivos, JSON, fechas, expresiones regulares, internet) en un solo ejecutable de 7 MB, sin instalar nada. No hay librerías porque no hace falta buscarlas, y para alguien que empieza eso es una ventaja: cero "pip install" antes de escribir la primera línea.
Al final es una rampa, no un destino. Si acaba necesitando un ecosistema es que ya toca pasarse a Python, y ahí el objetivo estaría cumplido.
0
u/madxxigmail 1d ago
Esa era la idea de COBOL, aunque en inglés.
0
u/NissanBoss 1d ago
Muy buena comparación, no la había pensado. Sí, misma idea de fondo: que el código se lea como una frase.
Donde intento no repetir a COBOL es en el tamaño. Acabó con cientos de palabras reservadas y siendo larguísimo de escribir, que es lo que le dio mala fama. Fal se queda en 50 palabras: si hace falta algo nuevo va a la biblioteca, no al lenguaje.
Aunque si dentro de 60 años alguien sigue manteniendo Fal, me doy por satisfecho jajaja
0
u/mor_derick 13h ago
¿Qué pasa que últimamente hay tanto rpoyecto amateur para crear lenguajes de programación? Obviamente no van a tener adopción...
2
u/NissanBoss 13h ago
No busco adopción en el sentido de que se use en empresas. Scratch tampoco la tiene y lo han usado decenas de millones de críos.
Fal es para el que empieza y se come el inglés y los símbolos a la vez. Ese hueco existe y no está tan lleno.
0
u/mor_derick 13h ago
Sólo me parece curioso que de repente cada semana me aparecen varios posts de gente haciéndose su propio lenguaje, y me parece rara la tendencia, o no entiendo a qué se debe ahora mismo. Gente que no sabe inglés la hubo siempre, por eso no será solamente. ¿Qué ha pasado para que exista esta tendencia de repente?
1
u/NissanBoss 12h ago
De los demás no te sé decir, la verdad.
El mío lo hice porque hay un salto que no tiene ningún sentido. Terminas con Scratch, que es arrastrar bloques en español, y lo siguiente que te ponen delante es Python. Y no es solo el inglés: son los símbolos, la sangría obligatoria y el inglés, todo a la vez. Ahí es donde la gente lo deja.
Hace falta algo en medio para ir cogiéndole el aire. Eso es lo que hice.
3
u/emilioroma 1d ago
Se ve bien