<<Up     Contents

Befunge

Befunge is a stack-based esoteric programming language which differs from conventional languages in that programs are arranged on a two-dimensional grid. 'Arrow' instructions direct the control flow to the left, right, up or down, and loops are constructed by sending the control flow in a circle. This technique is demonstrated in the random number generator program below:

 vv  <      <
     2
     ^  v<
  v1<?>3v4
     ^   ^
 >  >?>  ?>5^
     v   v
  v9<?>7v6
     v  v<
     8
  .  >  >   ^
 ^<

Instructions in Befunge:
0-9Push this number on the stack
+Addition: Pop a and b, then push a+b
-Subtraction: Pop a and b, then push b-a
*Multiplication: Pop a and b, then push a*b
/Integer division: Pop a and b, then push b/a, rounded down. If b is zero, ask the user what result they want.
%Modulo: Pop a and b, then push the remainder of the integer division of b/a. If b is zero, ask the user what result they want.
!Logical NOT: Pop a value; if the value is zero, push 1, otherwise zero.
`Greater than: Pop a and b, then push 1 if b>a, otherwise zero.
>Move right
<Move left
^Move up
vMove down
?Move in a random direction
_Pop a value; move right if value=0, left otherwise
|Pop a value; move down if value=0, up otherwise
"Start string mode: push each character's ASCII value all the way up to the next "
:Duplicate value on top of the stack
\Swap two values on top of the stack
$Pop value from the stack
.Pop value and output as an integer
,Pop value and output as ASCII character
#Trampoline: Skip next cell
gPop y and x, then pushes ASCII value of the character at that position in the program
pPop y, x and v, then change the character at the position x/y in the program to the character with ASCII value v
&Ask user for a number and push it
~Ask user for a character and push ASCII value
@End program

The language was originally created by Chris Pressey in 1993, as an attempt to devise a language as hard to compile as possible - note that the 'p' command allows for self-modifying code. Nevertheless, a number of compilers have subsequently been written. A number of extensions to the original 'Befunge-93' specification also exist, including Funge-98, which extends the concept to an arbitrary number of dimensions and can be multithreaded, with multiple instruction pointers operating simultaneously on the same space.

See also: esoteric programming language

wikipedia.org dumped 2003-03-17 with terodump