Befunge
Autor | Chris Pressey |
---|---|
País | Estados Unidos |
Año | 1993 |
Descriptores | Estotèrico, Reflexivo, Inventado, Simbólico |
Vínculos | -http://catseye.tc/node/Befunge-93.html |
Rasgos Destacados | Lenguaje bidimensional |
Obra | "Befunge Interpreter" http://www.quirkster.com/iano/js/befunge.html |
Descripción sintética
Befunge es un lenguaje de programación esotérico, el cuál se presenta bidimensionalmente en una cuadrícula de celdas, que contiene una sola instrucción y puede ser ejecutada en cualquier dirección, tanto de derecha a izquierda o izquierda a derecha, de arriba hacia abajo o viceversa.
Contexto histórico
Fue creado en 1993, por Chris Pressey quien intentó crear un lenguaje tan difícil como sea posible, en años posteriores aparecieron otros lenguajes con implementaciones similares a Befunge, con algunas modificaciones denominadas Fungeoids.
Principio de funcionamiento
Un programa que utilice Befunge es un "campo de juego" bidimensional de tamaño fijo. En él hay celdas que se llenan inicialmente con las instrucciones del programa. Befunge permite modificar el programa mientras esta en ejecución. El programa se ejecuta utilizando un contador de programa o un puntero de instrucción. Al comienzo el puntero de instrucción apunta a la celda superior izquierda del campo de juego y se dirige a la derecha, mueve una celda a la vez, cada vez que el puntero encuentra una instrucción se ejecuta, algunas de estas instrucciones pueden modificar la direccion del puntero de instrucción.
Befunge contiene las siguientes instrucciones:
0-9
|
Introduce este número en la pila |
+
|
Suma: Extrae a y b, e introduce a+b |
-
|
Resta: Extrae a y b, e introduce b-a |
*
|
Multiplicatión: Extrae a y b, e introduce a*b |
/
|
División entera: Extrae a y b, e introduce b/a, redondeado a la baja. Si a es cero, pregunta al usuario qué resultado desea. |
%
|
Módulo: Extrae a y b, e introduce el resto de la división entera b/a. Si a es cero, pregunta al usuario qué resultado desea. |
!
|
NOT lógico: Extrae un valor. Si es cero, introduce 1; si no, introduce cero. |
`
|
Mayor que: Extrae a y b, e introduce 1 si b>a, o cero en caso contrario. |
> |
Comienza a moverse a la derecha |
< |
Comienza a moverse a la izquierda |
^ |
Comienza a moverse hacia arriba |
v |
Comienza a moverse hacia abajo |
?
|
Comienza a moverse en una dirección aleatoria |
_
|
Extrae un valor; se mueve a la derecha si valor=0, o a la izquierda si no |
|
|
Extrae un valor; se mueve hacia abajo si valor=0, o hacia arriba si no |
"
|
Empieza el modo cadena: introduce cada carácter ASCII hasta que encuentre el siguiente "
|
:
|
Duplica el valor en la cima de la pila |
\
|
Intercambia los dos valores en la cima de la pila |
$ |
Extrae un valor de la pila |
.
|
Extrae un valor y lo muestra como entero |
,
|
Extrae un valor y lo muestra como carácter ASCII |
# |
Trampolín: Omite la siguiente celda |
p
|
Una llamada "put" (una manera de almacenar un valor para uso posterior). Extrae y, x y v, y cambia el carácter en la posición (x, y) del programa por el carácter con el valor ASCII v |
g
|
Una llamada "get" (una manera de recuperar datos almacenados). Extrae y y x, y luego introduce el valor ASCII del carácter que se encuentra en esa posición en el programa |
&
|
Solicita un número al usuario y lo introduce en la pila |
~
|
Solicita al usuario un carácter e introduce su valor ASCII |
@ |
Fin de programa |
Sustrato y posibles influencias
Befunge ha generado varios descendientes, en el mas cercano podemos referirnos a Befunge-98. Otros lenguajes que fueron influenciados fueron: BefOS, Beturing, Blank, Flobnar y Wierd. La mayoría de estas lenguas no son lo sufuciente similares como para ser llamadas descendientes directos aunque sus autores mencionan a Befunge como influencia. Fue precedido por lenguajes con características Biota (otro lenguaje esotérico bidimensional) en 1991. Otras influencias fueron FALSE, brainfuck, Maentwrog y Forth.