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.
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
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
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!
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
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 criptogáficas, pues al final nos queda un ¡Hola Mundo! tal que así:
Para habernos matado...
Más info | Malbolge
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
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
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
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
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
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
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.
.