The core concept of the language is that no specific word or character is assigned to represent an instruction, but rather a pattern of characters is: if there is a Udage program with, say, the character A and you replace all A's with B's, the source code will still do exactly same thing (unless, of course, B has already been used in the original code, which would result in a collision which may change the meaning of the code drastically). All kinds of characters (in implementation, probably just all Unicode characters) can be used to write the source code: even MIDI audio or digital images.
Note: this language is still being specified. This section describes version 0.22 specification.
In the language there is a memory space called udage, consisting of all the symbols available and a tape.
The tape is a linear memory space with unbounded cells, each containing a bit value, 0 or 1. Udages are a sort of pointer which moves on the tape and reads/writes bit values, so each udage has a pointer value that represents which cell it is on currently. Initially all bit values and pointer values are 0.
In the beginning all udages point to cell 0, which is a special value meaning it points to itself. If there are 256 symbols, the udages initially point to 256 different cells, although they all have a pointer value of 0.
The term "udage" (pronounced yer-da-gee) is from Korean word "여닫이" (Yeodaji), which refers to a door with a hinge. This is inspired by the peculiarity of the variable: it can represent 0 or 1, analogous to a door being open or closed, and it can point to a cell on the tape (every door leads to somewhere else).
|Syntax||WHAT IT DOES|
||changes bit value.|
||changes pointer value.|
||executes repeatedly while condition is met.|
There are also some languages that have been inspired by Udage: