Un lenguaje de programación esotérico (a veces abreviado como esolang ) es un lenguaje de programación diseñado para probar los límites del diseño del lenguaje de programación de computadoras, como una prueba de concepto, como arte de software , como una interfaz de piratería a otro lenguaje (en particular , programación funcional o lenguajes de programación procedimentales ). ), o como broma. El uso de esoteric distingue estos lenguajes de los lenguajes de programación que los desarrolladores que trabajan utilizan para escribir software. Por lo general, los creadores de un esolang no tienen la intención de que el lenguaje se use para la programación convencional, aunque algunas características esotéricas, como la sintaxis visuoespacial ,[1] han inspirado aplicaciones prácticas en las artes. Estos lenguajes suelen ser populares entre los piratas informáticos y los aficionados.
La usabilidad rara vez es un objetivo para los diseñadores de lenguajes de programación esotéricos; a menudo, el diseño conduce a todo lo contrario. Su objetivo habitual es eliminar o reemplazar las características del lenguaje convencional sin dejar de mantener un lenguaje que es Turing-completo , o incluso uno para el que se desconoce la clase computacional .
Historia
El ejemplo más antiguo, y todavía canónico, de un lenguaje esotérico fue INTERCAL , [2] diseñado en 1972 por Don Woods y James M. Lyon, con la intención declarada de ser diferente a cualquier otro lenguaje de programación con el que los autores estuvieran familiarizados. [3] [4] Se parodió elementos de lenguajes de programación establecidas del día, tales como Fortran , COBOL , y conjunto de lenguaje .
Durante muchos años, INTERCAL estuvo representada únicamente por copias impresas del manual de INTERCAL. El resurgimiento del lenguaje en 1990 como una implementación en C bajo Unix estimuló una ola de interés en el diseño intencional de lenguajes informáticos 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 fuera intrínsecamente ofuscado, confuso e ilegible. También tiene un compilador de solo 1024 bytes. [5] 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 personajes 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. Estos son ejemplos canónicos de tarpits mínimos de Turing y características del lenguaje ofuscadas innecesariamente. Brainfuck está relacionado con la familia P ′ ′ de máquinas de Turing .
Ejemplos de
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 el mensaje "Hola mundo" empujando los caracteres en orden inverso a la pila, a continuación, imprimir los caracteres en un bucle que circula en sentido horario a través de las instrucciones >
, :
, v
, _
, ,
, y ^
.
"dlroW olleH" > : v ^ , _ @
Cálculo lambda binario
El cálculo lambda binario está diseñado desde la perspectiva de la teoría algorítmica de la información para permitir el código más denso posible con los medios más mínimos, con un auto intérprete de 29 bytes, un tamiz de números primos de 21 bytes y un intérprete Brainfuck de 112 bytes.
Brainfuck
Brainfuck está diseñado para un minimalismo extremo y conduce a un código ofuscado, con programas que contienen solo ocho caracteres distintos. El siguiente programa genera "¡Hola mundo!":
++++++++++ [ > +++++++ > ++++++++++ > +++ <<< - ] > ++ . > + . +++++++ .. +++ . > ++ . << +++++++++++++++ . > . +++ . ------ . -------- . > + .
FRACTRAN
Un programa FRACTRAN es una lista ordenada de fracciones positivas junto con una entrada de número entero positivo inicial. El programa se ejecuta multiplicando el número entero por la primera fracción en la lista para la cual es un número entero. El entero luego es reemplazado por y la regla se repite. Si ninguna fracción en la lista produce un número entero cuando se multiplica porentonces el programa se detiene. FRACTRAN fue inventado por el matemático John Conway .
GolfScript
Los programas en GolfScript consisten en listas de elementos, cada uno de los cuales se inserta en la pila a medida que se encuentra, con la excepción de las variables que tienen bloques de código como valor, en cuyo caso se ejecuta el código.
INTERCAL
INTERCAL , abreviatura de "Lenguaje compilador sin acrónimo pronunciable", fue creado en 1972 como una parodia para satirizar aspectos de los diversos lenguajes de programación de la época. [4]
JSFuck
JSFuck es un estilo de programación esotérico de JavaScript, donde el código está escrito utilizando sólo seis caracteres: [
, ]
, (
, )
, !
, y +
. A diferencia de Brainfuck, que requiere su propio compilador o intérprete, JSFuck es un código JavaScript válido, lo que significa que los programas JSFuck se pueden ejecutar en cualquier navegador web o motor que interprete JavaScript. [6] [7]
LOLCODE
LOLCODE está diseñado para parecerse al habla de los lolcats . El siguiente es el ejemplo de "hola mundo":
HAI¿PUEDE TENER STDIO?VISIBLE "HAI WORLD!"KTHXBYE
LOLCODE es frecuentemente criticado por no ser muy esotérico, sino más bien por ser un lenguaje procedimental ordinario con un vocabulario inusual. [8]
Malbolge
Malbolge (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 se modifica automáticamente por diseño y el efecto de una instrucción depende de su dirección en la memoria.
Piet
Piet es un lenguaje diseñado por David Morgan-Mar , cuyos programas son mapas de bits que parecen arte abstracto . [9] La compilación está guiada por un "puntero" que se mueve alrededor de la imagen, de una región coloreada 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 están ordenados por 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 está determinado por el número de pasos de cambio de tono y brillo. No se puede ingresar negro; cuando el puntero intenta entrar en una región negra, se cambian las reglas para elegir el siguiente bloque. Si se prueban todas las reglas posibles, el programa termina. 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 se deja al compilador o intérprete.
Las variables se almacenan en la memoria como enteros con signo en una sola pila . La mayoría de los procedimientos especificados tratan con operaciones en esa pila, otros con entrada / salida y con las reglas por las que se mueve el puntero de compilación.
Piet lleva el nombre del pintor holandés Piet Mondrian . [10] El nombre originalmente previsto, Mondrian , ya se adoptó para un sistema de visualización de datos estadísticos de código abierto.
Shakespeare
Shakespeare está diseñado para que los programas parezcan obras de teatro de Shakespeare. Por ejemplo, la siguiente declaración declara un punto en el programa al que se puede llegar a través de una declaración de tipo GOTO:
Acto I: Los insultos y los halagos de Hamlet.
Unlambda
Unlambda es un lenguaje de programación funcional minimalista basado en el cálculo de SKI , pero combinado con continuaciones de primera clase y E / S imperativas (con entradas que generalmente requieren el uso de continuaciones).
Espacio en blanco
Los espacios en blanco solo usan espacios en blanco (espacio, tabulación y retorno), ignorando todos los demás caracteres, que por lo tanto pueden usarse para comentarios. Esto es lo contrario de muchos lenguajes tradicionales, que no distinguen entre diferentes caracteres de espacio en blanco, tratando la tabulación y el espacio de la misma manera. También permite ocultar programas de espacios en blanco en el código fuente de programas en lenguajes como C.
Contexto cultural
El contexto cultural de los esolangs ha sido estudiado por Geoff Cox, quien escribe que los esolangs "desvían la atención del comando y el control hacia la expresión cultural y el rechazo", [11] considerando que los esolangs son similares al arte en código y la poesía en código, como Mez Breeze . mezangelle . Daniel Temkin describe Brainfuck como "negarse a facilitar la frontera entre la expresión humana y el código ensamblador y por lo tanto llevarnos a un viaje de lógica ridículo", [12] exponiendo el conflicto inherente entre el pensamiento humano y la lógica de la computadora. Conecta la programación dentro de un esolang con la realización de una partitura de eventos como las del movimiento Fluxus , donde jugar las reglas de la lógica en código deja claro el punto de vista del lenguaje. [13]
Referencias
- ^ McLean, A., Griffiths, D., Collins, N. y Wiggins, G. (2010). "Visualización de Live Code". En Visualización electrónica y las artes , Londres: 2010.
- ^ Matthew Fuller, Estudios de software , MIT Press, 2008
- ^ Eric S. Raymond (1996). El diccionario del nuevo hacker . Prensa del MIT. pag. 258. ISBN 978-0-262-68092-9.
- ^ a b Woods, Donald R .; Lyon, James M. (1973), The INTERCAL Programming Language Reference Manual , Muppetlabs.com, archivado desde el original el 20 de febrero de 2009 , consultado el 24 de abril de 2009
- ^ "Entrevista con Wouter van Oortmerssen" . códigos esotéricos . 1 de julio de 2015 . Consultado el 1 de diciembre de 2015 .
- ^ Bailey, Jane (29 de febrero de 2016). "Pujar por la seguridad" . El diario WTF . Consultado el 2 de marzo de 2020 .
- ^ "Explorando JSF * ck" . alligator.io . Consultado el 2 de marzo de 2020 .
- ^ "LOLCODE # Crítica" . Esolangs.org . Consultado el 30 de noviembre de 2015 .
LOLCODE a menudo es criticado por no ser lo suficientemente esotérico. Por diseño, LOLCODE es en realidad un lenguaje de procedimiento normal detrás de su sintaxis lulzy. Este es un marcado contraste con los Esolangs "verdaderos" como Befunge, que presenta una sintaxis bidimensional, casi parecida a un tablero de juego. Por esta razón, LOLCODE está técnicamente categorizado como Weirdlang.
- ^ Morgan-Mar, David (25 de enero de 2008). "Lenguaje de programación Piet" . Consultado el 18 de mayo de 2013 .
- ↑ Cox , 2013 , p. 6
- ↑ Cox , 2013 , p. 5
- ^ Temkin, Daniel (15 de enero de 2014). "Glitch && Interacción humano / computadora" . NOOART: La revista de arte sin objeto (1).
- ^ Temkin, Daniel. "Brainfuck" . Revista Media-N (primavera de 2013) . Consultado el 6 de mayo de 2014 .
Otras lecturas
- Camille Paloque-Bergès (2009). "Langages ésotériques". Poétique des codes sur le réseau informatique . Archivos contemporáneos. ISBN 978-2-914610-70-4 .
- Cox, Geoff (2013). Código hablante: la codificación como expresión estética y política . Prensa del MIT. ISBN 978-0-262-01836-4.
enlaces externos
- Lenguajes de programación ofuscados en Curlie
- Esolang - una wiki dedicada a los lenguajes de programación esotéricos