1. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 1
Programación Esotérica
Jesus Alberto Bautista Bellido
jesus61_1@hotmail.com
Juan Tipismana Lara
juan_16_2106@hotmail.com
Edson Elías Huamaní Aldoradín
edsel94@gmail.com
PROGRAMACION ESOTÉRICA: Una breve reseña
Estos lenguajes de programación esotéricos datan de la
década de los 70 en donde primero aparece el Intercal, a
partir de allí es que los programadores deciden dejar de
lado los lenguajes que ellos consideran aburridos como
Cobol, Basic, Fortran y deciden crear sus propios
lenguajes de programación donde prima la diversión
sobre la utilidad, además de suponer un desafío tanto
para quienes lo crean como para los que tratan de
entender esos lenguajes ya que poseen una sintaxis
detallada y su alfabeto es muy restringido lo que los hace
muy peculiares.
Estos lenguajes se encuentran en lo más recóndito de los
lenguajes de programación, es decir no se les toma
mucha importancia debido a que no son mucha utilidad
en la sociedad, mas pasan al olvido en la historia y
quedan como creaciones olvidadas de personas que
inventaron algo con que entretenerse en su momento, sin
embargo también existen otros que son tan absurdo que
no tiene caso entenderlos [1].
I. INTRODUCCIÓN
Programación esotérica es un lenguaje de programación
creado por usuarios con finalidad de satirizar a otros
lenguajes que existían en ese entonces como el Cobol,
Fortran, entre otros, o por el simple hecho de pasar el
rato poniendo a prueba su lenguaje con los límites de
sintaxis que puedan entender las personas haciendo que
estos lenguajes sean tan insólitos que se sorprenderán de
la utilidad que tienen. Estos lenguajes fueron creados
para entretener a las personas que quieren entender estos
lenguajes, ya que a veces no posee una lógica simple y
para entender los lenguajes complicados requiere mucho
tiempo hasta años (Malbolge), muchas personas se
desaniman en el trayecto e incluso en sus propias
páginas oficiales existen requerimientos mínimos que
deben saber cómo aprender otros lenguajes básicos como
los mencionados anteriormente pero siempre se
encontrará en esas páginas mensajes no muy alentadores
sino todo lo contrario desmotivan a las personas a que no
quieran intentarlo [2].
La mayoría de esos lenguajes no se pueden utilizar en el
ámbito empresarial, en el trabajo, o para resolver
operaciones comunes como suma, resta, multiplicación o
división ya que depende del lenguaje en cuestión si
acepta los caracteres comunes que permitan realizarla, es
más la utilidad que se les puede dar es creada por cada
usuario.
II. CONCEPTOS BÁSICOS
La programación esotérica se basa en algunos términos
que son importantes saberlos:
Turing Completo: Se dice que un lenguaje es “Turing
completo” cuando sobre este lenguaje se puede crear
cualquier tipo de algoritmo que se presente, pero no
necesariamente lo más óptimo [3].
Esolang: Son lenguajes de programación esotéricos
diseñado con frecuencia no con un objetivo practica sino
más bien como una broma o para explorar los límites de
creatividad.
2. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 2
III. USOS EN LA REALIDAD
El uso de lenguajes esotéricos que se da en la actualidad
no es muy variado, ya que han sido diseñados
mayormente para fines de entretenimiento y no para
utilidad que se le pueda dar. Tiene como objetivo
divertir a la hora de programar y no tienen intención de
ser usados en la realidad [1]. Es decir, existen personas
que crean su propio lenguaje de programación para así
darlo a conocer al público y entretener a los
programadores que desean usar este lenguaje. Puede que
en la actualidad un lenguaje sea esotérico, y con el
tiempo pueda ser un lenguaje aceptado y normal para
uso comercial [3] [4].
IV. VENTAJAS Y DESVENTAJAS
Ventajas:
Generalmente poseen una sintaxis muy básica.
Por ejemplo, el BrainFuck cuenta con solo 8
instrucciones de tipo caracter: „>‟ , ‟<‟ ,
„+‟ , ‟–„ , „.‟ , „,‟ , „[„ , „]‟.
La mayoría de ellos son lenguajes Turing-
completos, es decir, que se pueden crear todo
tipo de algoritmos con estos lenguajes [5].
Normalmente estos lenguajes se usan para
probar conceptos en la creación de lenguajes
turing completos, por lo que tienen aplicaciones
en la informática teórica [6].
Cualquier persona con conocimientos en
programación puede crear su propio lenguaje
esotérico.
Desventajas:
Algunos de ellos, como son el INTERCAL que
fue creado en el año 1972, son difíciles de
entender y casi imposible de programar.
Son de difícil aprendizaje y aplicación.
No son muy comerciales, por lo que la oferta de
empleo para este tipo de lenguajes es reducida
[7].
No son útiles para proyectos de gran tamaño.
Prima más el entretenimiento que la utilidad y
productividad.
La mayoría de estos lenguajes no tienen
compiladores o intérpretes.
V. ALGUNOS EJEMPLOS
Estos lenguajes son resultado de pruebas de
experimentación, retos personales o simplemente bromas
para pasar el rato. No suelen crearse para resolver
grandes problemas tecnológicos, sino más bien para
mostrar una sintaxis ininteligible, sin embargo es muy
apropiada para divertir y entretener a las personas
curiosas.
Donde la mayoría de estos lenguajes datan de 1972 en
donde se creó el primer lenguaje esotérico que es
Intercal y de allí comenzaron a surgir diferentes tipos, en
diferentes interpretes con distintas sintaxis y todas tienen
un nivel alto de complejidad para entenderlo.
Veamos algunos ejemplos de lenguajes esotéricos:
A. INTERCAL
Este lenguaje es el padre de los lenguajes de
programación esotéricos. Creado por dos universitarios
de la ciudad de Princeton en 1972 Woods y Lyon.
Cuentan que su diseño se basó en Cobol, Fortran, Basic
ya uso su sintaxis, además de no tener ni ciclos, ni
operaciones básicas como la suma. Es un verdadero
rompecabezas. Una de las características resaltantes es
que en vez de usar la sentencia GOTO, tiene la
instrucción COME FROM #, que indica cuando se ha
ejecutado la sentencia # se salta a la siguiente sentencia
después de COME FROM # y también algunas acciones
3. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 3
deben pedirse por favor, a las comillas se les llama
orejas de conejo [8].
En la actualidad es posible usar INTERCAL, por
ejemplo sirve para la instalación en distribuciones Linux
como Ubuntu basta con ejecutar esta sentencia [9]:
sudo apt-get install intercal
Figura 2: Código de “Hello World” en lenguaje Intercal
B. MALBOLGE
Este lenguaje esotérico es el más complejo de entender
hasta ahora, le suelen decir programación del infierno.
Fue desarrollado por Ben Olmstead en el año 1998,
tiene este nombre en referencia al 8vo círculo del
infierno de la obra de Dante, donde están los
fraudulentos; este lenguaje tiene como objetivo ser el de
más difícil entendimiento y casi siempre las personas
que quieren aprenderlo retroceden en el camino y no lo
logran, es más siempre se encontrará comentarios
desalentadores en las redes sociales para evitar [10].
Un ejemplo de código, acá esta un “Hello world”.
(=<`: 9876Z4321UT. –Q+*)M'&%$H”! ~} | Bzy? =|
{z]KwZY44Eq0/{mlk**
hKs_dG5 [m_BA{ ?-Y;; Vb‟rR54321M }/
.zHGwEDCBA@986543W10/.R,+O<
Figura 3: Código “Hello World” en lenguaje Malbolge
C. Ook!
Es una creación de David Morgan-Mar este lenguaje
esotérico turing completo y está diseñado para
orangutanes tiene 3 palabras reservadas Ook. , Ook? Y
Ook! Que pueden combinarse en 8 maneras diferentes
para formar el repertorio de instrucciones. Ook pretende
ser de fácil entendimiento para orangutanes.
Figura 4: Código de “Hello World” en lenguaje Ook!
WHITESPACE ( Los espacios en blanco )
La particularidad de este lenguaje es que solo utiliza el
espacio (enter), la tabulación (tab), y la línea en blanco,
los demás caracteres son ignorados, fue desarrollado por
Edwin Brady y Chris Morris consideraron injusto que en
todos los lenguajes de programación los espacios no
tengan ningún significado, la única manera de verlos es
coloreando la sintaxis para hacer visibles esos espacios
en blanco y distinguirlos.
¿Cuáles son las ventajas de usar espacios en blanco?
Hay cosas que son difíciles en otros idiomas se hacen
mucho más fáciles en los espacios en blanco.
Es de mucha utilidad para los espías, imaginando que
tenemos un programa de alto secreto que no quieres que
nadie vea, basta con imprimir y borrar el archivo, listo
para escribir en una fecha posterior. Nadie sabrá que ese
pedazo de papel en blanco en un código informático
vital.
El siguiente código imprime “Hello world!”, con líneas
en blanco, tabulador y espacio. Aunque no se vea a
simple vista.
4. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 4
Figura 5: Código de “Hello World” en lenguaje Whitespace
Para un fácil entendimiento se tendría que teñir de
colores con un editor de texto y se vería de la siguiente
manera:
- Espacio (rosado) y tabulación (verde claro).
Figura 6: Código de “Hello World” en lenguaje Whitespace con
editor de texto.
D. Piet
Este lenguaje inventado por David Morgan-Mar, donde
los programa son mapa de bits, son combinación de
colores, como si fuera una pintura de arte abstracto, lleva
ese nombre en honor al pintor Piet Mondrian, su función
es dotar de cierto arte al código del programa.
Cada tonalidad y cambio de color representa una
operación distinta push, pop, add, substract, mod, roll,
out, etc. [11]. Piet utiliza 20 colores distintos formando
distinto gráficos que después un intérprete ejecutará
como en la siguiente imagen un Hello World.
Figura 7: Código de “Hello World” en lenguaje Piet.
E. Brainfuck
Este lenguaje de programación esotérico está
diseñado por Urban Müller en 1993 para ser el de
mayor simplicidad y a la vez turing completo, y solo
requiere de un compilador completo, lo baso en
turing completo y también le sirvió de inspiración al
compilador de 1024 bytes de tamaño de lenguaje
FALSE [12] [13].
Brainfuck opera sobre una matriz de celdas de
memoria, también conocida como cinta, cada una
inicialmente a cero. Hay un puntero apuntando
inicialmente a la celda de memoria tienen los
siguientes comandos:
5. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 5
Comando Descripción Lenguaje C
> Mueve el
puntero
hacia la
derecha
++ptr;
< Mueve el
puntero
hacia la
izquierda
--ptr;
+ Incrementa
la celda de
memoria
++*ptr;
Comando Descripción Lenguaje C
. Salida del
personaje
por la célula
del puntero
Putchar(*ptr);
, Introduce
un carácter
y lo
almacena en
el puntero
*ptr=getchar();
[ Ir más allá
de la
coincidencia
] si la celda
bajo el
puntero es 0
While(*ptr){
] Ir de nuevo
al juego[ si
la celda bajo
del puntero
es 0
}
Figura 8: Cuadro de comandos de Brainfuck según lenguaje C.
++++++[>+++++++>++++++++++>+++++++++++
>+++>+<<<<-
]>++.>+.+++++++..+++.>++.<<++++++++++++++
+.>.+++.------.---------.>+.>.
Figura 8: Código de “Hello World” en lenguaje Brainfuck
En un intérprete para Brainfuck, podríamos
visualizarlo de la siguiente manera:
Figura 9: Interprete de Brainfuck.
VI. PROGRAMAS QUE INTERPRETAN ESTOS
LENGUAJES
Compiladores de algunos Lenguajes Esotéricos
Existen una gran variedad de lenguajes Esotéricos por lo
tanto no alcanzaría para explayarlos todos en un artículo
tan ameno. Pero mostraremos algunos de los
compiladores de aquellos lenguajes esotéricos
[14][15][16].
A. INTERCAL: El código se crea y se compila muy
bien bajo cualquier plataforma ANSI/POSIX,
incluyendo a Linux y sus versiones BSD libres.
Las versiones anteriores de este código se
ejecutan en DOS/Windows, aunque si todavía lo
hará es desconocida [17].
B. WHITESPACE: El código debería compilar en
cualquier máquina Unix con el Glasgow Haskell
Compiler versión 5.02 o posterior. También nos
informaron de que compila correctamente en OS
X 10.2.4 sin problemas.
Sin embargo, esta es una versión beta temprana,
así que los problemas todavía pueden existir.
C. BRIANFUCK: El primer intérprete y
compilador de este lenguaje fue para los
sistemas Amiga.
Brainfucked por otro lado es un potente y
eficiente compilador brainfuck para sistemas
Windows y MS-DOS.
El compilador dispone de un avanzado programa
de optimización de código y, por tanto creados
6. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 6
con Brainfucked son bastante pequeñas.
Brainfucked, por supuesto, comprueba la
sintaxis de los programas brainfuck para detectar
errores comunes y posibles antes de compilar.
También es capaz de compilar para diferentes
plataformas como Windows, DOS, Linux, Unix
y Mac OS X. Cada programa compilado con
Brainfucked es ejecutable bajo Windows y MS-
DOS.
Visual brainfuck es un entorno de desarrollo
compatible con Windows 7 integrado para
desarrolladores de todo el mundo que prefieren
el enfoque brainfuck. Tiene las herramientas
necesarias para cumplir con altos estándares de
calidad actuales en lo que respecta al desarrollo
de aplicaciones profesionales... en brainfuck
[18].
VII. CONCLUSIONES
- Todos estos lenguajes fueron creados
espontáneamente por universitarios, entre otros,
con la única finalidad que es entretener a las
personas que quieran aprenderlo, pero para que
no sea simple los crearon con una sintaxis
compleja para que sea todo un reto.
- La plataforma apropiada para ejecutar estos
lenguajes esotéricos es Linux ya que nos ofrece
una flexibilidad para crear lenguajes y contar
con un entorno para poder probarlo.
- Podemos decir que los lenguajes esotéricos se
encuentran tan ocultos, en lo más recóndito ya
que no se le puede dar una buena utilidad en la
vida real, sin embargo existen algunos que si se
le da una acción malintencionada podría generar
riesgos de muy alto nivel en la sociedad (como
es el caso del lenguaje Whitespace usado por
espías).
- Existen unos cuantos lenguajes que con grandes
ideas pueden llegar a tener una utilidad enorme
como el caso del lenguaje Ook! Que interactúa
con orangutanes, de manera que podría llegar a
convertirse en parte la investigación del
entendimiento del lenguaje de los orangutanes.
- - La gran mayoría de los lenguajes se encuentran
en fase experimental por ende no existe un
compilador oficial, pero si se pueden probar por
plataformas como ANSI/POSIX en Linux, en
Windows o por MS-DOS.
REFERENCIAS
[1] Miguel Santirso, Lenguajes de programación
esotérica,
http://miguelsantirso.es/blog/2007/01/lenguajes-de-
programacion-esotericos/, Enero 2003.
[2] Anabella Roman, Edgardo Fernandez, Gianni
Sabbione, Lisando Pardo, Mario Sacco, Matias
Benitez, Max Ferzzola, Nico Veronas Whitespace :
lenguaje de programación,
http://www.neoteo.com/whitespace-lenguaje-de-
programacion-esoterico , 2010
[3] Alan Lazalde - Programación esotérica -
http://gr3p.com/2011/02/programacion-esoterica/ -
Febrero 2011.
[4] Fundación Wikimedia, Inc Lenguaje de programación
esotérico,
http://es.wikipedia.org/wiki/Lenguaje_de_programaci
%C3%B3n_esot%C3%A9rico, Marzo 2013
[5] Francisco I. Leyva - Programación esotérica -
http://www.panchosoft.com/blog/2006/12/05/progra
macion-esoterica/ - Diciembre 2006.
[6] Pedro Gimeno Fortea - Recreaciones computacionales
http://www.formauri.es/personal/pgimeno/compurec/
LenguajesEsotericos.php - Mayo 2005.
[7] Alvaro Graves - Lenguajes Esotéricos -
http://manzanamecanica.org/2008/05/lenguajes_esote
ricos.html - Mayo 2008.
7. Universidad Nacional Mayor de San Marcos (UNMSM) / Facultad de Ingeniería de Sistemas e Informática
2013 Vol. 1 Nro. 1 7
[8] Fundación Wikimedia, Inc - Intercal
http://es.wikipedia.org/wiki/INTERCAL - Marzo
2013
[9] Eric Raymond, Recursos de intercal-
http://catb.org/esr/intercal/ , Mayo 2013
[10] Lou Scheffer, Introducción a Malbolge
http://www.lscheffer.com/malbolge.shtml, diciembre
del 2007.
[11] Alvy , Piet: Un lenguaje de programación esotérico,
bellamente matemático,
http://www.microsiervos.com/archivo/ordenadores/pi
et-lenguaje-programacion.html, Marzo 2009
[12] Brian Raiter, Brainfuck-
www.muppetlabs.com/~breadbox/bf/
[13] Brainfuck, http://esolangs.org/wiki/brainfuck, Mayo
2013.
[14] Hackerdou,
http://hackerdou.com/blog/2012/10/10/lenguajes-de-
programacion-esotericos/
[15] Programación en Castellano,
http://www.programacion.com/articulo/lenguajes_eso
tericos_207 - Enero 2003
[16] Esolangs
http://esolangs.org/wiki/Language_list
[17] The Intercal Resources Page,
http://www.catb.org/~esr/intercal/, May 2013.
[18] Visual Brianfuck
https://sites.google.com/site/visualbf/, 2013