Surface
Surface is an esoteric programming language designed by User:Madk.
Characteristics
In Surface, the program's instructions are placed on a 2D grid wrapped around a Klein bottle (not, as intended, a sphere). The instruction pointer wraps according to this geometry.
The 2d memory array is also placed on the surface of a Klein bottle, and the memory pointer wraps according to the geometry.
Pointers wrap on the X axis. When Y bound is reached, the pointer is rotated 180 degrees (so that forward/backward toggles between up/down and left/right between west/east) and X=(X+width/2)%width
Commands
< move the memory pointer left and set the instruction pointer's direction to left (west by default) > move the memory pointer right and set the instruction pointer's direction to right (east by default) ^ move the memory pointer forward and set the instruction pointer's direction to forward (north by default) v move the memory pointer backward and set the instruction pointer's direction to backward (south by default) + increment the current memory cell - decrement the current memory cell o rotate the direction of the instruction pointer clockwise e rotate the direction of the instruction pointer counter-clockwise c rotate the direction of the instruction pointer clockwise, then become z z rotate the direction of the instruction pointer counter-clockwise, then become c / reflect the direction of the instruction pointer and become a \ \ reflect the direction of the instruction pointer and become a / ? skip one instruction in the direction the pointer is facing if the current memory cell is <1 ! skip one instruction in the direction the pointer is facing if the current memory cell is >0 * skip the quantity of following instructions as specified by the number contained in the current memory cell ( set a point to be jumped to by ) and ] ) unconditionally move the instruction pointer back to the most recent ( ] move the instruction pointer back to the most recent ( if the current memory cell is >0 x do away with the most recently accumulated ( . output the current memory cell as a character : output the current memory cell as a number , input the current memory cell as a number @ terminate the program
Computational class
Given an infinitely large memory and instruction bottle, Surface is Turing-complete because it is possible to reproduce any brainfuck code.
+ - and . are exactly equivalent, while input , is roughly equivalent in function.
<
becomes
oo ^e
>
becomes
vo ee
[
becomes
!v( e
]
becomes
oox v] ?e^
Nested [] are fairly trivial, requiring only that the distance between the first line and the rest be separated by two lines for every set of [] this set is inside.
Examples
The examples assume a 32x16 instruction space, which is the size used by the interpreter.
Hello, world!
++++++++(-v . o]v + e++++v ! ^ v + e+++++++++^ x + - v-(e. + - + ^o + -v]ev + -- ^+ + -- ^o +++.v -e-.+++++++.. -.^!+ -e----------- oo+ -.e+.@ .--o+ .+v .-------- -+ ++ -+ ++ -+ ++ -+ .+
External resources
Download Surface interpreter (This implementation features a 32x16 grid for both instruction space and memory. Anything outside the 32x16 grid originating at the code file's top-left is counted as comments.)