Como muchos sabréis (sobretodo los programadores), existe una rama en el desarrollo de lenguajes de programación que es desarrollada por gente con ganas de retarse a sí mismos y de retar al resto y que ha generado una serie de lenguajes de programación que se ha dado en llamar “lenguajes de programación esotéricos”. Para los que no los conozcáis, son una serie de lenguajes de programación muy raros -por decirlo claramente- que tienen como objetivo principal ser divertidos a la hora de programar (tened en cuenta que el termino “divertido” para un programador no se refiere a lo que el resto de la humanidad entiende ;D). Estos lenguajes de programación nunca tienen intención de ser utilizados en programación “real” y casi siempre se enfocan como una prueba de concepto o, simplemente, una broma.
Para los que os hayáis quedado con curiosidad, a continuación os dejo algo de información sobre un lenguaje de programación esotérico que es además Turing-completo (capaz de resolver cualquier problema computable). Es un trabajo que tuve que hacer para la asignatura de computabilidad:
El lenguaje “spiral”:
“Si la película Pi contiene algo de verdad sobre el mundo, entonces todo en la tierra tiene cierta naturaleza de espiral. Esto incluye a todo lo creado por el hombre, incluyendo los ordenadores y los programas de ordenador. Si los programas de ordenador tienen una naturaleza de espiral inherente, ¿por qué el código que usamos para crearlos siempre se representa en líneas rectas?”
Con esa original reflexión se nos introduce al lenguaje de programación “Spiral”, un lenguaje Turing-completo que, en palabras de su creador, es un lenguaje más potente que “Brainfuck”, o “Befunge” pero, como mínimo, igual de divertido para programar. “Spiral” es un lenguaje en el que el puntero de programa se puede mover en cualquier dirección del código gracias a sus diferentes instrucciones y almacena todos los datos en una pila FIFO (aunque con el operador spiral se puede modificar su funcionamiento).
Ejemplos:
En la página web de este lenguaje se presentan varios ejemplos que muestran como se puede “dibujar” con el código de estos programas o crear “un código que tenga la misma apariencia que el resultado que produce”. Véase por ejemplo, un hola mundo en cuyo código se lee “Hello World”.
e0v *** *eXlv** *lX *2X **oXi v * * * * * * 2 * o ** v* * * * * * ***** * v * v * *iX * * * * * * * * ^ v * * * w * * *** * * ***** * v * * * * v * * * * ^ * ^ * * * * * * * *** * * ****v * v * * v * * * * * * * * * * * * * ^ * * * * * * * * ***** * ***** * ***** * *** * * * * * * * * * * * ** ** *** *** ******* *****v^ ******* ***** *wX *** **3Xp *rX4.. d5* qd** * 3 * * ** v^ * .. * * * *** * v * ^ * #pX v * .. . * * * ** * *** v * # r # * .. . * * * !q* * * * * * * # v # * 54 .. * * * * * * * * * * * # * # * @X * * * * * * * * * * * # * # * v * * * * * * * * * * * # * # * * ** * * * * * * * * * * # * # * ** ** * * * *** * * * * * #v* ^ * *** * * ***** * ** ** * ** ** *v * * * * * * * *** ***** *v^** *** *** ******* ****
Tabla de operadores
Tiene 16 operadores en total, aunque muchos hacen varias operaciones al mismo tiempo para aumentar la funcionalidad, empeorar la legibilidad del programa y permitir más trucos con el lenguaje.
|
Carácter |
Nombre |
Operación |
|
@ |
espiral |
Alterna la dirección por defecto del programa e invierte la pila. |
|
! |
eh tú |
Termina el programa |
|
* |
estrella |
Incrementa el valor de “Villanova” (una variable auxiliar) |
|
# |
cuadrícula |
Decrementa el valor de “Villanova” (una variable auxiliar) |
|
v |
push |
Apila a “Villanova” en la pila |
|
= |
puente |
El puente no hace absolutamente nada. |
|
X |
vía de tren |
Hace tres cosas: desapila, si la variable desapilada es cero la mete en “Villanova” y deja moverse al puntero de programa. Si no es cero, también deja la variable en “villanova” pero modifica la dirección del puntero de programa. |
|
~ |
comparar |
Compara los elementos en lo más alto de la pila y apila un -1 si el primero es menor, cero si son iguales y 1 si el primero es mayor. |
|
+ |
añadir |
Desapila dos elementos y apila su suma. |
|
. |
toser |
El operador “toser” desapila un elemento y lo “tose” como carácter Unicode a STDOUT. |
|
, |
escupir |
El operador escupir desapila un elemento y lo “escupe” como variable numérica a STDOUT. |
|
: |
masticar |
El operador masticar, “mastica” un carácter Unicode del buffer de entrada y lo “traga” hasta lo más alto de la pila. Si el buffer de entrada está vacío, recoge más entrada de STDIN. Si el usuario no introduce nada se apila un cero. |
|
; |
tragar |
El operador “tragar” apila un entero con signo desde STDIN a lo alto de la pila. |
|
^ |
copiar |
El operador de copia le dice a “Villanova” que hay en lo alto de la pila y “Villanova” toma ese valor amablemente. |
|
& |
aleatorio |
Cambia el byte más alto en la pila por un entero aleatorio menor o igual que el número reemplazado. Se producirá un error interno si el byte en lo alto de la pila es negativo. |
|
$ |
swap |
Intercambia los dos valores más altos en la pila. |
|
“ |
quote |
Este operador está reservado para su implementación en Spiral 2. Los programas de Spiral 1 que contengan este operador como una etiqueta no serán retro compatibles. |
|
cualquier otro carácter |
etiqueta |
Las etiquetas hacen cuatro cosas. Primero dan el valor cero a “Villanova”, hacen que el puntero de programa apunte a la derecha, y hacen que la dirección de giro por defecto sea la derecha. Después hacen saltar al puntero a la etiqueta coincidente dondequiera que esté en el programa. Sirven como llamadas, gotos y hacen cosas como el código estático posibles. Más de dos etiquetas en un programa causarán un comportamiento muy extraño pero no provocarán un error. Una etiqueta no emparejada sí causará un error. La etiqueta especial del sistema ‘0’ indica donde empieza el programa, y más etiquetas ‘0’ provocarán también comportamientos extraños. |
*El truco de las etiquetas hace imposible el uso de comentarios en los programas de Spiral, aunque se pueden poner en un fichero aparte.
Más ejemplos e información
- Página en Internet de Spiral: http://www.quintopia.net/spiraldoc.htm
- Información en Wikipedia: http://es.wikipedia.org/wiki/Lenguaje_de_programaci%C3%B3n_esot%C3%A9rico
Mmm este no lo conocía, conocía BrainFuck y la famosa frase de su creador (-¿porqué creó brainfuck? -Porque no sabía que existía Perl) y una pequeña adaptación que me encantó: el ook buenísimo.
Muy curioso aunque son lenguajes un poco demasiado intratables y un poco para el que se aburre mucho:P Ahora el Hello World en Spiral es muy bueno
Mira tu, podias haber puesto entrada hace unas semanas k iva a venir muy bien
.
Otro lenguaje de estos muy guapo es uno que se basa en colores, y los programas son cuadrados de colores rojos, verdes, azules, como un famoso cuadro que hay hecho asi, Piet.
http://www.dangermouse.net/esoteric/piet.html
Ejemplos: http://www.dangermouse.net/esoteric/piet/samples.html
El lenguaje ese de los colores mola xDD
Pingback: Lenguajes de programación raros | blojer
твою мать!!! где перевод????
К сожалению, нет переводу!