stringtranslate.com

Lenguaje de programación esotérico

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 de lenguajes de programación informática, como prueba de concepto , como arte de software , como una interfaz de hacking para otro lenguaje (particularmente programación funcional o lenguajes de programación procedimental ), o como una broma . El uso de la palabra esotérico los distingue de los lenguajes que los desarrolladores en activo usan para escribir software. Los creadores de la mayoría de los esolangs no pretenden que se utilicen para la programación convencional, aunque algunas características esotéricas, como la sintaxis visoespacial , [1] han inspirado aplicaciones prácticas en las artes. Dichos lenguajes suelen ser populares entre los hackers y los aficionados. [ cita requerida ]

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 las características convencionales del lenguaje, manteniendo al mismo tiempo un lenguaje que sea Turing-completo o incluso uno para el cual se desconoce la clase computacional .

Historia

El ejemplo más antiguo, y todavía el canónico, de un lenguaje de programación esotérico es INTERCAL , [2] diseñado en 1972 por Don Woods y James M. Lyon, quienes dijeron que su intención era crear un lenguaje de programación diferente a todos los que conocían. [3] [4] Parodiaba elementos de lenguajes de programación establecidos de la época, como Fortran , COBOL y el lenguaje ensamblador .

Durante muchos años, INTERCAL estuvo representado únicamente por copias en papel del manual de INTERCAL. Su resurgimiento en 1990 como 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 pila 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. [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 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 respaldados, con ejemplos canónicos de tarpits de Turing mínimos y características de lenguaje innecesariamente ofuscadas. Brainfuck está relacionado con la familia P′′ de máquinas de Turing .

Características comunes

Si bien los lenguajes de programación esotérica difieren de muchas maneras, existen algunos rasgos comunes que caracterizan a muchos lenguajes, como la parodia, el minimalismo y el objetivo de hacer que la programación sea difícil. [6] Muchos lenguajes de programación esotérica, como brainfuck y similares, usan 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 imperativa convencionales suelen permitir almacenar datos en variables, pero los lenguajes esotéricos pueden utilizar diferentes métodos de almacenamiento y acceso a los datos. Los lenguajes como Brainfuck y Malbolge solo permiten leer datos a través de un único puntero , que debe moverse a una ubicación de interés antes de leer los datos. Otros, como Befunge y Shakespeare , utilizan una o más pilas para almacenar datos, lo que conduce a una forma de ejecución similar a la notación polaca inversa . Finalmente, hay lenguajes que exploran formas alternativas de representación de números: la variante de Brainfuck, Boolfuck, solo permite operaciones en bits individuales, mientras que Malbolge y la variante de INTERCAL, TriINTERCAL, reemplazan los bits por completo con un sistema ternario de base 3. [7]

Representaciones de instrucciones únicas

Los lenguajes esotéricos también muestran formas únicas de representar instrucciones de programas. Algunos lenguajes, como Befunge y Piet, representan programas en dos o más dimensiones, con el control del programa moviéndose en múltiples direcciones posibles a través del programa. [8] [ página necesaria ] 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 pueda ser leída por humanos con un significado alternativo a las instrucciones subyacentes. Shakespeare logra esto al hacer que todos los programas se parezcan a las obras de Shakespeare. Chef logra lo mismo al hacer que todos los programas sean recetas. [7] Chef es particularmente notable en el sentido de que algunos han creado programas que funcionan con éxito tanto como programa como receta, lo que demuestra la capacidad del lenguaje para producir este doble significado. [9]

Dificultad para leer y escribir

Muchos lenguajes de programación esotéricos están diseñados para producir código que está profundamente ofuscado , lo que dificulta su lectura y escritura. [10] El propósito de esto puede ser proporcionar un rompecabezas o desafío interesante para los escritores de programas: 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. [10] Por otro lado, algunos lenguajes esotéricos se vuelven difíciles de escribir debido a sus otras opciones 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 que surge es difícil de leer para un humano. La dificultad de INTERCAL surge como resultado de la elección de evitar operaciones utilizadas en cualquier otro lenguaje de programación, lo que se deriva de su origen como una parodia de otros lenguajes. [10]

Parodia y burla

Uno de los objetivos de los lenguajes de programación esotéricos es parodiar o burlarse de los lenguajes y tendencias existentes en el campo de la programación. [10] 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 las inversas de las reglas de estos otros lenguajes. [11] Sin embargo, el tema de la parodia no siempre es otro lenguaje de programación establecido. Shakespeare puede verse como 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 son reemplazados por varios sonidos de orangután como "Ook. Ook?" [7]

Ejemplos

Desconfianza

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 el sentido de las agujas del reloj a través de las instrucciones >, :, v, _, ,y ^.

 "dlroW olleH" > : v ^ , _@ 

Hay muchas versiones de Befunge, la más común es Befunge-93, que recibe ese nombre porque fue lanzado en 1993. [12]

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ínimos, presentando un intérprete propio de 29 bytes, un tamiz de números primos de 21 bytes y un intérprete Brainfuck de 112 bytes. [13]

Joder el cerebro

Brainfuck está diseñado para un minimalismo extremo y da lugar a un código ofuscado, con programas que contienen sólo ocho caracteres distintos. El siguiente programa muestra "¡Hola, mundo!": [14]

++++++++++ [ > +++++++ > ++++++++++ > +++ <<< - ] > ++ . > + . +++++++ .. +++ . > ++ . << +++++++++++++++ . > . +++ . ------ . -------- . > + . 

Todos los caracteres que no sean .+-<>,.[]

Pollo

Chicken tiene solo tres tokens, la palabra "chicken", " " (el carácter de espacio) y el carácter de nueva línea. El compilador interpreta la cantidad de "chickens" en una línea como una instrucción de código de operación que utiliza para manipular datos en una pila. Un programa chicken simple puede contener docenas de líneas con nada más que la palabra "chicken" repetida innumerables veces. [15] Chicken fue inventado por Torbjörn Söderstedt, quien se inspiró para el lenguaje en una parodia de una disertación científica. [16] [17] [18]

Cocinero

Chef es un lenguaje de programación orientado a pilas creado por David Morgan-Mar , diseñado para hacer que los programas parezcan recetas de cocina . [19] Los programas constan de un título, una lista de variables y sus valores de datos, y una lista de instrucciones de manipulación de la pila. [20] Un principio de diseño jocoso establece que "las recetas de programas no solo deben generar una salida válida, sino que también deben ser fáciles de preparar y deliciosas", y Morgan-Mar señala que un programa de ejemplo "¡Hola, mundo!" con "101 huevos" y "111 tazas de aceite" produciría "mucha comida para una persona". [20] [21]

Fractrano

Un programa FRACTRAN es una lista ordenada de fracciones positivas junto con una entrada inicial de un entero positivo . El programa se ejecuta multiplicando el entero por la primera fracción de la lista para la que es un entero. Luego, el entero se reemplaza por y se repite la regla. Si ninguna fracción de la lista produce un entero cuando se multiplica por , el programa se detiene. FRACTRAN fue inventado por el matemático John Conway . [22]

Script de golf

Los programas en GolfScript, un lenguaje creado para el código golf , consisten en listas de elementos, cada uno de los cuales se coloca en la pila a medida que se lo encuentra, con la excepción de las variables que tienen bloques de código como su valor, en cuyo caso se ejecuta el código. [23]

INTERCAL

INTERCAL , abreviatura de "Compiler Language With No Pronounceable Acronym", fue creado en 1972 como una parodia para satirizar aspectos de los diversos lenguajes de programación de ese momento. [4]

Mierda

JSFuck es un estilo de programación esotérica de JavaScript , donde el código se escribe utilizando solo 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 o motor web que interprete JavaScript. [24] [25] 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. [26]

Código LOL

LOLCODE está diseñado para parecerse al habla de los lolcats . El siguiente es el ejemplo de "Hola mundo":

Hola¿PUEDE TENER STDIO?VISIBLE "¡HAI MUNDO!"Gracias, adiós.

Si bien la semántica de LOLCODE no es inusual, su sintaxis ha sido descrita como un fenómeno lingüístico , que representa un ejemplo inusual de habla informal y jerga de Internet en programación. [27]

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 se modifica a sí mismo por diseño y el efecto de una instrucción depende de su dirección en la memoria. [28]

Piet

Programa de Piet que imprime 'Piet'
Un programa de "Hola Mundo" en Piet

Piet es un lenguaje diseñado por David Morgan-Mar , cuyos programas son mapas de bits que parecen arte abstracto . [29] La ejecución está guiada por un "puntero" que se mueve alrededor de la imagen, de una región continua coloreada 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 un 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 entrar en negro; cuando el puntero intenta entrar en una región negra, se cambian en su lugar las reglas de elección del 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 a través". El comportamiento de los colores distintos de los 20 especificados se deja al compilador o intérprete. [29] [ fuente no primaria necesaria ]

Las variables se almacenan en la memoria como números 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. [30]

Piet recibió su nombre en honor al pintor holandés Piet Mondrian . [31] El nombre original previsto, Mondrian , ya había sido adoptado por un sistema de visualización de datos estadísticos de código abierto . [29]

Shakespeare

El lenguaje de programación Shakespeare (SPL) está diseñado para que los programas parezcan obras de Shakespeare . Por ejemplo, la siguiente declaración declara un punto en el programa al que se puede llegar mediante una declaración de tipo GOTO: [ cita requerida ]

 Acto I: Los insultos y halagos de Hamlet.

Sin lambda

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 imperativas (con entradas que generalmente requieren el uso de continuaciones). [32]

Espacio en blanco

Los espacios en blanco utilizan únicamente caracteres de espacio en blanco (espacio, tabulación y retorno), ignorando todos los demás caracteres, que por lo tanto se pueden utilizar para comentarios. Esto es lo contrario de muchos lenguajes tradicionales, que no distinguen entre diferentes caracteres de espacio en blanco, tratando el tabulador y el espacio de la misma manera. También permite que los programas de espacios en blanco se oculten en el código fuente de programas en lenguajes como C. [ cita requerida ]

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 control hacia la expresión cultural y el rechazo", [33] viéndolos como similares al arte del código y la poesía del código, como mezangelle de Mez Breeze , una creencia compartida por otros en el campo. [34] Daniel Temkin describe a Brainfuck como "negarse a suavizar el límite entre la expresión humana y el código ensamblador y, por lo tanto, llevarnos a un viaje ridículo de lógica", [35] exponiendo el conflicto inherente entre el pensamiento humano y la lógica de la computadora al deconstruir su relación. Conecta la programación dentro de un esolang con la ejecución de una partitura de evento como las del movimiento Fluxus , donde la ejecución de las reglas irregulares de la lógica en código aclara el punto de vista del lenguaje. [36]

Referencias

  1. ^ McLean, A., Griffiths, D., Collins, N. y Wiggins, G. (2010). "Visualización de código en vivo". En Visualización electrónica y las artes , Londres: 2010.
  2. ^ Matthew Fuller, Estudios de software, MIT Press, 2008
  3. ^ Eric S. Raymond (1996). El nuevo diccionario del hacker. MIT Press. pág. 258. ISBN 978-0-262-68092-9.
  4. ^ ab 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
  5. ^ "Entrevista con Wouter van Oortmerssen". Códigos.esotéricos . 1 de julio de 2015 . Consultado el 1 de mayo de 2023 .
  6. ^ Fuller, Matthew (2008). Estudios de software: un léxico . MIT Press. ISBN 978-0-262-06274-9.OCLC 1156851190  .
  7. ^ abc Morr, Sebastian. "Lenguajes de programación esotéricos". (2015).
  8. ^ Cox 2013.
  9. ^ Mike (31 de marzo de 2013). "Horneando un pastel de Hello World". Productos de la mente de Mike . Consultado el 1 de mayo de 2023 .
  10. ^ abcd Mateas, M. y Montfort, N. A Box, Darkly: Ofuscación, lenguajes extraños y estética del código. En Artes y cultura digitales: Experiencia digital: diseño, estética, práctica (DAC 2005) , Copenhague, Dinamarca, 2005.
  11. ^ Gaboury, Jacob (2018). "Deshacer críticamente: hacia una computación queer". En Jentery Sayers (ed.). The Routledge Companion to Media Studies and Digital Humanities . Nueva York: Routledge. págs. 483–491. doi :10.4324/9781315730479-50. ISBN 978-1-315-73047-9.
  12. ^ "Idiomas".
  13. ^ John Tromp. "El más funcional". Concurso internacional de código C ofuscado.
  14. ^ "El Brainfuck". copy.sh . Consultado el 30 de noviembre de 2022 .
  15. ^ "¿"Hola mundo" en lenguajes de programación esotéricos? (Esolangs)". Comunidad DEV 👩‍💻👨‍💻 . 25 julio 2020 . Consultado el 4 de diciembre de 2022 .
  16. ^ "Los lenguajes de programación más extraños | Programación". www.omnesgroup.com . 8 de agosto de 2018 . Consultado el 4 de diciembre de 2022 .
  17. ^ "8 lenguajes de programación ridículos". 27 de abril de 2022.
  18. ^ Hongkiat.com (8 de septiembre de 2021). «10 lenguajes de programación más extraños, vol. 2». Hongkiat . Consultado el 4 de diciembre de 2022 .
  19. ^ 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: ...
  20. ^ ab Morgan-Mar, David (24 de marzo de 2011). "Chef". Lenguajes de programación esotérica de DM . Autopublicado . Consultado el 1 de mayo de 2023 .
  21. ^ Morgan-Mar, David (28 de junio de 2014). "Chef - Hello World". Lenguajes de programación esotérica de DM . Autopublicado . Consultado el 1 de mayo de 2023 .
  22. ^ Kneusel, Ronald (2022). Strange Code: lenguajes esotéricos que hacen que la programación vuelva a ser divertida . No Starch Press. pág. 217. ISBN 978-1718502406.
  23. ^ Smith, Darren (2007). "Tutorial de GolfScript".
  24. ^ Bailey, Jane (29 de febrero de 2016). "Pujar por la seguridad". The Daily WTF . Consultado el 2 de marzo de 2020 .
  25. ^ "Explorando JSF*ck". alligator.io . Consultado el 2 de marzo de 2020 .
  26. ^ Dan Goodin (3 de febrero de 2016). "eBay no tiene planes de solucionar un error "grave" que permite la distribución de malware [Actualizado]". Ars Technica .
  27. ^ Zabenkov, AA; Morel Morel, DA (2014). "Los lenguajes de programación esotéricos como una tendencia semiótica de vanguardia". Experientia Est Optima Magistra: Collected Arts . 3 . Universidad Estatal de Bélgorod: 170.
  28. ^ Temkin, Daniel (3 de noviembre de 2014). "Entrevista con Ben Olmstead". esoteric.codes . Consultado el 7 de enero de 2021 .
  29. ^ abc Morgan-Mar, David (25 de enero de 2008). "Piet" . Consultado el 1 de mayo de 2023 .
  30. ^ Kneusel, Ronald (2022). Strange Code: lenguajes esotéricos que hacen que la programación vuelva a ser divertida . No Starch Press. págs. 246–247. ISBN 978-1718502406.
  31. ^ Cox 2013, pág. 6
  32. ^ 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.
  33. ^ Cox 2013, pág. 5
  34. ^ "El verdadero significado de los lenguajes de programación esotéricos". Apifonica . Consultado el 30 de noviembre de 2023 .
  35. ^ Temkin, Daniel (15 de enero de 2014). "Glitch && Interacción entre humanos y computadoras". NOOART: La revista del arte sin objetos (1).
  36. ^ Temkin, Daniel (8 de mayo de 2013). "brainfuck". Media-N Journal (primavera de 2013) . Consultado el 1 de mayo de 2023 .

Bibliografía

Enlaces externos

Véase también