Smilefuck

Smilefuck is an esoteric programming language similar to brainfuck. It was created on June 6th, 2014 by User:Sacchan.

Memory layout
The data structure manipulated by a Smilefuck program consists of two stacks, l and r, and a working register w. Each entry on the stacks or in the working register is of a boolean type; that is, it is either 0 or 1. When the program is started, the input is loaded onto stack l, and after termination, the output is read from stack r. Input and output are encoded with the top-most bits on the stack being the last ones of the input/output.

Syntax and Semantics
There are four elementary instructions that work on the data structure
 * ! inverts the working register
 * _ swaps the stacks
 * ^ pops the top value of stack l into w. If stack l is empty, this results in an error
 * v pushes the value of w on stack l

Furthermore, there are two loop constructs:
 * (...) repeats the code in the parentheses until the left stack is empty. In C-style, (P) translates to while(!empty(l)){P;}
 * [...] repeats the code in the brackets while the working register is 1. In C-style, [P] translates to while(w == 1){P;}

Intertwining different kinds of loops (e.g. (..[..)..] ) is not allowed.

Identity Function
_

Reverse the input
(^_v_)

Bitwise invert the input
(^!_v_)_(^_v_)

Increment the input
(^_v_)[!]v_(^_v_)_^[!_v_^]!_v_(^_v_)_^[v!](^_v_) Explanation: First add a 0 as most significant bit. (^_v_)[!]v_(^_v_)_ Then invert all digits, as long as they are 1s, as well as the first encountered 0, starting from the lsb ^[!_v_^]!_v_ Simply move the rest of the bits over (^_v_)_ If the msb is a 0, clear it ^[v!] Reverse the bit string (^_v_)

Computational Class
User:Sacchan believes Smilefuck to be Turing-complete, since it is easily possible to model the states of a BCT program with it, though without output. There is no formal proof on the subject as of yet.

External resources

 * A reference implementation of the interpreter, written in Haskell.