Lenguaje de programación esotérico

format_list_bulleted Contenido keyboard_arrow_down
ImprimirCitar

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 prueba de concepto, como software. arte, como una interfaz de piratería a otro lenguaje (particularmente programación funcional o lenguajes de programación de procedimientos), o como una broma. El uso de la palabra esotérico los distingue de los lenguajes que usan los desarrolladores para escribir software. Los creadores de la mayoría de los esolangs no pretenden que se utilicen para la programación general, aunque algunas características esotéricas, como la sintaxis visoespacial, han inspirado aplicaciones prácticas en las artes. Dichos 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 su diseño conduce a todo lo contrario. Su objetivo habitual es eliminar o reemplazar las características del lenguaje convencional mientras se mantiene un lenguaje que es Turing-completo, o incluso uno para el que se desconoce la clase computacional.

Historia

El ejemplo más antiguo, y aún canónico, de un lenguaje de programación esotérico es INTERCAL, 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 cualquiera con el que estuvieran familiarizados.. Parodiaba elementos de los lenguajes de programación establecidos de la época, como Fortran, COBOL y el lenguaje ensamblador.

Durante muchos años, INTERCAL estuvo representada únicamente por copias en papel del manual de INTERCAL. Su renacimiento 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 sintaxis diseñada para hacer que el código sea intrínsecamente ofuscado, confuso e ilegible. Su compilador tiene un tamaño de solo 1024 bytes. 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 tarpits de Turing mínimos y funciones 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éricos difieren en muchos aspectos, existen algunos rasgos comunes que caracterizan a muchos lenguajes, como la parodia, el minimalismo y el objetivo de dificultar la programación.

Representaciones de datos únicas

Los lenguajes de programación imperativos convencionales suelen permitir que los datos se almacenen en variables, pero los lenguajes esotéricos pueden utilizar diferentes métodos para almacenar y acceder a los datos. Los lenguajes como Brainfuck y Malbolge solo permiten que los datos se lean a través de un solo puntero, que debe moverse a una ubicación de interés antes de que se lean los datos. Otros, como Befunge y Shakespeare, utilizan una o más pilas para contener datos, lo que lleva 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 Brainfuck Boolfuck solo permite operaciones en bits individuales, mientras que Malbolge y la variante INTERCAL TriINTERCAL reemplazan bits por completo con un sistema ternario de base 3.

Representaciones de instrucciones únicas

Los lenguajes esotéricos también muestran formas únicas de representar las instrucciones del programa. 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. Esto difiere de los lenguajes convencionales en los que un programa es un conjunto de instrucciones que normalmente se encuentran en secuencia. Otros lenguajes modifican las instrucciones para que aparezcan en una forma inusual, a menudo una que los humanos pueden leer con un significado alternativo a las instrucciones subyacentes. Shakespeare logra esto haciendo que todos los programas se parezcan a las obras de Shakespeare. Chef logra lo mismo al hacer que todos los programas sean recetas. Chef es particularmente notable porque algunos han creado programas que funcionan con éxito como programa y como receta, lo que demuestra la capacidad del lenguaje para producir este doble significado.

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 la lectura y la escritura. El propósito de esto puede ser proporcionar un rompecabezas o un desafío interesante para los programadores: Malbolge, por ejemplo, fue diseñado explícitamente para ser un desafío y, por lo tanto, tiene características como código automodificable y operaciones altamente contrarias a la intuición. 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 consecuencia de la elección de evitar operaciones utilizadas en cualquier otro lenguaje de programación, lo que se deriva de su origen como parodia de otros lenguajes.

Parodia y parodia

Uno de los objetivos de los lenguajes de programación esotéricos es parodiar o engañar a los lenguajes y tendencias existentes en el campo de la programación. 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 lo contrario de las reglas en estos otros idiomas. Sin embargo, el tema de la parodia no siempre es otro lenguaje de programación establecido. Shakespeare puede verse como una falsificación de la estructura de las obras de Shakespeare, por ejemplo. El idioma ¡Ay! es una parodia de Brainfuck, donde los 8 comandos de Brainfuck son reemplazados por varios sonidos de orangután como "Ook. ¿Está bien?"

Ejemplos

Empezar

Befunge permite que el puntero de instrucciones se desplace en múltiples dimensiones a través del código. Por ejemplo, el siguiente programa muestra "Hello World" empujando los caracteres en orden inverso en la pila, 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.

Cálculo lambda binario

El cálculo lambda binario está diseñado desde una perspectiva algorítmica de la teoría de la información para permitir el código más denso posible con los medios más mínimos, con un autointérprete de 29 bytes, un tamiz de números primos de 21 bytes y un intérprete Brainfuck de 112 bytes..

Follada cerebral

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!":

+++++++++++++[++++++++++++++++++++++c).-]++.+.+++++++ ..++.++...++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++..++.---.---.+.

Pollo

Pollo tiene solo tres fichas, la palabra "pollo", " " y "n". El compilador interpreta la cantidad de "pollos" en una línea como una instrucción de código de operación que utiliza para manipular datos en una pila. Un programa de pollo simple puede contener docenas de líneas con nada más que la palabra "pollo" repetido innumerables veces. El pollo fue inventado por Torbjörn Söderstedt, quien se inspiró para el lenguaje de una parodia de una disertación científica.

Cocinero

Chef es un lenguaje de programación orientado a la pila creado por David Morgan-Mar, diseñado para hacer que los programas parezcan recetas de cocina. 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. Un principio de diseño bromista establece que "las recetas del programa no solo deben generar resultados válidos, sino que deben ser fáciles de preparar y deliciosas", y Morgan-Mar señala que un programa de ejemplo Hello World con "101 huevos" y "111 tazas de aceite" produciría "mucha comida para una persona".

FRACTRÁN

Un programa FRACTRAN es una lista ordenada de fracciones positivas junto con una entrada inicial positiva . El programa se ejecuta multiplicando el entero por la primera fracción en la lista para la cual es un entero. El entero es entonces reemplazado por y la regla se repite. Si ninguna fracción en la lista produce un entero cuando se multiplica por El programa se detiene. FRACTRAN fue inventado por el matemático John Conway.

GulfScript

Los programas en GolfScript, un lenguaje creado para code golf, 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 el se ejecuta el código.

INTERCALES

INTERCAL, abreviatura de "Compiler Language Wi< u>th No Pronounce< u>able Acrónimo", fue creado en 1972 como una parodia para satirizar aspectos de los diversos lenguajes de programación en el hora.

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 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.

LOLCODE

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

HAI
¿Puede ser STDIO?
VISIBLE "HAI WORLD!"
KTHXBYE

Si bien 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.

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 automodifica por diseño y el efecto de una instrucción depende de su dirección en la memoria.

Piedad

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

Piet es un lenguaje diseñado por David Morgan-Mar, cuyos programas son mapas de bits que parecen arte abstracto. La ejecució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 "coloridos" colores, 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 "colorido" color e ingresando otro, el procedimiento realizado está determinado por el número de pasos de cambio en el tono y el brillo. No se puede ingresar negro; cuando el puntero intenta ingresar a una región negra, en su lugar, 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. White 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 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.

Piet recibió su nombre del pintor holandés Piet Mondrian. El nombre original previsto, Mondrian, ya estaba tomado por un sistema de visualización de datos estadísticos de código abierto.

Estrella de rock

Rockstar es un lenguaje de programación diseñado para crear programas que también son baladas de power metal creadas por Dylan Beattie.

Shakespeare

Shakespeare está diseñado para hacer que los programas parezcan obras 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 la halaga de Hamlet.

Unlambda

Unlambda es un lenguaje de programación funcional minimalista basado en cálculo SKI, pero combinado con continuaciones de primera clase y E/S imperativa (con entradas que generalmente requieren el uso de continuaciones).

Espacio en blanco

Los espacios en blanco usan solo caracteres de espacio 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 espacios 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 "cambian la atención del mando y control hacia la expresión cultural y el rechazo", considerando los esolangs como algo similar al arte en código y la poesía en código, como como mezangelle de Mez Breeze. Daniel Temkin describe a Brainfuck como "se niega a aliviar el límite entre la expresión humana y el código ensamblador y, por lo tanto, nos lleva a un viaje ridículo de la lógica". exponiendo el conflicto inherente entre el pensamiento humano y la lógica informática. Conecta la programación dentro de un esolang con la realización de una partitura de evento como las del movimiento Fluxus, donde la interpretación de las reglas de la lógica en el código deja claro el punto de vista del lenguaje.

Contenido relacionado

Árbol B

En informática, un árbol B es una estructura de datos de árbol autoequilibrada que mantiene datos ordenados y permite búsquedas, acceso secuencial...

PL/I

PL/I es un lenguaje de programación informático imperativo y procedimental desarrollado y publicado por IBM. Está diseñado para la programación...

Memoria del tambor

La memoria de tambor era un dispositivo magnético de almacenamiento de datos inventado por Gustav Tauschek en 1932 en Austria. Los tambores se utilizaron...
Más resultados...
Tamaño del texto:
undoredo
format_boldformat_italicformat_underlinedstrikethrough_ssuperscriptsubscriptlink
save