Arma tu propia web, acá como hacerlo

07.09.2014 a las 03:26 hs 731 1

Lenguajes de programación más enrevesados y absurdos







Si aprender JavaScript o C se te hizo cuesta arriba, mejor no sigas leyendo porque he recopilado lo más de lo más friki   Para quien prefiera un repaso por este submundo en formato de artículo científico, puede verlo 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
.

1. Programar con espacios en blanco

Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
al mundo el 1 de abril de 2003 (el “día de los inocentes” del mundo anglosajón), el lenguaje Whitespace propone lo contrario que lo que hace el parser de cualquier lenguaje normal: ignorar cualquier texto, número o símbolo y únicamente interpretar los huecos en blanco como instrucciones. Por tanto, es perfecto para esconder código en un texto. Su máquina virtual se compone de una pila, un espacio de memoria para variables y un puñado de instrucciones.



Así se ve un programa en Whitespace en el editor vim (
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
)



Todo: constantes, el control de flujo, operaciones aritméticas, entrada y salida, se codifica mediante secuencias de tabuladores, espacios, espacios y tabuladores. Los enfermosinteresados pueden leer más en 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
.  

Befunge


Creado para hacer su compilación lo más difícil posible, se trata de un lenguaje 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
con un flujo de programa bidimensional: cada carácter dice al compilador o intérprete en qué dirección ir a continuación. Por si fuera poco, el programa puede modificarse a sí mismo, al estilo del clásico 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
.  Absolutamente no apto para humanos, ni para compiladores… aunque finalmente hay quien consiguió programar un compilador para este engendro:



Este sencillo programa resuelve un Sudoku. Click para ampliar (pero no, no creas que aún así lo entenderás). (
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
)


Imprescindible hacer un recorrido por este 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
 escritos en Befunge por la, probablemente, única persona capaz de hacerlo del mundo.

 Brainfuck

Con la idea contraria del anterior, Brainfuck fue creado con la idea de hacer su compilación lo más sencilla posible, lo que evidentemente va en contra de su usabilidad e inteligibilidad por el programador. La máquina virtual asumida por el lenguaje es extremadamente simple, y sólo soporta 8 instrucciones. La siguiente tabla resume bien el lenguaje al completo (
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
):


Comando Brainfuck
Equivalente en C
(Estado inicial)
char array[infinitely large size]; char *ptr=array;
>
++ptr;
<
–ptr;
+
++*ptr;
-–*ptr;
.putchar(*ptr);
,*ptr=getchar();
[while (*ptr) {
]}


A pesar de ser otro lenguaje Turing completo, hasta el más elemental “Hello world!” es ininteligible:

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

LOLCODE: Ola K aze!


Esto ya se ha ido de madre: una especie de Pascal donde todas las palabras clave están escritas en la jerga del lenguaje usado habitualmente en memes de Internet:


HAI
CAN HAS STDIO?
I HAS A VAR
IM IN YR LOOP
UP VAR!!1
VISIBLE VAR
IZ VAR BIGGER THAN 10? KTHX
IM OUTTA YR LOOP
KTHXBYE


Por ejemplo, KTHXBYE significa: “OK, Thanks, bye!” Y sí, existe 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
.

Una única instrucción


Existen quienes van un paso más allá en simplificar su propuesta de máquina virtual: el extremo son las máquinas de una única intrucción. Obviamente, conseguir que dicho sistema sea Turing completo requiere pensar muy bien qué instrucción va a ser la elegida.

Entre 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
, una opción es la siguiente:

  • SBNZ a,b,c,d –> Restar dos valores b, almacenar el resultado en c, y si el resultado no es cero saltar a una dirección de memoria d.
Los programas producidos por estas máquinas virtuales son extremadamente largos y engorrosos, como te podrás imaginar.

6. Piet
Bautizado en honor al pintor 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
, los programas en Piet no se escriben: se dibujan con colores. De nuevo tenemos una máquina virtual que hace uso intensivo de almacenamiento en la pila y con un puntero de programa en 2D que se desplaza por el dibujo interpretando los distintos colores como instrucciones.



Programa que imprime “Hi!” por consola, con una traza del flujo del programa. Más explicaciones, si es que las necesitas con lo claro que está, 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
.


Una forma curiosa de enviar mensajes sencillos “codificados” en una imagen, aunque desde luego no serán tan discretas como otras técnicas avanzadas de 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
. Existe un editor/programa de dibujo y un intérprete llamado 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
.


INTERCAL


De los lenguajes de programación creados “por hacer la coña”, INTERCAL puede considerarse el abuelo. Fue perpetrado en 1972 por dos estudiantes de Princeton, que sarcásticamente lo presentaron como: “Compiler Language With No Pronounceable Acronym, which is, for obvious reasons, abbreviated INTERCAL”. Se publicó como un manual en texto que describía toda la sintaxis, aunque posteriormente se han creado compiladores reales. Un clásico “Hello World!” se ve así en INTERCAL:


DO ,1 <- #13
PLEASE DO ,1 SUB #1 <- #238
DO ,1 SUB #2 <- #108
DO ,1 SUB #3 <- #112
DO ,1 SUB #4 <- #0
DO ,1 SUB #5 <- #64
DO ,1 SUB #6 <- #194
DO ,1 SUB #7 <- #48
PLEASE DO ,1 SUB #8 <- #22
DO ,1 SUB #9 <- #248
DO ,1 SUB #10 <- #168
DO ,1 SUB #11 <- #24
DO ,1 SUB #12 <- #16
DO ,1 SUB #13 <- #162
PLEASE READ OUT ,1
PLEASE GIVE UP


Quien no tenga problemas con el inglés, puede echar un vistazo a la completa página en Wikipedia, repleta de extractos de la especificación original del lenguaje donde se muestra el frikísimo sentido del humor de los creadores.


Velato


Garabatos, dibujos…  ¡nos faltaba la música! Velato es el (¿único?) lenguaje de programación basado en lenguaje musical: los programas se pueden escribir en partituras y se guardan como ficheros MIDI. Por supuesto, existe 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
.



Programa “Hello World!” en Velato (
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
)



El submundo de las templates en C++


¡No! Yo nunca metería a mi querido C++ en la lista de lenguajes absurdos. Pero… hay que admitir que una vez abres la caja de Pandora de las 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
 (o plantillas), se accede a unas herramientas muy poderosas, a veces tanto como para redefinir el aspecto habitual de un programa en C++. Un ejemplo maravilloso de esto es 
Para poder ver los links necesitas estar Registrado . O.. ya tienes cuenta? Logueate!
 que permite operar con dibujos de formas geométricas y sus propiedades geométricas:


#include"analogliterals.hpp"
using namespace analog_literals::symbols;
          unsigned int c = ( o-----o
                             |     !
                             !     !
                             !     !
                             o-----o ).area;
assert( ( o-------------o
            |L             \
            | L             \
            |  L             \
            |   o-------------o
            |   !             !
            !   !             !
            o   |             !
             L  |             !
              L |             !
               L|             !
                o-------------o ).volume == ( o-------------o
                                              |             !
                                              !             !
                                              !             !
                                              o-------------o ).area * int(I-------------I) );
analog_literals::rectangle<4, 2> r = o---------o
                                       |         !
                                       !         !
                                       o---------o;





FIN DEL POST


Puntos: 590


Comentarios (11)


Cargando comentarios espera un momento...
No tienes permisos para comentar.
Para poder comentar necesitas estar Registrado. O.. ya tienes usuario? Logueate!