Lenguajes de programación esotéricos

Imagen usada únicamente para atraer a los curiosos.

Imagen usada únicamente para atraer a los curiosos.

Probablemente el título de esta entrada los remita a anuncios de revistas sensacionalistas o charlatanería. Algunos seguramente pensaron en algún lenguaje extraño llamado Voodoo.js o Ouijaskell, con los que podrías invocar recursivamente a algún ser demoníaco antes de un probable “stack overflow”.  Sin embargo, temo decepcionar a más de uno, pues no es ese el sentido del tema a tratar. En esta entrada explicaremos brevemente qué son los lenguajes de programación esotéricos y algunos ejemplos curiosos de lenguajes que pertenecen a esta categoría.

Uno de los significados de la palabra esotérico, y que es el que nos interesa, es: “Que es impenetrable o de difícil acceso para la mente”. Los lenguajes de programación esotéricos son aquellos lenguajes que fueron diseñados únicamente para probar los límites del diseño de los lenguajes, como pruebas de concepto o en algunos casos simplemente como una broma o pasatiempo. Lo que tienen en común estos lenguajes y lo que les da su denominación de esotéricos es el hecho de que son muy difíciles de entender y es casi imposible programar algo útil con ellos, pero eso sí, tienen todo el poder de cualquier otro lenguaje de programación al ser Turing completos.

A continuación se enlistan algunos de los lenguajes esotéricos más conocidos con una breve descripción y un ejemplo del famosísimo “Hello World” en cada uno de estos lenguajes. Si no entiendes alguno de los ejemplos no te preocupes, es normal, pues como ya se mencionó, es la finalidad de estos lenguajes.

INTERCAL

El mas antiguo de estos lenguajes se llama INTERCAL, creado en 1972 por Don Woods y James M. Lyon, simplemente para hacer una parodia de los lenguajes de programación existentes en la época y al mismo tiempo crear uno diferente a todos los habidos. El clásico “HelloWorld!” en este lenguaje se ve así:

DO ,1
PLEASE DO ,1
SUB #1 DO ,1
SUB #2 DO ,1
SUB #3 DO ,1
SUB #4 DO ,1
SUB #5 DO ,1
SUB #6 DO ,1
SUB #7 PLEASE DO ,1
SUB #8 DO ,1
SUB #9 DO ,1
SUB #10 DO ,1
SUB #11 DO ,1
SUB #12 DO ,1
SUB #13 PLEASE READ OUT ,1
PLEASE GIVE UP

Un detalle interesante de este lenguaje es que no únicamente hubo un esfuerzo para crearlo, sino que también se dedicaron arduamente a la creación de un manual de referencia que, aunque lleno de irracionalidades y excentricidades, se distribuye bajo licencia GPL.

Brainfuck

Creado en 1993 por Urban Müller, este lenguaje, como su nombre lo indica, fue diseñado para dar unos cuantos dolores de cabeza a quien intente usarlo. Y no es para menos, aquí el tradicional “Hello World”:

+++++ +++++             initialize counter (cell #0) to 10
[                       use loop to set the next four cells to 70/100/30/10
    > +++++ ++              add  7 to cell #1
    > +++++ +++++           add 10 to cell #2
    > +++                   add  3 to cell #3
    > +                     add  1 to cell #4
    <<<< -                  decrement counter (cell #0)
]     > ++ .                print 'H'
> + .                   print 'e'
+++++ ++ .              print 'l'
.                       print 'l'
+++ .                   print 'o'
> ++ .                  print ' '
<< +++++ +++++ +++++ .  print 'W'
> .                     print 'o'
+++ .                   print 'r'
----- - .               print 'l'
----- --- .             print 'd'
> + .                   print '!'
> .                     print 'n'

Todo lo que ven a la derecha de este código son meros comentarios que tratan de explicar qué es lo que hace el programa. Lo interesante de Brainfuck es su minimalismo, pues el lenguaje está conformado únicamente por 8 instrucciones y 8 respectivos carácteres que las representan. Al ser un lenguaje tan complicado, hay quienes lo han tomado como un reto personal y han escrito código útil con este lenguaje. Se cuenta con una versión del algoritmo de descifrado DeCSS (el que se utiliza para la lectura de DVD’s) en este lenguaje.

Befunge

Este lenguaje, nacido en el mismo año que Brainfuck y cuyo autor es Chris Pressey, tomó como meta el ser el lenguaje más complicado de compilar. La idea de Befunge es tomar el código como un arreglo bidimencional y comenzar a vaciar instrucciones que serán ejecutadas de acuerdo a la guía dada por carácteres específicos (<,v,>,^). Para los que estén familiarizados un poco con lenguajes de ensamblador, befunge es también un lenguaje que se basa en pilas (stack). Aquí dos ejemplos de “Hello World!” en este lenguaje:

&amp;amp;gt;              v
v  ,,,,,&amp;amp;quot;Hello&amp;amp;quot;&amp;amp;lt; &amp;amp;gt;48*,v
v,,,,,,&amp;amp;quot;World!&amp;amp;quot;&amp;amp;lt; &amp;amp;gt;25*,@
&amp;amp;gt;25*&amp;amp;quot;!dlrow ,olleH&amp;amp;quot;:v
                 v:,_@
                 &amp;amp;gt;  ^

Este lenguaje tiene toda una familia de variantes, a las que se les conoce como Funges. Estas variantes retoman la idea de apuntar a la siguiente instrucción en diferentes sistemas coordenados.

Malbolge

Esta malévola invención de Ben Olmstead surgió en el año de 1998. Tiene este nombre en honor de “el octavo círculo del infierno” en “La divina comedia”. De infernal tiene bastante, pues el propósito de este lenguaje era el de ser uno en el que fuera imposible escribir algo útil. El “Hello World!” se consiguió con ayuda de un algoritmo de búsqueda implementado en LISP y es algo como esto:

('&amp;amp;amp;%:9]!~}|z2Vxwv-,POqponl$Hjig%eB@@&amp;amp;gt;}=&amp;amp;lt;M:9wv6WsU2T|nm-,jcL(I&amp;amp;amp;%$#&amp;amp;quot;`CB]V?Tx

No voy a ahondar en detalles sobre este lenguaje. Creo que el ejemplo deja en claro lo difícil que es. Como nota adicional, este lenguaje tiene una limitación en la cantidad de memoria que puede manejar, por lo que no es Turing completo.

Después de estos lenguajes espero que aquellos que se quejan de Java por ser tan verboso lo valoren un poco mas. Aunque hay más lenguajes de este estilo podemos encontrar otros rubros, en particular pasemos ahora a algunos que podemos considerar un tanto más artísticos.

Shakespeare

Diseñado por Jon Åslund and Karl Hasselström por el año 2001, la intención de este lenguaje es sacar al escritor que todo Hacker lleva dentro. La idea es generar código tan bello que se parezca a las obras de Shakespeare. Veamos si lo logra con el clásico ejemplo, “Hello World!”:

The Infamous Hello World Program.

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]

Como es de suponer, una buena parte de lo escrito son comentarios cuyo propósito es enbellecer el programa. Sin entrar en detalles de cómo funciona este lenguaje, cabe mencionarr que utiliza aritmética básica, IF y GOTO sin ningún otro tipo de estructura de control más sofisticada. Aunque no cuenta con un compilador, un programa transforma el código de Shakespeare a código en C.

Piet

Este colorido lenguaje inventado por David Morgan-Mar, debe su nombre al famoso pintor Piet Mondrian y se entiende este nombre simplemente con mirar el “Hello World!” de este lenguaje:

Aunque en vez de escribir “Hello World!” escribe “Piet”, este programa es, efectivamente, un mapa de bits cuyos colores se utilizan como instrucciones del lenguaje. Hay una paleta determinada de colores que sirven de instrucciones para que los programas escritos en Piet parezcan obras de arte abstracto.

Además de los lenguajes de programación esotéricos mencionados en esta entrada existen muchos más. Si alguien tiene el interés de seguir explorando el mundo esotérico de los lenguajes de programación, dejo aquí el enlace para una Wiki que se dedica exclusivamente a ellos: http://esolangs.org

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s