<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Nissan</title>
    <description>The latest articles on DEV Community by Nissan (@nissanboss).</description>
    <link>https://dev.to/nissanboss</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4059038%2F02d1c551-c78a-48fa-921b-51aab96cc9f3.png</url>
      <title>DEV Community: Nissan</title>
      <link>https://dev.to/nissanboss</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nissanboss"/>
    <language>en</language>
    <item>
      <title>Fal | Creé un lenguaje de programación sin símbolos, y la parte más difícil fue la palabra "y"</title>
      <dc:creator>Nissan</dc:creator>
      <pubDate>Sun, 02 Aug 2026 12:07:33 +0000</pubDate>
      <link>https://dev.to/nissanboss/i-built-a-programming-language-with-no-symbols-and-the-hardest-part-was-the-word-and-3ioh</link>
      <guid>https://dev.to/nissanboss/i-built-a-programming-language-with-no-symbols-and-the-hardest-part-was-the-word-and-3ioh</guid>
      <description>&lt;p&gt;Soy español y no paraba de ver cómo la gente a mi alrededor intentaba aprender a programar y terminaba rindiéndose. Y no porque los bucles fueran difíciles, sino porque estaban aprendiendo dos cosas a la vez: el concepto en sí y qué narices significa &lt;code&gt;while&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Así que creé Fal. Todo con palabras, en español y sin un solo símbolo.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;si edad es mayor que 18
    escribe "Puedes pasar"
si no
    escribe "Todavía no"
fin
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Se ejecuta directamente en el navegador si quieres echarle un vistazo y trastear con él:&lt;br&gt;
&lt;a href="https://github.io" rel="noopener noreferrer"&gt;https://github.io&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Hubo dos cosas que no vi venir para nada.&lt;/p&gt;
&lt;h2&gt;
  
  
  La palabra "y" casi se carga el proyecto
&lt;/h2&gt;

&lt;p&gt;En Fal, la &lt;code&gt;y&lt;/code&gt; sirve tanto para el "Y" lógico (AND) como para separar argumentos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;si a y b           # AND lógico
suma con 1 y 2     # separador
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Por lo tanto, la &lt;code&gt;y&lt;/code&gt; era una palabra reservada y no podías llamar a una variable &lt;code&gt;y&lt;/code&gt;. Una faena en cuanto necesitas usar coordenadas. Asumí que no tenía solución y pasé a otra cosa.&lt;/p&gt;

&lt;p&gt;Entonces, el autor de EsJS apareció en un hilo y me dijo que el contexto debería decidir qué es, no una lista de palabras reservadas. Tenía toda la razón del mundo, y la solución fue hasta vergonzosa: como palabra clave, la &lt;code&gt;y&lt;/code&gt; siempre es infija (va en medio), siempre viene después de algo. Como nombre de variable, siempre va en el lugar donde esperas un valor. El parser (analizador de código) ya sabía exactamente qué estaba buscando en cada momento.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;escribe x y y            # "x Y la variable y"
tipo Punto con x y y     # campos x e y
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Los decimales exactos eran una simple nota al pie que se convirtió en la función estrella
&lt;/h2&gt;

&lt;p&gt;Un número se gestiona como un int64 mientras quepa; en cuanto aparecen decimales, pasa a ser un racional exacto, y solo recurre a un float (coma flotante) cuando no hay una respuesta exacta posible.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;escribe 0.1 mas 0.2             # 0.3
escribe (0.1 mas 0.2) es 0.3    # verdadero
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Parece un truco de magia barato. Pero luego escribí un ejemplo que sumaba 23 gastos desde un archivo CSV: Fal devolvió 1546.19 y las categorías cuadraron al céntimo. Las mismas sumas usando floats dan 1546.1900000000005, lo que hace que ya no cuadre con sus propias partes.&lt;/p&gt;

&lt;p&gt;Sé perfectamente que Decimal y BigDecimal existen en todos lados. La diferencia es que un chaval que está sumando dos precios no tiene por qué saber ni que existen.&lt;/p&gt;

&lt;h2&gt;
  
  
  Lo que NO es
&lt;/h2&gt;

&lt;p&gt;Nadie va a lanzar software en producción con esto. Es un intérprete que recorre el árbol de sintaxis (tree-walking interpreter), unas 8 veces más lento que Python y sin ecosistema de paquetes. Es una rampa de lanzamiento. Si alguien entiende lo que es un bucle gracias a esto y luego da el salto a Python, habré cumplido mi objetivo.&lt;/p&gt;

&lt;p&gt;Hecho en Go, unas 5800 líneas de código y cero dependencias. El código fuente está aquí:&lt;br&gt;
&lt;a href="https://github.com" rel="noopener noreferrer"&gt;https://github.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Si crees que la solución que le di a la &lt;code&gt;y&lt;/code&gt; tiene algún fallo oculto, soy todo oídos.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>go</category>
      <category>showdev</category>
      <category>beginners</category>
    </item>
  </channel>
</rss>
