BrainCube

BrainCube is an esoteric programming language inspired by brainfuck, that uses a 3D memory cube instead of brainfuck's memory tape. In addition to the memory cube, BrainCube also adds user-declared pointers, and control flow structures.
==Syntax==
===Pointers===
To declare a new pointer, write the pointer's name, surrounded by white space. Example: ~my_ptr~
To execute commands using a pointer, write the pointer's name followed by a sequence of pointer commands in parentheses. Example: my_ptr(+>)
====Pointer commands====
Command	Description
> 	Move pointer to the right
< 	Move pointer to the left
^ 	Move pointer up
v 	Move pointer down
X 	Move pointer forward (into the cube)
O 	Move pointer backward (out of the cube)
+ 	Increment the target cell
- 	Decrement the target cell
. 	Write the value of the target cell to the console as an ASCII character
' 	Write the value of the target cell to the console as a binary number, followed by a newline
: 	Write the value of the target cell to the console as a base10 number, followed by a newline
, 	Set the value of the target cell to the ASCII value of a character from the console
" 	Set the value of the target cell to the value of a binary number from the console (User types binary number, then hits enter)
; 	Set the value of the target cell to the value of a base10 number from the console (User types base10 number, then hits enter)
===Control flow===
If statements will execute if the target of the given pointer is a non-zero value. Syntax:
 (pointer_name){More BrainCube code}
While statements will repeatedly execute while the target of the given pointer has a non-zero value. Syntax:
 (pointer_name)[More BrainCube code]
Repeat statements will execute n times, with n being the initial value of the pointer's target cell, or a number literal written in place of the given pointer. Syntax:
 (pointer_name OR number_literal)(More BrainCube code)
===System commands===
Command	Description
! 	Stops program execution
? 	Triggers a garbage collection
# 	Debugging breakpoint (Exact behavior depends upon implementation)
==Example programs==
===Hello, World!===
 /** Initialization **/
 ~ch~
 ch(XXXXXXX) /*Move to [7][0][0]. The first 256 cells of the tape at [7][0] will hold ASCII values.*/
 
 /** Set cells [7][0][0]..[7][0][255] to 0..255 **/
 ch(>+) /*Set [7][0][1] to 1*/
 (ch)[
 (ch)(
 ch(>+<) /*Increase the cell to the left of the current cell by one.*/
 ) /*The result of this repeat loop is setting the cell to the left of ch to the value of ch*/
 ch(>+) /*Move ch to the left, and increment that cell's value, setting the value of [7][0][n] to n*/
 ] /*This loop exits after the value of ch overflows back to zero.*/
 ch(<)
 (ch)[ch(<)] /*Go back to [7][0][0]*/
 
 /** Print "Hello, World!" followed by null terminator and newline **/
 /*
 Each line moves ch to [7][0][the number in the parentheses],
 prints the value as a character,
 and moves back to [7][0][0]
 */
 (072)(ch(>))ch(.)(ch)[ch(<)] /* H */
 (101)(ch(>))ch(.)(ch)[ch(<)] /* e */
 (108)(ch(>))ch(.)(ch)[ch(<)] /* l */
 (108)(ch(>))ch(.)(ch)[ch(<)] /* l */
 (111)(ch(>))ch(.)(ch)[ch(<)] /* o */
 (044)(ch(>))ch(.)(ch)[ch(<)] /* , */
 (032)(ch(>))ch(.)(ch)[ch(<)] /* */
 (087)(ch(>))ch(.)(ch)[ch(<)] /* W */
 (111)(ch(>))ch(.)(ch)[ch(<)] /* o */
 (114)(ch(>))ch(.)(ch)[ch(<)] /* r */
 (108)(ch(>))ch(.)(ch)[ch(<)] /* l */
 (100)(ch(>))ch(.)(ch)[ch(<)] /* d */
 (033)(ch(>))ch(.)(ch)[ch(<)] /* ! */
 (000)(ch(>))ch(.)(ch)[ch(<)] /* \0 */
 (010)(ch(>))ch(.)(ch)[ch(<)] /* \n */
==External Resources==
* Official GitHub Repository
* Interpreter Written in C++
Category:Languages
Category:Implemented
Category:Cell-based
Category:Brainfuck derivatives
Category:2017
Category:Turing tarpits