Pero, ¿a quién se le ocurre crear un lenguaje de programación imposible de entender?. En serio, no cabe en mi mente esa idea, pero al parecer sí cabe en la mente de Ben Olmstead, el creador de Malbolge. Lo curioso es que él nunca llegó a escribir un programa en él, así de complejo es que ni su creador se animó a usarlo.
Resulta que Malbolge, el lenguaje de programación más difícil, no está pensado para hacer programas útiles, sino que es un verdadero desafío mental. Usa un sistema de aritmética en base 3, código que se modifica solo y una extraña «operación loca o crazy operation» que hace que cada instrucción sea aún más difícil de entender después de ejecutarse.
Te contaré cómo funciona, algunas de sus extrañas características y, en caso de que te atrevas, te mostraré cómo escribir tu primer programa en este infame lenguaje.
¿Qué es Malbolge?
Para que te asustes un poco, su nombre viene de Malebolge, el octavo círculo del infierno en la obra de Dante. Lo que lo hace especial es su nivel extremo de dificultad, ya que escribir y entender código en Malbolge es un verdadero reto incluso para los programadores más experimentados.
Este lenguaje de programación usa una extraña operación llamada «loca», que modifica los datos de forma compleja y difícil de predecir. Esto hace que entender cómo funciona el programa y crear algoritmos sea todo un desafío.
Algo que me parece aún más caótico en este lenguaje, es que los programas pueden cambiar su propio código mientras se ejecutan, lo que hace aún más complicado seguir su funcionamiento y predecir qué van a hacer.
Características
- Código autoalterable: Cada instrucción cambia después de ejecutarse.
- Sistema numérico en base 3: Opera con trits en lugar de bits.
- Instrucciones encriptadas en tiempo de ejecución: Modifica su propio código.
- Registros confusos: Usa tres registros principales: A, C y D.
- Difícil de depurar: El propio creador nunca logró escribir un programa funcional.
¿Cómo se ve el «Hola mundo»?
Te muestro un poco de este lenguaje, aquí tienes un «Hola Mundo»:
(=<`$9]7<5YXz7wT.3,+O/o'K%$H"'~D|#z@}b=`{^Lx8%$Xmrkpohm-kNi;gsedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543s+O<oLm
No, no es un error de codificación. Así se ve un programa funcional en Malbolge.
¿Cómo funciona Malbolge?
Para entender este complejo lenguaje de programación, primero tenemos que hablar de su arquitectura y reglas.
Registros en Malbolge
Te muestro que tiene tres registros principales:
- A (Acumulador): Almacena valores temporales y datos de entrada/salida.
- C (Puntero de instrucción): Indica la siguiente instrucción a ejecutar.
- D (Puntero de datos): Apunta a la memoria de datos.
Cuando el programa empieza, todos los registros tienen un valor de 0 y se van modificando con cada instrucción.
Memoria y encriptación de instrucciones
Malbolge usa una memoria de 59.049 direcciones (en base 3) y sufre de dos problemas principales:
- El código se encripta durante la ejecución, volviéndolo aún más confuso.
- Las instrucciones no son fijas, sino que se determinan con una fórmula:
Fórmula para determinar una instrucción en Malbolge:
( [C] + C ) % 94
Donde C es el puntero de instrucción y [C] es el valor en esa posición de memoria.
Esto significa que una misma instrucción puede comportarse de manera diferente dependiendo de dónde se encuentre en la memoria.
La «Crazy Operation»
Como ya te dije, este lenguaje usa una operación llamada Crazy Operation, que modifica cada valor en memoria después de ser ejecutado.
Esta operación usa la siguiente tabla de transformación ternaria para alterar valores:
Trit 1 | Trit 2 | Resultado |
0 | 0 | 1 |
0 | 1 | 0 |
0 | 2 | 0 |
1 | 0 | 1 |
1 | 1 | 0 |
1 | 2 | 2 |
2 | 0 | 2 |
2 | 1 | 2 |
2 | 2 | 1 |
¿Qué significa esto? Que cada instrucción no solo se ejecuta, sino que se transforma en algo completamente diferente después de ser ejecutada.
Ejemplo práctico: Programa Cat en Malbolge
Si lograste entender lo anterior, aquí tienes un programa que lee una entrada del usuario y la imprime en pantalla (similar al comando cat en Unix).
Código en Malbolge para leer y escribir datos:
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.
~P<
<:(8&
66#"!~}|{zyxwvu
gJ%
Este programa toma una entrada, la procesa y la imprime en pantalla.
Prueba estos ejemplos si solo quieres matar tu curiosidad, pero no te recomiendo gastar tu tiempo en aprender Malbolge, porque no es un lenguaje práctico. Ni se usa en la industria, ni se puede depurar y su sintaxis no es para nada intuitiva. Mejor mira esta lista de los lenguajes de programación más usados y escoge alguno de ellos.
Nosotros podemos enseñarte desde lo más básico hasta lo más avanzado en cuanto a la programación. Solo tienes que unirte al Bootcamp de Desarrollo Web de KeepCoding. Aquí crearás software funcional, optimizarás algoritmos y entenderás cómo funcionan los lenguajes de programación a nivel profundo.
¡Inscríbete y lleva tu carrera al siguiente nivel!