Si hacemos un repaso rápido de los lenguajes de programación más comunes verás que, incluso ciñéndonos a los más conocidos que vienen a la cabeza de inmediato, son un montón de ellos:
Java, C#, Visual Basic, C, C++, JavaScript, Python, Perl, Ruby, Swift, Objective-C, PHP, Delphi/Pascal, Ensamblador...
Sólo en esta lista ya hay 14.
Pero en realidad la lista de lenguajes de programación es enorme. En la Wikipedia se recogen nada menos que 700 lenguajes de programación diferentes, que puedes examinar alfabéticamente, por categoría o paradigma, cronológicamente (¿sabes cuál es el más nuevo de todos?: Swift) o incluso atendiendo a su genealogía.
Bueno, pues además de estos 700 lenguajes, existe toda una categoría aparte de lenguajes de programación llamados esotéricos.
Los lenguajes de programación esotéricos (también llamados "esolenguajes" o "esolangs") son lenguajes poco útiles en la vida real pero que se han diseñado para crear pruebas de concepto, ver hasta dónde es posible llevar un concepto de diseño de compiladores o análisis sintáctico, para hackear otros lenguajes, como forma de arte, o incluso como un tipo de broma "geek".
La facilidad de uso de estos lenguajes no es uno de sus objetivos. Más bien lo normal es que sea justo lo contrario. Hoy en día existen ya tantos que ni siquiera la Wikipedia los tiene recopilados. Sin embargo, Internet nunca defrauda, y por supuesto existe una página, Esolang.org, en la que una serie de "geeks" muy implicados está manteniendo en forma de Wiki una gran colección de este tipo de lenguajes, con información, documentación y ejemplos de cada uno de ellos. Actualmente disponen de más de 1.035 lenguajes de programación esotéricos catalogados :-O
¿Sabes cómo se crea un "Hola Mundo" en alguno de esos lenguajes? Puedes alucinar...
Algunos ejemplos:
asdf
Este lenguaje utiliza solo 4 instrucciones para mover punteros en la memoria, cambiar bits y limpiar indicadores. Con eso es capaz de hacer un montón de cosas. El "Hola mundo" sería así:
asaasaasssasaasssasaaaasssasaasssasaaaaaaaasssasaaaasssasaaaasssasaasssasaasss
asaasssasaasssasaaaasssasaasssasaaaasssasaaaaaasssasaaaasssasaasssasaaaasssasa
aaaaasssasaaaasssasaasssasaaaaaaaasssasaaaasssasaasssasaasssasaaaasssasaaaaaaa
asssasaasssasaaaaaaaaaaaasssasaaaaaasssasaasssasaaaaaasssasaasssasaaaasssasaas
ssasaaaaaaaasssasaasssasaaaaaasssasaaaasssasaasssasaaaasssasaaaasssasaasssasaa
aasssasaaaaaasssasaaaasssasaaaasssasaasssasaaaaaaaasssasaasssasaaaaaaaasssasaa
¿Cómo distinguirlo de un típico texto malo de prueba? :-S
BiTrax
Este lenguaje bi-dimensional simula el trabajo en una cinta de memoria plana, lineal e infinita, en donde cada posición de la memoria contiene dos posibles valores (0 o 1) y en la que el color de cada celda, representado por un pixel, es una instrucción. En total hay 7 colores y por lo tanto 7 instrucciones.
Nuestro programa de ejemplo en este lenguaje sería:
aunque la imagen está aumentada varias veces ya que en el original cada cuadradito sería un píxel, y por lo tanto todo muy pequeño.
Brainfuck
Este es quizá el más famoso de los lenguajes esotéricos. Nació en 1993 como un intento de crear el compilador más pequeño posible para un lenguaje de programación en los computadores Amiga. Su creador consiguió crear un compilador que ocupaba tan solo ¡240 bytes!. Impresionante.
El ejemplo universal en este lenguaje sería:
++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>.
Como parte de su nombre es una palabra muy "fea" en inglés, es hasta difícil encontrar información sobre el mismo en la Web, pero si te interesa aquí tienes un enlace con documentación.
Daoyu
Se trata de uno de los lenguajes esotéricos más recientes, pues se creó en 2016. Sigue los principios de la filosofía de vida Taoista: la unidad absoluta, el minimalismo...
Este es su "Hola mundo":
))))))))/:((((((S...............
%(>#>[>[>;/.==>;=/>[>%/!.:......
Entre sus características están:
- No existen las asignaciones numéricas
- No hay operaciones matemáticas
- No se permite el acceso aleatorio a la memoria
- Condicionales limitados
- Se trata de manera igualitaria a todos los programas y datos
Filosofía pura ;-)
Flip
Se trata de otro lenguaje bidimensional en el que disponemos de bolas que portan valores y que colisionan con otros elementos en un campo de juego. También existen "flippers" que permiten cambiar las paredes en las que rebotan las bolas. Es algo así como programar jugando al billar o a una máquina del millón.
Ahí va nuestro ejemplo:
>0> 5+ \
@'+
>0>4*+\
+, / /
vXv/ /
\ \ \ \ \ \ \ \ \ \ \ \ \ \
4@ 6@ 7@ 7@ 7@ 0@ 5@ 7@ 8@ 7@ 6@ 0@ 2@
*<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~<<
P++<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<~<<
Q 0@ 9@ 6@ 6@ 9@ 0@ 5@ 9@ 2@ 6@ 8@ 1@ 2@
\ / / / / / / / / / / / / /
Alucinante...
Gravity
Este lenguaje de programación se basa en una idea de Newton, y es completamente distinto a cualquier otro lenguaje de programación ya que, aunque su comportamiento está bien definido y es determinista, la evolución de su espacio no es computable debido a las ecuaciones diferenciales en las que se basa.
(0,0) : 2
(1,1,1,1, 2) -> 3 : 72
(1,1,1,1, 3) -> 4 : 101
(1,1,1,1, 4) -> 5 : 108
(1,1,1,1, 5) -> 6 : 108
(1,1,1,1, 6) -> 7 : 111
(1,1,1,1, 7) -> 8 : 32
(1,1,1,1, 8) -> 9 : 119
(1,1,1,1, 9) -> 10 : 111
(1,1,1,1,10) -> 11 : 114
(1,1,1,1,11) -> 12 : 108
(1,1,1,1,12) -> # : 100
Su ejecución se basa en la simulación de los efectos de la gravedad en un número infinito pero contable de partículas.
Mycelium
Este es un lenguaje basado en imágenes, en el que las instrucciones se leen desde una imagen en formato PNG. Dado que hay libertad en cuanto a los colores de cada pixel necesarios para crear una instrucción, se pueden esconder programas enteros en una fotografía. Es bastante complicado, pero puede tener ciertas utilidades. Puedes conocer más detalles aquí.
Nuestro saludo universal tiene esta pinta en este lenguaje:
La imagen está ampliada 30 veces porque en su tamaño normal mide tan solo 7x4 pixeles.
Pi
Este te encantará si eres matemático... Es una variante de BrainFuck que introduce codificadas las instrucciones base de ese otro lenguaje dentro de los dígitos (infinitos) del número Pi, incluyendo errores en algunos dígitos aleatorios para ofuscar más aún el programa.
Un "Hola Mundo" dentro de Pi tendría esta pinta:
3.1415926535897932384226433232725028841271693992751358239749245923072164062
822089986780348053431120629821483865332223366470908446395535832317223594083
284831172502841037019385311052596446029489529303219642288009756259134461214
751482337817834652812009021456285664234613486134553226482133236073603491413
737242870066363155841744815239239622292545917053643278925902605113301301488
204625213821429519415316024320522703627595939530921261373219226137931021185
580744023794627495273518257527348912274384830113491298346743644406563430865
2133494633522473749030217386093370277033921317659317670238267581846066440
Una pequeña locura, pero que puede esconder instrucciones en el lugar más insospechado.
Tree
Árbol en inglés, este lenguaje está pensado para que el código quede siempre formando bonitos árboles y además está hecho a propósito para que no sea Turing Completo.
Mira qué preciosidad es el "Hola Mundo":
^
^^|^^
^^\|/^^
H^ |/^^^
\| e
|/
ol~|
\|
, 32| W
\/ | /
\ |/
l \|
\ d | o
\/ !|r /
\/ |\/
\ |/
\|
Si te interesa la naturaleza, quizá este sea tu lenguaje ;-) Aquí tienes más detalles.
Unicat
Otro lenguaje raruno, esta vez para los amantes de los gatos. Las instrucciones de Unicat son exclusivamente 9 emoticones de gatos. Se hace caso omiso de cualquier otro carácter que escribamos, así que podríamos insertar comentarios donde quisiéramos.
El programa patrón tiene este aspecto:
Y tenemos un intérprete, documentación y ejemplos en GitHub.
Más ejemplos
¿Cómo te has quedado? Aquí tan solo te hemos dejado 10 ejemplos, pero en la página de esolangs tienes un "Hola mundo" escrito en más de 200 lenguajes esotéricos.
Más allá de su utilidad práctica, algunos de ellos son experimentos interesantes en teoría de compiladores o intérpretes, y otros son un mero divertimento. En esta página te puedes pasar un largo rato buceando entre ellos y descubriendo cosas raras.
¡Que te diviertas!
Créditos de la fotografía "Hidden Mystique": Fayez