Por Lektu
Desde que FORTRAN, Lisp y COBOL hicieron su aparición a principios de los 50, hasta nuestros días, se han desarrollado miles de lenguajes de programación cubriendo todos los nichos imaginables, desde la aviónica militar a la enseñanza de la programación a los niños.
Entre las rarezas de la informática una particularmente interesante es la de los «esolangs», o lenguajes de programación esotéricos, diseñados con frecuencia no con un objetivo práctico, sino como una broma, o para probar una teoría, o un ejercicio en diseño de lenguajes, o para explorar los límites de la creatividad.
He aquí una lista de esos diez lenguajes (esolangs y convencionales) que llaman particularmente la atención:
- INTERCAL: Uno de los primeros lenguajes esotéricos, fue diseñado como una parodia de COBOL y FORTRAN, con el objetivo expreso de que fuese difícil de entender. Entre sus más famosas instrucciones se cuenta COME FROM ("VEN DESDE"), la versión INTERCAL del denostado GOTO ("IR A").
- Brainfuck: Aparte de por contener una palabra malsonante en el nombre, este lenguaje es conocido por su extrema simplicidad y por ser absolutamente ininteligible. Apenas dispone de ocho instrucciones, todas ellas signos de puntuación, y se han escrito compiladores para él en menos de 200 bytes.
- Redcode: No exactamente un esolang, el Redcode es un lenguaje ensamblador especializado para la programación de robots de combate virtuales en un juego llamado Core Wars. Redcode tuvo su momento de gloria en los 80, al darse a conocer a través de la prestigiosa revista Scientific American (y su edición en español, Investigación y Ciencia), y aunque el interés ha decaído, aún tiene fervientes seguidores.
- Perl 6: Tampoco en este caso se trata de un esolang propiamente dicho, pero la próxima iteración del popular lenguaje Perl, con diez años de desarrollo y sin fecha prevista de aparición, incluye conceptos tan extraños como los ensamblajes o junctions, operadores anteriormente denominados superposiciones e inspirados en la física cuántica.
- Befunge: La primera versión de este lenguaje, Befunge-93, se programa sobre una parrilla de 80 × 25 caracteres; el flujo de control del programa se desplaza bidireccionalmente sobre la parrilla, y el código automodificable está a la orden del día. Funge-98 le da una vuelta de tuerca, al ejecutarse sobre un espacio toroidal finito pero infinitamente extensible.
- Unlambda: Diseñado a partir de una sólida base teórica, este extraño cruce entre lo esotérico y lo funcional carece por completo de operadores, variables o tipos de datos (ni siquiera números), a excepción de uno: funciones de un argumento; y la única estructura de control es la continuación (una herencia del Scheme). El propio autor del lenguaje declara que "escribir un programa en Unlambda no es tan difícil como parece; leerlo, sin embargo, es prácticamente imposible". No exagera.
- ColorForth: Si Forth, con su manejo de la pila y su sintaxis modificable, tuvo siempre fama de ser un lenguaje difícil, colorForth va un paso más allá al eliminar parte de la puntuación y substituirla por colores (o, en algunas versiones, por itálica y otros recursos tipográficos).
- El Juego de la Vida: Este conocido ejemplo de autómata celular tiene potencia expresiva suficiente para ser considerado un lenguaje de programación (en términos técnicos, es Turing-completo) y para demostrarlo hay quien ha construido puertas lógicas, un sumador e incluso un generador de números primos.
- APL: Creado por Kenneth Iverson, de IBM, en los años 60 como una notación para enseñar a programar, pronto se convirtió en un lenguaje extremadamente potente (todos los operadores manipulan matrices de forma genérica, por ejemplo), pero lastrado por una notación excesivamente compacta y por el uso de un juego de caracteres propio difícil de aprender y utilizar. Como curiosidad, se usó para hacer los efectos especiales de Tron, y para programar el ordenador Deep Blue que venció a Kasparov.
- Haskell: A diferencia de muchos de los ejemplos anteriores, no se trata en este caso de un ejercicio o un juego, sino de uno de los lenguajes funcionales más utilizados, especialmente en el ámbito académico. Una de sus características más notorias, aparte de su concisa formulación casi matemática, es que la indentación de las líneas de código es significativa, lo cual dota al código de una profunda elegancia.