Necesito tus botas, tu ropa y tu motocicleta - Fatal error: Number or Type of the parameters are wrong
Hay más lenguajes de programación que botellines. Los tenemos de bajo o de alto nivel, declarativos, procedurales, orientados a objetos... y tenemos los llamados lenguajes esotéricos, lenguajes peculiares de sintaxis muy básicas y alfabetos reducidos que casi parecen una trolleada de sus creadores (aunque suelen ser Turing completos, ojo). En este artículo que tienes entre manos vamos a listar y reseñar doce de estos lenguajes esotéricos para tu diversión, asombro y sorpresa.
Trollscript
Y claro, si hablamos de que los lenguajes esotéricos suenan a trolleada, nada mejor que empezar este recorrido con Trollscript. Se trata de un dialecto del popular Brainfuck (del que también hablaremos), se instala como una gema de Ruby y tiene una sintaxis tan sencilla como la que sigue:
-
ooo - Incrementa el puntero de datos a la siguiente celda a la derecha
-
ool - Decrementa el puntero de datos a la siguiente celda a la izquierda
-
olo - Incrementa en uno el byte apuntado
-
oll - Decrementa en uno el byte apuntado
-
loo - Saca el valor ASCII de la celda apuntada
-
lol - Acepta un byte de entrada guardando su valor en la celda apuntada
-
llo - Si el byte es cero, salta hacia adelante hasta encontrar la siguiente coincidencia
-
lll - Si el byte es cero, salta hacia atrás hasta encontrar la siguiente coincidencia
Los scripts empiezan con Tro y terminan con ll. Dicho esto, así quedaría un ¡Hola Mundo! en Trollscript:
Una curiosidad: este Trollscript tiene una licencia "Do What The Fuck You Want To Public License". Épico.
Más info | Trollscript, un lenguaje de programación para Trolls
Brainfuck
El padre de Trollscript y muchos otros fue diseñado por Urban Muller en 1993 basado en la maquina de Turing y desde entonces lleva haciendo honor a su nombre y jodiendo cerebros. Cuenta con sólo 8 instrucciones de un solo carácter cada una:
-
">" - Incrementa el puntero.
-
"<" - Decrementa el puntero.
-
"+" - Incrementa el byte apuntado.
-
"-" - Decrementa el byte apuntado.
-
"." - Escribe el byte apuntado en el flujo de salida.
-
"," - Lee un byte del flujo de entrada y lo almacena en el byte apuntado.
-
"[" - Avanza a la instrucción inmediatamente posterior al ] correspondiente si el byte actualmente apuntado es nulo (si es 0).
-
"]" - Retrocede a la instrucción inmediatamente posterior al [ correspondiente si el byte actualmente apuntado no es nulo (si es distinto de 0).
Un ejemplo de ¡Hola Mundo! en Brainfuck es tan bonito y edificante como esto:
Más info | Brainfuck
Ook!
Seguimos con otro lenguaje surgido a raíz de Brainfuck pero esta vez usando el vocabulario empleado por el bibliotecario del MundoDisco de Terry Pratchett. Este personaje no es precisamente Cervantes y sólo emplea tres vocablos: Ook., Ook! y Ook? Con estas palabras reservadas, el creador de Ook!, David Morgan-Mar, construye las ocho instrucciones de Brainfuck:
-
Ook. Ook? - Incrementa el puntero.
-
Ook? Ook. - Decrementa el puntero.
-
Ook. Ook. - Incrementa el byte apuntado.
-
Ook! Ook! - Decrementa el byte apuntado.
-
Ook! Ook. - Salida (ASCII) del byte apuntado.
-
Ook. Ook! - Entrada (ASCII) sobre el byte apuntado.
-
Ook! Ook? - Avanza a la instrucción inmediatamente posterior al Ook? Ook! correspondiente si el byte actualmente apuntado es cero.
-
Ook? Ook! - Retrocede a la instrucción inmediatamente posterior al Ook! Ook? correspondiente si el byte actualmente apuntado no es cero.
Con estos mimbres tenemos un ¡Hola Mundo! tal que así, belleza pura:
Pd: Yo sólo tengo controlado otro personaje de ficción con un vocabulario tan escueto: Groot de 'Los Guardianes de la Galaxia'. Y claro, también tiene su lenguaje de programación.
Pd2: ¿qué me olvido de Hodor? Para nada.
Más info | Ook!
Chicken
Venga, seguimos con lenguajes de programación con un vocabulario reducido, en esta ocasión una única palabra en inglés: chicken. Tampoco es que fuera muy misterioso cual es el nombre del lenguaje creado por el programador sueco Torbjörn Söderstedt inspirado por ese avícola paper de Doug Zongker.
A pesar de contar con un vocabulario tan escueto, Chicken dispone de 11 instrucciones que dependen del número de veces que aparezca la palabra chicken separada por espacios en blanco:
# | Descripción de la instrucción |
---|---|
0 | Se detiene la ejecución |
1 | Se imprime en pantalla la palabra "chciken" |
2 | Se suman los dos valores más arriba en la pila |
3 | Se restan los dos valores más arriba en la pila |
4 | Se multiplican los dos valores más arriba en la pila |
5 | Se comparan los dos valores más arriba en la pila |
6 | La siguiente instrucción indica la fuente desde la cual cargar. 0 cargas de la pila, 1 cargas del input del usuario. El valor más arriba de la pila apunta a la dirección / índice a cargar en la pila |
7 | El valor más arriba de la pila apunta a la dirección / índice donde almacenar. El valor a continuación se se "popeará" y se almacenará |
8 | El valor más arriba de la pila indica donde saltar si la condición siguiente es verdadera |
9 | Interpreta el valor más arriba de la pila como ASCII y "pushea" el correspondiente carácter |
10+ | "Pushea" el número literal n-10 en la pila |
El ¡Hola Mundo! con este lenguaje sería un trozo de código larguísimo así que casi mejor que os pongo la presentación de la que surgió todo. La gente, como se puede observar, se "despolla" bien a gusto.
Más info | Chicken
Chef
Programas escondidos en recetas de cocina, Chef es desde luego el lenguaje ideal para estos días de cocineros estrellas y audiencias masivas para programas gastronómicos. Creado por David Morgan-Mar, un programa-receta debe estar formado por un título, unas variables con sus correspondientes valores (los ingredientes) y una lista de manipulaciones de pila (los pasos a seguir). Un ejemplo de ¡Hola Mundo! sería algo como así:
El hacker-Chicote creador de Chef dice que los programas no sólo deben funcionar sino que deben parecer apetecibles. Hay gente para todo.
Más info | Chef
Malbolge
Un lenguaje inspirado (y bautizado) en el octavo infierno de 'La Divina Comedia' de Dante. Con eso debería bastar para tenerle miedo al lenguaje diseñado por Ben Olmstead en 1998. Si además añadimos que el bueno de Olmstead planeó que fuera el lenguaje de programación más difícil del mundo y para ello uso una sintaxis basada en técnicas criptográficas, pues al final nos queda un ¡Hola Mundo! tal que así:
Para habernos matado...
Más info | Malbolge
Whitespace
Un lenguaje cuyas tres únicas palabras reservadas son el espacio en blanco, el tabulado y el salto de línea suena a broma y de hecho fue publicado un 1 de Abril, el April's Fool, equivalente anglosajón a nuestro Día de los Santos Inocentes. Pero lo cierto es que funciona y aquí tenéis un ¡Hola Mundo! convenientemente tuneado para que esto no parezca uno de esos memes de hacer scroll:
Más info (y ejemplos) | Whitespace
Piet
Creado por el mismo señor que el anterior de la lista, David Morgan-Mar, Piet es un lenguaje cuya principal característica es que sus programas son bitmaps que simulan arte abstracto. El vocabulario está formado por 20 colores (nada de cosas raras en plan blanco roto o rosa palo) y el puntero varía dependiendo de la diferencia de tono e intensidad entre colores contiguos en el bitmap.
¿Cómo sería un ¡Hola Mundo! en este lenguaje bautizado como el pintor holandés Piet Mondrian? Pues así de psicodélico:
Más info | Piet
ArnoldC
La expresión anglosajona de "bigger than life" se creó para hablar de ArnoldC: un lenguaje de programación cuyas instrucciones son frases célebres de los personajes interpretados por Don Arnold Schwarzeneger (aka El Chuache) en la gran pantalla. Instrucciones tan épicas como:
-
False: I LIED
-
True: NO PROBLEMO
-
If: BECAUSE I'M GOING TO SAY PLEASE
-
Else: BULLSHIT
-
EndIf: YOU HAVE NO RESPECT FOR LOGIC
-
While: STICK AROUND
-
EndWhile: CHILL
-
PlusOperator: GET UP
-
MinusOperator: GET DOWN
-
MultiplicationOperator: YOU'RE FIRED
-
DivisionOperator: HE HAD TO SPLIT
-
ModuloOperator: I LET HIM GO
-
EqualTo: YOU ARE NOT YOU YOU ARE ME
-
GreaterThan: LET OFF SOME STEAM BENNET
-
Or: CONSIDER THAT A DIVORCE
-
And: KNOCK KNOCK
-
DeclareMethod: LISTEN TO ME VERY CAREFULLY
-
NonVoidMethod: GIVE THESE PEOPLE AIR
-
MethodArguments: I NEED YOUR CLOTHES YOUR BOOTS AND YOUR MOTORCYCLE
-
Return: I'LL BE BACK
-
EndMethodDeclaration: HASTA LA VISTA, BABY
-
CallMethod: DO IT NOW
-
AssignVariableFromMethodCall: GET YOUR ASS TO MARS
-
DeclareInt: HEY CHRISTMAS TREE
-
SetInitialValue: YOU SET US UP
-
BeginMain: IT'S SHOWTIME
-
EndMain: YOU HAVE BEEN TERMINATED
-
Print: TALK TO THE HAND
-
ReadInteger: I WANT TO ASK YOU A BUNCH OF QUESTIONS AND I WANT TO HAVE THEM ANSWERED IMMEDIATELY
-
AssignVariable: GET TO THE CHOPPER
-
SetValue: HERE IS MY INVITATION
-
EndAssignVariable: ENOUGH TALK
-
ParseError: WHAT THE FUCK DID I DO WRONG
Con semejante materia prima, un ¡Hola Mundo! es elegancia austriaca pura:
Si alguien sabe enumerar la peli de cada instrucción y luego hace un programa para las torres de Hanoi, lo consideraré mi Dios y le oraré cada noche.
Más info | ArnoldC, el lenguaje basado en frases de Arnold Schwarzeneger
Beatnik
Creado en el año 2000 por Cliff Biffle, la curiosidad de Beatnik radica en que utiliza palabras en inglés, les asigna valores como si del Scrabble o el Apalabrados se tratara y según el valor, entre 0 y 255, realizará una acción o función:
- < 5 -> No hace nada
- 5 -> Mete en la pila el valor de la siguiente palabra
- 6 -> Saca un número de la pila y lo descarta
- 7 -> Saca de dos números de la pila, los suma y mete el resultado
- 8 -> Introduce un carácter y mete su valor en la pila
Escribir un "¡Hola mundo!" en Beatnik es realmente largo así que nos conformaremos con un "¡Hola!":
Más info | Beatnik
Shakespeare
Nos vamos acercando al final y llega la hora de un lenguaje culto y elegante ya que está inspirado por los personajes y tramas del más célebre dramaturgo de la historia. Su funcionamiento es parecido al de Chef (mismo creador no en vano): título, lista de personajes con sus descripciones y finalmente los actos y escenas necesarios. ¿Qué no queda claro? Pues aquí un ejemplo de ¡Hola Mundo!:
Romeo, a young man with a remarkable patience.
Juliet, a likewise young woman of remarkable grace.
Ophelia, a remarkable woman much in dispute with Hamlet.
Hamlet, the flatterer of Andersen Insulting A/S.
Act I: Hamlet's insults and flattery.
Scene I: The insulting of Romeo.
[Enter Hamlet and Romeo] Hamlet: You lying stupid fatherless big smelly half-witted coward! You are as stupid as the difference between a handsome rich brave hero and thyself! Speak your mind! You are as brave as the sum of your fat little stuffed misused dusty old rotten codpiece and a beautiful fair warm peaceful sunny summer's day. You are as healthy as the difference between the sum of the sweetest reddest rose and my father and yourself! Speak your mind! You are as cowardly as the sum of yourself and the difference between a big mighty proud kingdom and a horse. Speak your mind. Speak your mind! [Exit Romeo] Scene II: The praising of Juliet. [Enter Juliet] Hamlet: Thou art as sweet as the sum of the sum of Romeo and his horse and his black cat! Speak thy mind! [Exit Juliet] Scene III: The praising of Ophelia. [Enter Ophelia] Hamlet: Thou art as lovely as the product of a large rural town and my amazing bottomless embroidered purse. Speak thy mind! Thou art as loving as the product of the bluest clearest sweetest sky and the sum of a squirrel and a white horse. Thou art as beautiful as the difference between Juliet and thyself. Speak thy mind! [Exeunt Ophelia and Hamlet]
Act II: Behind Hamlet's back.
Scene I: Romeo and Juliet's conversation.
[Enter Romeo and Juliet] Romeo: Speak your mind. You are as worried as the sum of yourself and the difference between my small smooth hamster and my nose. Speak your mind! Juliet: Speak YOUR mind! You are as bad as Hamlet! You are as small as the difference between the square of the difference between my little pony and your big hairy hound and the cube of your sorry little codpiece. Speak your mind! [Exit Romeo] Scene II: Juliet and Ophelia's conversation. [Enter Ophelia] Juliet: Thou art as good as the quotient between Romeo and the sum of a small furry animal and a leech. Speak your mind! Ophelia: Thou art as disgusting as the quotient between Romeo and twice the difference between a mistletoe and an oozing infected blister! Speak your mind! [Exeunt]
Un poco largo, ¿no? Para hacer una sucesión de Fibonacci lo mismo necesitas escribirte un tomo de 'Canción de Hielo y Fuego'...
Más info | Shakespeare
GRASS
Lenguaje creado en Japón en 2006 y cuya principal característica y aspecto diferenciador es que recrea la formación de la hierba usando tan sólo "W", "w" y "v". ¿Cómo se te ha quedado el cuerpo?.
Aunque parezca una chorrada como un piano, Grass es un lenguaje Turing completo basado en el cálculo lambda. Un ejemplo de código en Grass sería, por ejemplo, el siguiente:
Más info | Grass
reMorse / reMorse2
¿Fuiste a los boy scouts pero nunca le has sacado partido a ese código Morse chapucero que te enseñaron? Tranquilo porque reMorse es tu lenguaje. Tiene 4 instrucciones: punto, barra, barrapunto y puntobarra. Y a tirar millas.
reMorse2 es un dialecto de reMorse pero Turing completo (es decir sólo con punto y barra como instrucciones). Un ejemplo de código en este lenguaje sería:
Más info | reMorse
LOLCODE
Empezamos con trolls y terminamos volviendo al mundo de los memes ya que LOLCODE, diseñado en 2007 por Adam Lindsay, utiliza como palabras reservadas las frases, palabras y expresiones de los memes de gaticos y demás.
Su sintaxis es del siguiente modo:
-
HAI - Arranca el programa.
-
CAN HAS [LIBRARY]? - Pregunta si una librería (la de input/output, por ejemplo) está disponible, la carga si la respuesta es correcta y lanza una excepción ni no.
-
VISIBLE [MESSAGE] - Imprime un mensaje por pantalla.
-
KTHXBYE - Cierra el programa.
Por lo tanto un ¡Hola Mundo! a bote pronto sería:
A ver si algún developer patrio con insomnio nos deleita con un OLAKASE o similares, el público arde en deseos.
Más info | LOLCODE
¿Te has quedado con ganas de más? Pues el wiki ESOLANG, que recopila decenas, incluso centenares, de lenguajes esotéricos, te puede proporcionar horas y horas de entretenimiento, asombro e incluso inspiración. De nada.
Ver 51 comentarios