Ivory

From Esolang
Jump to navigation Jump to search

Ivory is a Turing-complete esoteric programming language and 64-bit hybrid Virtual Machine. It was created by Kavindu Widyarathne in February 2026 as a Valentine's Day gift for his girlfriend, notable among esoteric languages for incorporating its romantic origins directly into its temporal pacing.

Architecture & Memory Model

Unlike standard Trivial Brainfuck Substitutions (TBS), Ivory extends the traditional tape-memory computational model into a hybrid 64-bit architecture.

Ivory manages data through a hybrid model that pairs a sparse-memory tape with a dedicated LIFO stack.

  1. The Tape: A bi-directionally infinite, dynamically allocated hash map of 64-bit signed integers (long long). Memory is allocated in O(1) average time only when a cell is accessed.
  2. The Stack: An infinitely expanding LIFO (Last-In, First-Out) stack of 64-bit integers used for O(1) state preservation and retrieval, operating independently of the tape pointer.

The Whisper Constraint

Ivory is intentionally slow. The language enforces what the author calls the "Whisper Constraint". Every time a character is outputted to the standard stream, the host thread is suspended for exactly 50 milliseconds. This hardcoded delay ensures that the output is generated at a deliberate, human-like typing pace. This was originally intended for the dramatic delivery of a compiled poem.

Instruction Set

Ivory's logic is driven by 19 romantic keywords that act as the language's opcodes. Every unrecognized word is completely ignored and functions as an implicit comment, which allows the source code to read like stream-of-consciousness prose.

Core Turing Operations

  • adore : Increment the current cell by 1 (+).
  • miss : Decrement the current cell by 1 (-).
  • hold : Move the data pointer right (>).
  • release : Move the data pointer left (<).

Flow Control & I/O

  • whisper : Output the current cell's ASCII value (triggers a 50ms thread sleep).
  • listen : Accept a single byte of input to the current cell.
  • promise : Jump past the matching always if the current cell is 0 ([).
  • always : Jump back to the matching promise if the current cell is non-zero (]).

Stack Operations

  • cherish : Push the current cell's value onto the top of the LIFO stack.
  • reminisce : Pop the top value from the stack and overwrite the current cell.

Temporal & Environment

  • breathe : Suspend thread execution for exactly 1000ms.
  • clear : Clear the terminal screen using ANSI escapes.

QoL & Architecture Power Features

  • passion : Add 10 to the current cell.
  • heartbreak : Subtract 10 from the current cell.
  • forget : Instantly set the current cell to 0.
  • confess: Output the raw 64-bit integer value of the cell natively.
  • destiny : Absolute pointer dereferencing (teleports the pointer to the address equal to the current cell's value).
  • wonder: Injects hardware entropy (assigns a random 64-bit integer using a Mersenne Twister engine) into the current cell.
  • fade : Gracefully terminate the process (exit(0)).

Implementations

The official reference implementation, ivoryc, is a single-pass Ahead-of-Time (AOT) transpiler written in C++. Rather than interpreting the code, it lexes the source into a temporary C++ Intermediate Representation (IR), and invokes the local system's g++ toolchain to compile an optimized native binary (ELF/PE).

Examples

Hello, World!

Due to the bulk arithmetic opcodes (passion and heartbreak), Ivory source code is significantly more compact than standard Brainfuck. An optimized "Hello, World!" program is as follows:

passion passion passion passion passion passion passion
adore adore whisper passion passion adore adore adore
adore adore adore adore adore adore whisper adore
adore adore adore adore adore adore whisper whisper
adore adore adore whisper forget passion passion passion
passion adore adore adore adore whisper heartbreak miss
miss whisper passion passion passion passion passion adore
adore adore adore adore whisper passion passion adore
adore adore adore whisper adore adore adore whisper
miss miss miss miss miss miss whisper miss
miss miss miss miss miss miss miss whisper
forget passion passion passion adore adore adore whisper
fade

Cat Program

A standard `cat` program that echoes user input back to the terminal until a null byte is encountered. This demonstrates the `promise` and `always` loop structures alongside the `listen` and `whisper` I/O opcodes.

listen
promise
    whisper
    listen
always
fade

The Fibonacci Sequence

The following program calculates and prints the first 50 numbers of the Fibonacci sequence as a demonstration of the 64-bit capacity of the tape. It prints each term natively with a second of pause between calculations.

clear

passion passion passion passion passion
hold forget
hold forget adore
hold forget
release release release

promise
    hold confess
    breathe

    promise
        miss
        hold hold adore
        release release
    always

    hold
    promise
        miss
        release adore
        hold hold adore
        release
    always

    hold
    promise
        miss
        release adore
        hold
    always

    release release release
    miss
always
fade

99 Bottles of Beer

This program prints the lyrics to "99 Bottles of Beer". A standard implementation that shifts between cell 0 (counter) and cell 1 (lyric buffer)

clear
forget passion passion passion passion passion passion
passion passion passion adore adore adore adore adore
adore adore adore adore promise confess hold forget
passion passion passion passion passion passion passion passion
passion adore adore adore adore adore adore adore
adore whisper passion adore adore adore whisper adore
adore adore adore adore whisper whisper miss miss
miss miss miss miss miss miss whisper miss
miss miss miss miss miss miss whisper passion
adore adore adore adore whisper forget passion passion
passion adore adore whisper forget passion passion passion
passion passion passion passion passion passion passion passion
adore whisper miss miss miss miss miss miss
miss miss miss whisper forget passion passion passion
adore adore whisper passion passion passion passion passion
passion adore adore adore adore adore adore whisper
adore adore adore whisper whisper passion adore adore
adore whisper forget passion passion passion adore adore
whisper forget passion passion passion passion passion passion
passion passion passion passion passion adore whisper miss
whisper forget passion passion passion adore adore whisper
passion passion passion passion passion passion passion passion
adore adore adore adore whisper heartbreak miss miss
whisper miss miss miss whisper forget passion passion
passion adore adore whisper passion passion passion passion
passion passion passion passion adore adore adore adore
adore adore adore whisper heartbreak heartbreak miss miss
whisper passion adore whisper whisper forget passion passion
passion passion adore adore adore adore whisper forget
passion whisper release confess hold forget passion passion
passion passion passion passion passion passion passion adore
adore adore adore adore adore adore adore whisper
passion adore adore adore whisper adore adore adore
adore adore whisper whisper miss miss miss miss
miss miss miss miss whisper miss miss miss
miss miss miss miss whisper passion adore adore
adore adore whisper forget passion passion passion adore
adore whisper forget passion passion passion passion passion
passion passion passion passion passion passion adore whisper
miss miss miss miss miss miss miss miss
miss whisper forget passion passion passion adore adore
whisper passion passion passion passion passion passion adore
adore adore adore adore adore whisper adore adore
adore whisper whisper passion adore adore adore whisper
forget passion passion passion passion adore adore adore
adore adore adore whisper forget passion whisper passion
passion passion passion passion passion passion adore adore
adore adore whisper passion adore adore adore whisper
passion whisper miss miss miss miss miss miss
whisper forget passion passion passion adore adore whisper
forget passion passion passion passion passion passion passion
passion passion passion passion adore whisper miss whisper
miss miss miss miss miss miss miss miss
miss whisper forget passion passion passion adore adore
whisper forget passion passion passion passion passion passion
passion passion passion passion whisper passion adore whisper
adore adore adore adore adore adore adore adore
whisper miss miss miss miss miss miss miss
miss miss whisper forget passion passion passion passion
adore adore adore adore whisper heartbreak miss miss
whisper passion passion passion passion passion passion passion
passion whisper heartbreak miss miss miss miss miss
whisper passion adore adore adore adore adore adore
adore adore whisper whisper forget passion passion passion
adore adore whisper passion passion passion passion passion
passion passion adore adore adore whisper passion adore
whisper forget passion passion passion adore adore whisper
passion passion passion passion passion passion adore adore
adore adore adore whisper passion adore adore adore
adore adore adore adore whisper miss miss miss
whisper adore adore adore adore adore adore whisper
miss miss miss miss miss miss miss whisper
heartbreak whisper forget passion passion passion passion adore
adore adore adore whisper forget passion whisper release
miss confess hold forget passion passion passion passion
passion passion passion passion passion adore adore adore
adore adore adore adore adore whisper passion adore
adore adore whisper adore adore adore adore adore
whisper whisper miss miss miss miss miss miss
miss miss whisper miss miss miss miss miss
miss miss whisper passion adore adore adore adore
whisper forget passion passion passion adore adore whisper
forget passion passion passion passion passion passion passion
passion passion passion passion adore whisper miss miss
miss miss miss miss miss miss miss whisper
forget passion passion passion adore adore whisper passion
passion passion passion passion passion adore adore adore
adore adore adore whisper adore adore adore whisper
whisper passion adore adore adore whisper forget passion
passion passion adore adore whisper forget passion passion
passion passion passion passion passion passion passion passion
passion adore whisper miss whisper forget passion passion
passion adore adore whisper passion passion passion passion
passion passion passion passion adore adore adore adore
whisper heartbreak miss miss whisper miss miss miss
whisper forget passion passion passion adore adore whisper
passion passion passion passion passion passion passion passion
adore adore adore adore adore adore adore whisper
heartbreak heartbreak miss miss whisper passion adore whisper
whisper heartbreak heartbreak heartbreak heartbreak heartbreak heartbreak miss
miss whisper forget passion whisper whisper release always
fade

External resources