We are currently working on new rules for what content should and shouldn't be allowed on this website, and are looking for feedback! See Esolang:2026 topicality proposal to view and give feedback on the current draft.
BinaryDict
BinaryDict is a minimalist, stack-based esoteric programming language designed by User:namotanu in 2026. All data, variable keys, and instructions are represented using binary strings (combinations of 0 and 1).
Despite its minimal instruction set, BinaryDict has been proven to be Turing-complete by natively implementing a 2-counter Minsky machine simulator. I hope there are no mistakes.
Overview
BinaryDict operates on a global variable dictionary (mapping binary string keys to binary string values) and an internal evaluation stack. Programs are executed as a sequence of 3-bit opcodes stored in variable 0.
The language can be written in raw binary (3-bit opcodes) or using its assembly representation (**Assemble-BinaryDict**), which includes syntactic sugar [...] for inline raw binary conversion.
Variables & Memory Layout
The memory space is a dictionary where both keys and values are raw binary strings. Certain variables hold special system states:
0: Program instruction sequence.00: Instruction Pointer (IP).01: Evaluation Stack.011: Standard Input (Input stream).010: Standard Output (Output stream).
Instruction Set
An assembly syntax (**Assemble-BinaryDict**) maps 1-to-1 with the 3-bit binary instructions:
| Binary | Asm | Name | Stack Operation & Behavior |
|---|---|---|---|
000 |
; |
Assign | Pops val (2nd), pops key (1st). Assigns variables[key] = val.
|
001 |
, |
Push 1-marker | Pushes a stack element start marker. |
010 |
0 |
Push '0' | Appends bit 0 to the current top stack element.
|
011 |
1 |
Push '1' | Appends bit 1 to the current top stack element.
|
100 |
- |
Pop/Truncate | Pops a value, removes its last bit, and pushes the result back. |
101 |
+ |
Concatenate | Pops right (2nd), pops left (1st). Pushes left + right.
|
110 |
? |
Conditional | Pops cond (3rd), val1 (2nd), val0 (1st).Pushes val0 if cond ends in 0, val1 if cond ends in 1. Pushes nothing if cond is empty.
|
111 |
# |
Fetch Variable | Pops key, fetches variables[key], and pushes its value.
|
Computational Completeness
BinaryDict is Turing-complete. Proof of Turing-completeness was formally established by embedding a 2-counter Minsky machine interpreter written natively in BinaryDict/Assemble-BinaryDict.
Minsky Machine Construction
A 2-counter machine is simulated using unary numbers (sequences of 1s) for both counter values and instruction addresses.
Minsky instructions are encoded as tuples of four elements:
[Jump Target (Unary)], [Counter Choice (0 or 1)], [Operation (1=INC, 0=DEC)], [Address (Unary)]
The core interpreter loop processes these tuples, updating the two counters (0 and 1), checking for zero-decrement conditions using BinaryDict's empty-string checking technique, and jumping to the specified target address.
Minsky Machine Interpreter
In Assemble-BinaryDict, the fully self-contained interpreter is expressed as follows:
,010#,00010; , 001010111 001010010011010011010010011010010011010010011011010010011010011010010011010010011010010011011011011011011011011011 010010011010011011011011010011011010010011010011010010011010010011010010011011010010011010011010010011010010011010 010011011011011011011011011011010010011010011010010010 001010010011010011010010011010010011011010011010010011011010011010010011010010011011010011010010011010010011011010 011010010011010010011011010011011010011010010011010010011011010011010010011011010011011010011010010011010010011011 010011010010011011010011010010011010010011010010011011010011010010011011010011010010011010010011011010011010010011 010010011011010011010010011010010011011010011011010011011010011011010011011010011011010011011010011011010011011010 011010010011010010011011010011011010011010010011011010011010010011011010011011010011011010011011010011011010011010 010011010010011010010011010010011011010011010010011011010011010010011010010011011010011010010011010010011011010011 010010011010010011011010011011010011010010011010010011011010011010010011011010011011010011010010011010010011011010 011010010011011010011010010011010010011010010011011010011010010011011010011010010011010010011011010011010010011010 010011011010011011010011011010011011010011011010011011010011011010011011010011011010011010010011010010011011010011 011010011010010011011010011010010011011010011010010011010010011010010010011010011010010011010010011011010011010010 011011010011010010011010010011011010011010010011010010011011010011010010011010010011011010011011010011011010011011 010011011010011011010011011010011011010011011010011010010011010010011011010011010010011010010011010010011010010011 011010011010010011011010011010010011010010011011010011010010011010010011011010011010010011010010011011010011011010 011010010011010010011010010010011010011010010010011010011011010010011010011011010010011010011010010011010010011010 010011011010010011010011011010010011010011010010010011010011010010011010010011010010011011011011011011011011010010 011011010011010011011011011011011010011010011 001010010010011111111110101001010000 000010010010011111011001010010010011000 001010010010011010111010001010010010011011111101001010011010000 ,0000; ,0000#