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

From Esolang
Jump to navigation Jump to search

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#

See Also