Despacito es un lenguaje de programación basado en la cultura latinoamericana, de código libre y open source (licencia BSD). Despacito es turing-completo, compilado, estáticamente tipado, y tiene soporte de arreglos, funciones y recursión.

El compilador de Despacito se encuentra implementado en Python 3 en poco más de 1000 líneas de código, sin utilizar librerías externas ni expresiones regulares. El código fuente está en GitHub:

https://github.com/Despacito-Lang/Despacito

El código fuente de Despacito es copyright (c) 2019, Alejandro Santos.

Introducción

La mejor forma de introducir el lenguaje es con el clásico programa Hola, Mundo!:

ay Esto es un comentario!

despacito ProgramaHolaMundo
bailar
    respirar
    firmar ("Hola, mundo!\n")

Similar al lenguaje Python, la identación de código es parte del lenguaje. Un bloque de código comienza con bailar y debe tener al menos una sentencia. La sentencia respirar no hace nada, y es equivalente al pass de Python.

El lenguaje Despacito es compilado y estáticamente tipado, y por el momento el compilador de referencia produce código C. Entonces, para ejecutar programas Despacito hace falta un compilador del lenguaje C. Por ejemplo con gcc:

$ ./despacito.py ejemplos/helloworld.despacito > hello.c
$ gcc -Wall -Wextra -o hello hello.c 
$ ./hello 
Hola, mundo!

acuerdate (variables)

Las variables hace falta declararlas con un tipo de datos adecuado mediante un bloque de acuerdate, el nombre de la variable, el uso de la palabra clave conmigo seguido del tipo de datos. El tipo de datos entero es un alias de un int en C, pero tambien es posible usar los mismos del lenguaje C. Al momento, los nombres de operadores, variables, tipos de datos y nombres de funciones no permiten acentos.

La asignación de valores se hace con el operador es, y los operadores aritméticos son: mas, menos, por, div y mod, y siguen las reglas clásicas de precedencia.

ay programa uno.despacito

despacito ProgramaUno
acuerdate
    x conmigo entero

bailar
    x es 10 mas 5 por (1 mas 1)
    firmar ("El valor de x es %d\n", x)

La salida del programa uno.despacito:

$ ./despacito.py uno.despacito > uno.c
$ gcc -Wall -o uno uno.c 
$ ./uno 
El valor de x es 20

arreglos

Para crear un arreglo hace falta indicar su tamaño mediante el uso de paréntesis. Los arreglos, al igual que en el lenguaje C, comienzan con el índice cero.

ay programa dos.despacito

despacito ProgramaDos
acuerdate
    x conmigo entero(10)

bailar
    x(3) es 1234
    firmar ("El valor de x(1) es %d, y x(3) es %d\n", x(1), x(3))

La salida del programa dos.despacito:

$ ./despacito.py dos.despacito > dos.c
$ gcc -Wall -o dos dos.c
$ ./dos
El valor de x(1) es 0, y x(3) es 1234

quiero

La estructura de selección (o sea, el if de Python) se hace con quiero, seguido de la condición, seguido del código identado. Cuando la condición es verdadera, el bloque se ejecuta. Usando sino es posible indicar el caso contrario, ya sea con una expresión, o sin ninguna expresión. Los operadores condicionales son: igual, mayor, y menor.

ay programa tres.despacito

despacito ProgramaTres
acuerdate
    i conmigo entero

bailar
    i es 2020
    quiero (i mod 3) igual 0
        firmar ("i es divisible por 3\n")
    sino (i mod 2) igual 0 
        firmar ("i es divisible por 2\n")
    sino
        firmar ("i es: %d\n", i)

La salida del programa tres.despacito:

$ ./despacito.py tres.despacito > tres.c
$ gcc -o tres tres.c 
$ ./tres
i es divisible por 2

pasito

Para repetir un bloque de código una cantidad limitada de veces se puede usar la estructura pasito con una expresión de tipo entero. La expresión se evalúa una sola vez al comenzar el bloque:

ay programa cuatro.despacito

despacito ProgramaCuatro
bailar
    pasito 10
        firmar ("hola, ")

La salida del programa cuatro.despacito:

$ ./despacito.py cuatro.despacito > cuatro.c
$ gcc -Wall -o cuatro cuatro.c 
$ ./cuatro
hola, hola, hola, hola, hola, hola, hola, hola, hola, hola, 

repetir

Para repetir un bloque de código mientras una condición sea verdadera se puede usar la estructura mientras con una expresion de tipo booleana. La expresión se evalúa siguiendo las reglas normales de un while.

ay programa cinco.despacito

despacito ProgramaCinco
acuerdate
    i conmigo entero
bailar
    i es 0
    mientras i menor 10
        firmar ("hola %d, ", i)
        i es i mas 1

La salida del programa cinco.despacito:

$ ./despacito.py cinco.despacito > cinco.c 
$ gcc -Wall -o cinco cinco.c 
$ ./cinco 
hola 0, hola 1, hola 2, hola 3, hola 4, hola 5, hola 6, hola 7, hola 8, hola 9, 

mirada (funciones)

Para modularizar el código se hace con la palabra clave mirada, seguido del tipo de datos de retorno de la funcion y opcionalmente los parámetros de la mirada separados por comas:

ay Implementacion de FACTORIAL

despacito Factorial

mirada entero fact x conmigo entero
bailar
    quiero x mayor 1
        fact es x por fact(x menos 1)
    sino
        fact es 1

bailar
    firmar ("%d\n", fact(6))

La salida del programa factorial.despacito:

$ ./despacito.py factorial.despacito > factorial.c
$ gcc -Wall -Wextra -o factorial factorial.c 
$ ./factorial 
720