Un lenguaje de programación esotérico (a veces abreviado como esolang ) o lenguaje extraño [ 1 ] : 5 es un lenguaje de programación diseñado para probar los límites del diseño de lenguajes de programación, como prueba de concepto , como arte del software , como interfaz de hacking para otro lenguaje (particularmente lenguajes de programación funcional o procedimental ), o como una broma . El uso de la palabra esotérico los distingue de los lenguajes que los desarrolladores profesionales usan para escribir software. Los creadores de la mayoría de los esolangs no pretenden que se usen para la programación convencional, aunque algunas características esotéricas, como la visualización en vivo del código, han inspirado aplicaciones prácticas en las artes. [ 2 ] Dichos lenguajes suelen ser populares entre hackers , aficionados y académicos de ciencias de la computación . [ 3 ]
La usabilidad rara vez es un objetivo para los diseñadores de lenguajes de programación esotéricos; a menudo, su diseño conduce a todo lo contrario. Su objetivo habitual es eliminar o reemplazar características convencionales del lenguaje, manteniendo al mismo tiempo un lenguaje Turing-completo , o incluso uno cuya clase computacional sea desconocida.
Historia

El ejemplo más antiguo, y aún el ejemplo canónico, de un lenguaje de programación esotérico es INTERCAL , [ 4 ] diseñado en 1972 por Don Woods y James M. Lyon, quienes afirmaron que su intención era crear un lenguaje de programación diferente a cualquiera con el que estuvieran familiarizados, [ 5 ] a saber, FORTRAN , BASIC , COBOL , ALGOL , SNOBOL , SPITBOL , FOCAL , SOLVE, TEACH, APL , LISP y PL/I . [ 6 ] Parodiaba elementos de los lenguajes de programación establecidos de la época. [ 1 ] : 5
Durante muchos años, INTERCAL estuvo representado únicamente por copias impresas del manual de INTERCAL. Su resurgimiento en 1990 como una implementación en C [ 1 ] : 6 bajo Unix estimuló una ola de interés en el diseño intencional de lenguajes de programación esotéricos.
En 1993, Wouter van Oortmerssen creó FALSE, un pequeño lenguaje de programación orientado a pilas con una sintaxis diseñada para hacer que el código sea inherentemente ofuscado, confuso e ilegible. Su compilador tiene un tamaño de solo 1024 bytes. [ 7 ] Esto inspiró a Urban Müller a crear un lenguaje aún más pequeño, el ahora infame Brainfuck , que consta de solo ocho caracteres reconocidos. Junto con Befunge de Chris Pressey (como FALSE, pero con un puntero de instrucción bidimensional), Brainfuck es ahora uno de los lenguajes de programación esotéricos mejor soportados, con ejemplos canónicos de trampas de Turing mínimas y características de lenguaje innecesariamente ofuscadas. Brainfuck está relacionado con la familia P′′ de máquinas de Turing .
Características comunes
Aunque los lenguajes de programación esotéricos difieren en muchos aspectos, existen algunos rasgos comunes que caracterizan a muchos de ellos, como la parodia, el minimalismo y el objetivo de dificultar la programación. [ 4 ] Muchos lenguajes de programación esotéricos, como Brainfuck y lenguajes similares, utilizan caracteres individuales como comandos; sin embargo, no es raro que los lenguajes lean línea por línea como los lenguajes de programación convencionales .
Representaciones de datos únicas
Los lenguajes de programación imperativos convencionales suelen permitir almacenar datos en variables, pero los lenguajes esotéricos pueden utilizar diferentes métodos para almacenar y acceder a los datos. Lenguajes como Brainfuck y Malbolge solo permiten leer datos mediante un único puntero , que debe moverse a la ubicación deseada antes de leer los datos. Otros, como Befunge y Shakespeare , utilizan una o más pilas para almacenar datos, lo que da lugar a una forma de ejecución similar a la notación polaca inversa . Finalmente, existen lenguajes que exploran formas alternativas de representación numérica: la variante de Brainfuck, Boolfuck, solo permite operaciones con bits individuales, mientras que Malbolge y la variante de INTERCAL, TriINTERCAL, reemplazan los bits por completo con un sistema ternario de base 3. [ 8 ]
Representaciones de instrucciones únicas
Los lenguajes esotéricos también muestran formas únicas de representar las instrucciones de los programas. Algunos lenguajes, como Befunge y Piet , representan los programas en dos o más dimensiones, con el control del programa moviéndose en múltiples direcciones posibles a través del programa. [ 9 ] Esto difiere de los lenguajes convencionales en los que un programa es un conjunto de instrucciones que generalmente se encuentran en secuencia. Otros lenguajes modifican las instrucciones para que aparezcan en una forma inusual, a menudo una que puede ser leída por humanos con un significado alternativo a las instrucciones subyacentes. Shakespeare logra esto haciendo que todos los programas se asemejen a las obras de Shakespeare. Chef logra lo mismo haciendo que todos los programas sean recetas. [ 8 ] Chef es particularmente notable porque algunos han creado programas que funcionan con éxito tanto como programa como receta, demostrando la capacidad del lenguaje para producir un doble significado; esto se llama multicodificación. [ 10 ] Los esolenguajes multicodificados donde las dos lecturas del código se influyen estéticamente entre sí se han comparado con la escritura basada en restricciones del movimiento Oulipo. [ 8 ] [ 11 ]
Dificultad para leer y escribir
Muchos lenguajes de programación esotéricos están diseñados para producir código profundamente ofuscado , lo que dificulta su lectura y escritura. [ 1 ] El propósito de esto puede ser proporcionar un rompecabezas o desafío interesante para los programadores: Malbolge, por ejemplo, fue diseñado explícitamente para ser desafiante, por lo que tiene características como código automodificable y operaciones altamente contraintuitivas. [ 1 ] Por otro lado, algunos lenguajes esotéricos se vuelven difíciles de escribir debido a otras decisiones de diseño. Brainfuck está comprometido con la idea de un conjunto de instrucciones minimalista, por lo que, aunque sus instrucciones son sencillas en principio, el código resultante es difícil de leer para un humano. La dificultad de INTERCAL surge como resultado de la decisión de evitar operaciones utilizadas en cualquier otro lenguaje de programación, lo que proviene de su origen como parodia de otros lenguajes. [ 1 ]
Parodia y sátira
Uno de los objetivos de los lenguajes de programación esotéricos es parodiar o imitar los lenguajes y tendencias existentes en el campo de la programación. [ 1 ] Por ejemplo, el primer lenguaje esotérico, INTERCAL, comenzó como una parodia de los lenguajes utilizados en la década de 1960, como APL , Fortran y COBOL . Las reglas de INTERCAL parecen ser la inversa de las reglas de estos otros lenguajes. [ 12 ] Sin embargo, el objeto de la parodia no siempre es otro lenguaje de programación establecido. Shakespeare puede considerarse una parodia de la estructura de las obras de Shakespeare, por ejemplo. El lenguaje Ook! es una parodia de Brainfuck , donde los ocho comandos de Brainfuck se reemplazan por varios sonidos de orangután como "Ook. Ook?". [ 8 ]
Ejemplos
Befunge
Befunge permite que el puntero de instrucción se desplace en múltiples dimensiones a través del código. Por ejemplo, el siguiente programa muestra "Hola Mundo" colocando los caracteres en orden inverso en la pila y luego imprimiendo los caracteres en un bucle que circula en sentido horario a través de las instrucciones >, :, v, _, ,, y ^.
"dlroW olleH" > : v ^ , _@Hay muchas versiones de Befunge, siendo la más común Befunge-93, llamada así por su año de lanzamiento. [ 13 ]
Cálculo lambda binario
El cálculo lambda binario está diseñado desde una perspectiva de teoría de la información algorítmica para permitir el código más denso posible con los medios más mínimos, que incluye un intérprete propio de 29 bytes, una criba de números primos de 21 bytes y un intérprete Brainfuck de 112 bytes. [ 14 ]
jodido cerebro
Brainfuck está diseñado para el minimalismo extremo y conduce a código ofuscado, con programas que contienen solo ocho caracteres distintos. El siguiente programa muestra "¡Hola, mundo!": [ 15 ]
++++++++++ [ > +++++++ > ++++++++++ > +++ <<< - ] > ++ . > + . +++++++ .. +++ . > ++ . << +++++++++++++++ . > . +++ . ------ . -------- . > + .Todos los caracteres que no sean se ignoran.+-<>,.[]
Cocinero
Chef es un lenguaje de programación orientado a pilas creado por David Morgan-Mar , diseñado para que los programas parezcan recetas de cocina . [ 16 ] Los programas constan de un título, una lista de variables y sus valores de datos, y una lista de instrucciones para la manipulación de la pila. [ 17 ] Un principio de diseño jocoso afirma que "las recetas de programas no solo deben generar una salida válida, sino también ser fáciles de preparar y deliciosas", y Morgan-Mar señala que un ejemplo de programa "¡Hola, mundo!" con 101 huevos y 111 tazas (~26 640 ml) de aceite produciría "mucha comida para una persona". [ 17 ] [ 18 ]
FRACTRAN
Un programa FRACTRAN es una lista ordenada de fracciones positivas junto con un número entero positivo inicial.El programa se ejecuta multiplicando el número entero.por la primera fracciónen la lista para la cuales un número entero. El número enteroluego es reemplazado pory la regla se repite. Si ninguna fracción de la lista produce un número entero al multiplicarse por, el programa se detiene. FRACTRAN fue inventado por el matemático John Conway . [ 19 ]
INTERCAL
INTERCAL , abreviatura de "Compiler Language With No Pronounceable Acronym" (Lenguaje de compilación sin acrónimo pronunciable), fue creado en 1972 como una parodia para satirizar aspectos de los diversos lenguajes de programación de la época. [ 6 ]
JSFuck
JSFuck es un estilo de programación esotérico de JavaScript , donde el código se escribe usando solo seis caracteres: [, ], (, ), !, y +. A diferencia de Brainfuck, que requiere su propio compilador o intérprete, JSFuck es código JavaScript válido, lo que significa que los programas JSFuck se pueden ejecutar en cualquier navegador web o motor que interprete JavaScript. [ 20 ] [ 21 ] Se ha utilizado en varios ataques de secuencias de comandos entre sitios (XSS) en sitios web como eBay debido a su capacidad para evadir los filtros de detección de secuencias de comandos entre sitios. [ 22 ]
LOLCODE
LOLCODE está diseñado para imitar el habla de los lolcats . El siguiente es el ejemplo de "Hola Mundo":
Hola ¿PUEDE TENER STDIO? VISIBLE "¡HOLA MUNDO!" Gracias, adiós
Aunque la semántica de LOLCODE no es inusual, su sintaxis se ha descrito como un fenómeno lingüístico , que representa un ejemplo inusual de habla informal y jerga de internet en la programación. [ 23 ]
Malbolge
Malbolge (llamado así por el octavo círculo del Infierno ) fue diseñado para ser el lenguaje de programación más difícil y esotérico. Entre otras características, el código es automodificable por diseño y el efecto de una instrucción depende de su dirección en la memoria. [ 24 ]
Piet


Piet es un lenguaje diseñado por David Morgan-Mar , cuyos programas son mapas de bits que parecen arte abstracto . [ 25 ] La ejecución está guiada por un "puntero" que se mueve por la imagen, de una región de color continua a la siguiente. Los procedimientos se llevan a cabo cuando el puntero sale de una región.
Hay 20 colores para los que se especifica el comportamiento: 18 colores "coloridos", que se ordenan mediante un ciclo de tono de 6 pasos y un ciclo de brillo de 3 pasos; y blanco y negro, que no están ordenados. Al salir de un color "colorido" y entrar en otro, el procedimiento realizado viene determinado por el número de pasos de cambio de tono y brillo. No se puede entrar en negro; cuando el puntero intenta entrar en una región negra, se modifican las reglas para elegir el siguiente bloque. Si se prueban todas las reglas posibles, el programa finaliza. Las regiones fuera de los bordes de la imagen también se tratan como negras. El blanco no realiza operaciones, pero permite que el puntero "pase". El comportamiento de los colores distintos de los 20 especificados queda a cargo del compilador o intérprete. [ 25 ]
Las variables se almacenan en memoria como enteros con signo en una única pila . La mayoría de los procedimientos especificados se ocupan de las operaciones en esa pila, mientras que otros se ocupan de la entrada/salida y de las reglas por las que se mueve el puntero de compilación. [ 26 ]
Piet recibió su nombre en honor al pintor holandés Piet Mondrian . [ 27 ] El nombre original previsto, Mondrian , ya estaba siendo utilizado por un sistema de visualización de datos estadísticos de código abierto . [ 25 ]
Shakespeare
El lenguaje de programación Shakespeare (SPL) está diseñado para que los programas se parezcan a las obras de Shakespeare . Por ejemplo, la siguiente instrucción declara un punto en el programa al que se puede acceder mediante una instrucción de tipo GOTO:
Acto I: Los insultos y halagos de Hamlet.
Unlambda
Unlambda es un lenguaje de programación funcional minimalista basado en el cálculo SKI , pero combinado con continuaciones de primera clase y E/S imperativa (donde la entrada generalmente requiere el uso de continuaciones). [ 28 ]
Velato
Velato fue creado por Daniel Temkin en 2009 y utiliza archivos MIDI como código fuente. Los programas se componen de notas musicales, y cada instrucción está determinada por el intervalo entre notas sucesivas con respecto a una nota raíz elegida. [ 29 ] Este diseño permite que el código válido de Velato funcione también como composición musical. [ 30 ]
Espacio en blanco

Whitespace utiliza únicamente caracteres de espacio en blanco ASCII (espacio U+0020, tabulación U+0009 y salto de línea U+000A), ignorando todos los demás caracteres, que por lo tanto pueden utilizarse para comentarios. Esto es lo contrario de muchos lenguajes tradicionales, que no distinguen entre los diferentes caracteres de espacio en blanco, tratando la tabulación y el espacio de la misma manera. También permite ocultar programas de Whitespace en el código fuente de programas en lenguajes como C. [ 31 ]
Contexto cultural
El contexto cultural de los esolangs ha sido estudiado por Geoff Cox, quien escribe que los esolangs "desplazan la atención del comando y control hacia la expresión y el rechazo cultural", [ 32 ] viendo los esolangs como similares al arte del código y la poesía del código, como el mezangelle de Mez Breeze , una creencia compartida por otros en el campo. [ 33 ] Daniel Temkin afirma que "los esolangs son sistemas abiertos, intrínsecamente colaborativos y distanciados de cualquier forma materializada única", que "desafían o reafirman ideas más amplias en la cultura de la programación y en cómo se enseña la ciencia de la computación", incluido el estilo neutral y "profesional" defendido en El programador humilde de Edsgar Dijkstra . [ 34 ]
Referencias
- 1 2 3 4 5 6 7 Mateas, M.; Montfort, N. (2005). Una caja, oscuramente: ofuscación, lenguajes extraños y estética del código (PDF) . Artes y cultura digitales: experiencia digital: diseño, estética, práctica (DAC 2005). Copenhague, Dinamarca.
- ↑ McLean, A.; Griffiths, D.; Collins, N.; Wiggins, G. (2010). Visualización de código en vivo . Visualización electrónica y las artes 2010. Londres.
- ↑ Singer, Jeremy; Draper, Steve (9 de octubre de 2025). Tomemos en serio los lenguajes de programación esotéricos . ACM. págs. 213-226. arXiv : 2505.15327 . doi : 10.1145/3759429.3762632 . ISBN 979-8-4007-2151-9Consultado el 22 de abril de 2026 .
- ^ Fuller , Mateo (2008). Estudios de software: un léxico . Prensa del MIT. ISBN 978-0-262-06274-9OCLC 1156851190 .
- ↑ Eric S. Raymond (1996). El nuevo diccionario del hacker . MIT Press. pág. 258. ISBN 978-0-262-68092-9.
- 1 2 Woods, Donald R.; Lyon, James M. (1973), Manual de referencia del lenguaje de programación INTERCAL , Muppetlabs.com , consultado el 1 de mayo de 2023
- ↑ «Entrevista a Wouter van Oortmerssen» . Códigos.esotéricos . 1 de julio de 2015 . Consultado el 1 de mayo de 2023 .
- 1 2 3 4 Morr, Sebastian (2015). Lenguajes de programación esotéricos (PDF) . S2CID 160025019 .
- ↑ Cox 2013 .
- ↑ Mike (31 de marzo de 2013). "Horneando un pastel de 'Hola Mundo'" . Productos de la mente de Mike . Archivado del original el 1 de mayo de 2023. Recuperado el 1 de mayo de 2023 .
- ↑ Temkin, Daniel J. (2020). "La estética de los esolangs multicodificados" (PDF) . Actas de la Conferencia de la Organización de Literatura Electrónica 2020. Universidad de Florida Central.
- ↑ Gaboury, Jacob (2018). «Desmantelamiento crítico: Hacia una computación queer». En Jentery Sayers (ed.). The Routledge Companion to Media Studies and Digital Humanities . Nueva York: Routledge. pp. 483–491 . doi : 10.4324/9781315730479-50 . ISBN 978-1-315-73047-9.
- ↑ "Idiomas" . Tecnologías Cat's Eye .
- ↑ John Tromp. "Most functional" . Concurso Internacional de Código C Ofuscado. Archivado del original el 17 de enero de 2025.
- ↑ "El Brainfuck" . copy.sh. Consultado el 30 de noviembre de 2022 .
- ↑ Cozens, Simon (2005). Programación avanzada en Perl . O'Reilly Media. pág. 269. ISBN 978-0-596-00456-9Una última curiosidad de Acme, y una de mis favoritas, es Acme::Chef, una implementación del lenguaje de
programación Chef de David Morgan-Mar. En Chef, los programas se expresan en forma de recetas: ...
- 1 2 Morgan-Mar, David (24 de marzo de 2011). "Chef" . DM's Esoteric Programming Languages . Publicado por el propio autor . Recuperado el 1 de mayo de 2023 .
- ↑ Morgan-Mar, David (28 de junio de 2014). "Chef - Hola Mundo" . DM's Esoteric Programming Languages . Publicado por el autor . Consultado el 1 de mayo de 2023 .
- ↑ Kneusel, Ronald (2022). Strange Code: Esoteric Languages That Make Programming Fun Again . No Starch Press. p. 217. ISBN 978-1718502406.
- ↑ Bailey, Jane (29 de febrero de 2016). "Pudding on Security" . The Daily WTF . Recuperado el 2 de marzo de 2020 .
- ↑ "Explorando JSF*ck" . alligator.io . Archivado del original el 2 de marzo de 2020. Consultado el 2 de marzo de 2020 .
- ↑ Dan Goodin (3 de febrero de 2016). "eBay no tiene planes de solucionar el grave error que permite la distribución de malware [ Actualizado ] " . Ars Technica .
- ↑ Zabenkov, AA; Morel Morel, DA (2014). "Lenguajes de programación esotéricos como una tendencia semiótica de vanguardia" . Experientia Est Optima Magistra: Collected Arts . 3. Universidad Estatal de Belgorod: 170.
- ↑ Temkin, Daniel (3 de noviembre de 2014). "Entrevista con Ben Olmstead" . esoteric.codes . Consultado el 7 de enero de 2021 .
- 1 2 3 Morgan-Mar, David (25 de enero de 2008). "Piet" . Recuperado el 1 de mayo de 2023 .
- ↑ Kneusel, Ronald (2022). Strange Code: Esoteric Languages That Make Programming Fun Again . No Starch Press. pp. 246–247 . ISBN 978-1718502406.
- ↑ Cox 2013 , pág. 6
- ↑ Chu-Carroll, Mark C. (11 de agosto de 2006). "Programación patológica del viernes: Unlambda, o programación sin variables" . Good Math, Bad Math (blog) . ScienceBlogs.
- ↑ «Velato» . Velato.net . Daniel Temkin. 2009 . Consultado el 18 de octubre de 2025 .
- ↑ Temkin, Daniel (27 de enero de 2011). "Marcha acordeón de la transmisión de datos" . danieltemkin.com . Archivado del original el 29 de mayo de 2013. Recuperado el 18 de octubre de 2025 .
- ↑ François Rozet (10 de diciembre de 2020). "Whitespacy" . Recuperado el 15 de marzo de 2026.
Toma como entrada un archivo C válido y un archivo Whitespace válido, y produce como salida un archivo políglota que es válido tanto en C como en Whitespace, comportándose
exactamente
igual que las entradas cuando se interpreta/compila.
- ↑ Cox 2013 , pág. 5
- ↑ "El verdadero significado de los lenguajes de programación esotéricos" . Apifonica . Consultado el 30 de noviembre de 2023 .
- ↑ Temkin, Daniel (2023). "El programador menos humilde" . DHQ: Digital Humanities Quarterly . 17 (2).
Bibliografía
- Paloque-Bergès, Camille (2009). "Lenguajes esotéricos". Poétique des codes sur le réseau informatique . Archivos contemporáneos. ISBN 978-2-914610-70-4.
- Cox, Geoff (2013). Speaking Code: Coding as Aesthetic and Political Expression . MIT Press. ISBN 978-0-262-01836-4.
- Kneusel, Ronald (2022). Strange Code: Esoteric Languages That Make Programming Fun Again . No Starch Press. ISBN 978-1718502406.
Enlaces externos
- Lenguajes de programación esotéricos
- Humor informático
- Clasificación de lenguajes de programación