Actualidad42 Madrid

La diversión, y la locura, de los lenguajes de programación esotéricos (I)

¿Cuáles son los lenguajes de programación más difíciles de aprender? Algunos dirán que es el vetusto Fortran, los estudiantes de 42 Madrid dirán que es C con sus punteros y otros programadores afirmarán que es C++. Sin temor a equivocación, ninguno de ellos puede hacer frente en complejidad a los llamados lenguajes esotéricos o esolangs. Los siguientes ejemplos parecen una broma, pero no lo son.

Para rendir homenaje al concepto de casi todos los lenguajes de programación esotéricos, se podría hacer una suerte de trabalenguas ya que un lenguaje esotérico es un lenguaje de programación diseñado para desafiar las normas del diseño del lenguaje. En otras palabras, es un lenguaje no diseñado específicamente para soluciones eficientes o elegantes de problemas computacionales, sino para explorar las ideas básicas detrás de la teoría de la computación u…otras extrañas ideas. Por ejemplo, sintaxis que recuerdan a recetas de cocina, emojis de gatitos o el Correcaminos. El mismo del beep,beep. Evidentemente, sería lícito pensar que muchas de las personas que diseñaron estos lenguajes no tenían nada mejor que hacer con su tiempo, pero no hay que dejarse llevar por lo obvio: detrás de cada uno hay una intención, aunque sea hacernos perder el tiempo al resto.

La lista de lenguajes disponibles en el currículo de 42 Madrid es extensa. Aunque los primeros niveles y el cuerpo común a todos los campus de la 42 Network está estructurado en lenguaje C, llega un momento en el que los estudiantes deben elegir en qué ramas tecnológicas desean especializarse y qué otros lenguajes quieren explorar. Por eso decimos que es una metodología pedagógica en el que las personas son el centro de su toma de decisiones. De igual manera, al ser 42 Madrid una iniciativa de Fundación Telefónica englobada dentro del área de Empleabilidad, las competencias técnicas y transversales que se fomentan son las más adecuadas para satisfacer las demandas del mercado laboral. Por lo tanto, y aunque se vayan actualizando constantemente, los contenidos no han dejado lugar todavía para estos lenguajes de programación tan discutibles. ¿Llegará el día?

Además, y ante lo que se pudiera pensar a priori, la mayoría de estos lenguajes son Turing Completo. Ser Turing Completo significa que es un sistema en el que se puede escribir un programa que encontrará una respuesta, aunque sin garantías con respecto al tiempo de ejecución o la memoria. Básicamente, es como una garantía de que están realmente elaborados. Sobra explicar que la usabilidad rara vez es un objetivo tenido en cuenta por los diseñadores de esolangs. No hay que preocuparse, de momento no se conoce ninguna empresa que los tenga entre sus requisitos de contratación. Por supuesto, si esto llegara a suceder, se añadirían a los contenidos del currículo de 42 Madrid, como ya hemos planteado.

Debido al caos y singularidad de todos ellos, no se ha adoptado ninguna manera de clasificarlos ya que, por definición, desafían todas las reglas. En cualquier caso, en el escenario de que fuera posible, pronto alguien inventaría un nuevo lenguaje con la única intención de invalidar la clasificación.

Aunque existen más de mil lenguajes de programación esotéricos, daremos cuenta de algunos de los más interesantes en esta y próximas publicaciones. Algunos de ellos están diseñados con un propósito determinado, otros para testar un concepto o probar algo, los que menos tienen intenciones puramente artísticas y, los que más, solo sirven para demostrar que los programadores tienen un sentido del humor muy particular.

Brainfuck

Es, posiblemente, el más famoso de los lenguajes esotéricos. De hecho, muchos de ellos se desarrollan a partir de Brainfuck. Nació en 1993 como un intento de crear el compilador más pequeño posible para un lenguaje de programación en los ordenadores personales Commodore Amiga. Su perpetrador consiguió crear un compilador que ocupaba tan solo 240 bytes. Un logro digno de admiración que no se extendió a su nombre, que no traduciremos al castellano. Brainfuck se basa en un modelo de ejecución simple que consiste, además del programa, de un vector de al menos 30 000 bytes inicializados a cero, un puntero sobre ese vector, que al comienzo de la ejecución apunta al primer elemento del vector, y dos corrientes de bytes para la entrada y la salida. La documentación online tampoco es muy extensa, pero existe.

Pi

Una variante de Brainfuck que introduce codificadas las instrucciones base de ese otro lenguaje dentro de los dígitos del número Pi, incluyendo errores en algunos dígitos aleatorios para trastornar más aún el programa. No hay que olvidar que el número Pi es un número irracional. No sigue ningún patrón y tiene un número infinito de cifras. Un caramelo muy dulce para los matemáticos.

Tree

Con una traducción más bondadosa que Brainfuck, este lenguaje está pensado para que el código acabe siempre formando bonitos árboles. Como curiosidad adicional, está hecho a propósito para que no sea Turing Completo. Para los concienciados con el cambio climático, programadores del medio agrícola o para interesados en el medio natural. Más información en Wikipedia.

Chef

Programas escondidos en recetas de cocina muy apetitosas a priori. Ideal para programadores que aspiran también a ser cocineros estrella, seguidores de realities gastronómicos o neófitos de los fogones. Un programa-receta escrito en Chef debe estar formado por un título, unas variables con sus correspondientes valores, que harán las veces de los ingredientes, y una lista de manipulaciones de pila, véase los pasos a seguir. Como no podía ser de otra manera, se pueden consultar las instrucciones para convertirse en un gran cocinero. Se desconoce si el creador de este lenguaje buscaba que resultara apetecible antes que funcional, pero, en cualquier caso, el resultado es una pesadilla en la cocina….

Trollscript

Otro “dialecto” del Brainfuck. Necesita ser instalado como una gema de Ruby y todos los scripts empiezan con Tro y terminan con ll. Se le suma el hecho de que sólo puede programarse modificando punteros y direcciones de memoria. ¿Útil, divertido, una oda a la procrastinación? Dentro del fascinante mundo de los lenguajes de programación esotéricos, no importa. Para hacerse una idea, esta es su sintaxis:

  • 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

Malbolge

El nombre ya infunde respeto, temor e, incluso, desconcierto ya que es difícil acertar con su pronunciación correcta. Malbolge es un lenguaje cruel y malévolo inspirado en el Octavo Círculo del Infierno de la ‘Divina Comedia’ de Dante Alighieri, donde se clasifican los pecadores según su crimen antes de que se le imponga un castigo acorde. En el infierno de los programadores, Malbolge es el lenguaje común.

Fue concebido sin que existiera un compilador oficial para él ni una lista concreta de instrucciones. Es más, estas cambian según su posición, pero no su posición en el programa sino en la memoria de la máquina. Es el lenguaje de programación más difícil del mundo y con una sintaxis cimentada en técnicas criptográficas. Ni el mismísimo Lucifer del poema de Dante sería tan despiadado. Honrando a la verdad, sí que es cierto que existe un compilador pirata para Malbolge, si eso pudiera existir para cualquier lenguaje de programación esotérico. Se creó aprovechando un error de diseño del propio lenguaje, pero es algo más infernal que el infierno. Sí.

Shakespeare

Críticos y teóricos literarios de todo el planeta sitúan a Dante Alighieri en la cúspide de su «canon occidental» junto a otro autor, William Shakespeare. Por lo tanto, si uno tiene relevancia en el mundo de la programación, el otro no se merece menos. El Shakespeare utiliza un lenguaje culto y elegante en su código ya que está inspirado por los personajes y tramas del más célebre dramaturgo en lengua inglesa de la historia. Es curioso que el mismo creador de Chef sea también el artífice de este lenguaje tan rimbombante. Predilección por los placeres de la vida o mucho tiempo libre, quién sabe. Además, su funcionamiento es muy parecido: título, lista de personajes con sus descripciones y finalmente los actos y escenas necesarios. Un aviso para que los que quieran saber más de él: es bastante largo.

por Eduardo Santana