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.

Angelfrick--

From Esolang
Jump to navigation Jump to search
Angelfrick--
Paradigm(s) imperative
Designed by User:Acidbytes.h
Appeared in 2026
Type system untyped
Memory system cell-based
Dimensions one-dimensional
Computational class Turing complete
Reference implementation angelfrick--.cpp (C++)
Influenced by brainfuck, Angelfrick
File extension(s) .angelfrick--

Angelfrick-- is the trivial brainfuck substitution TrivialBrainfuckSubstitution("THYROPARATHYROIDECTOMIZED><+-.,[]", "SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]", "HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]", "PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]", "ANTIDISESTABLISHMENTARIANISM><+-.,[]", "GIBBERISHGHEJVIYOCNJNIRJVJJKWBXVQGV><+-.,[]", "PSEUDOPSEUDOHYPOPARATHYROIDISM><+-.,[]", "FLOCCINAUCINIHILIPILIFICATION><+-.,[]").

The name inverts in the obvious way. Angelfrick-- decrements the difficulty; the planned Angelfrick++ increments it.

Commands

Each keyword is a long English word followed by the literal text ><+-.,[].

brainfuck Angelfrick-- Bytes Meaning
> THYROPARATHYROIDECTOMIZED><+-.,[] 33 Move the pointer right
< SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[] 42 Move the pointer left
+ HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[] 44 Increment the current cell
- PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[] 53 Decrement the current cell
. ANTIDISESTABLISHMENTARIANISM><+-.,[] 36 Output the current cell as a character
, GIBBERISHGHEJVIYOCNJNIRJVJJKWBXVQGV><+-.,[] 43 Read one character into the current cell
[ PSEUDOPSEUDOHYPOPARATHYROIDISM><+-.,[] 38 Jump past the matching close if the current cell is zero
] FLOCCINAUCINIHILIPILIFICATION><+-.,[] 37 Jump back to the matching open if the current cell is nonzero

Six of the eight keywords are real English words, drawn mostly from the standard trophy words of English lexicography. GIBBERISHGHEJVIYOCNJNIRJVJJKWBXVQGV is not; the author ran out of long words before running out of commands, and the input instruction is therefore keyboard mash. That the language uses hippopotomonstrosesquippedaliophobia — the fear of long words — as its increment instruction, and therefore the one a programmer meets most often, is intentional.

The trailing ><+-.,[] is a complete copy of brainfuck's instruction set attached to every instruction. None of its eight characters ever does anything.

Syntax

  • Keywords are matched by prefix, and any byte that does not begin a keyword is skipped. Whitespace between keywords is optional.
  • Because unrecognised text is discarded, all non-keyword text is a comment. No comment delimiter exists or is needed.
  • No keyword occurs as a substring of another at a nonzero offset, so prefix matching is unambiguous and maximal munch is not required.
  • Every keyword is pure ASCII and upper case throughout. Unlike Angelfrick, source encoding is not significant.
  • Source files must carry the extension .angelfrick--; the reference implementation refuses anything else, printing ok, so where is it? and exiting.
  • The tape is 30000 cells of char, initialised to zero, with the pointer starting at cell 0. Cells wrap; the pointer is not bounds-checked.

Keywords range from 33 to 53 bytes, averaging 40.75. A program is roughly 43 times the size of the brainfuck it was translated from — smaller than Angelfrick, which averages 53.9 bytes per keyword.

Relationship to Angelfrick

The two languages share an extension check but not a vocabulary, with an asymmetric result. Angelfrick's reference implementation tests its argument with strstr rather than examining the end of the filename, so the string .angelfrick is found inside .angelfrick-- and an Angelfrick-- program is accepted by the Angelfrick interpreter. None of its keywords match, every byte is skipped as a comment, and the program exits successfully having done nothing at all.

The reverse does not hold: the Angelfrick-- interpreter tests for .angelfrick-- and rejects an Angelfrick file outright.

Examples

Hello, world!

Translated from the standard 106-command brainfuck Hello World, giving 4,602 bytes.

HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
PSEUDOPSEUDOHYPOPARATHYROIDISM><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
PSEUDOPSEUDOHYPOPARATHYROIDISM><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]
SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]
SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]
SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
FLOCCINAUCINIHILIPILIFICATION><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
PSEUDOPSEUDOHYPOPARATHYROIDISM><+-.,[]
SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]
FLOCCINAUCINIHILIPILIFICATION><+-.,[]
SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
FLOCCINAUCINIHILIPILIFICATION><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
THYROPARATHYROIDECTOMIZED><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]

Cat

The direct translation of ,[.,]:

GIBBERISHGHEJVIYOCNJNIRJVJJKWBXVQGV><+-.,[]
PSEUDOPSEUDOHYPOPARATHYROIDISM><+-.,[]
ANTIDISESTABLISHMENTARIANISM><+-.,[]
GIBBERISHGHEJVIYOCNJNIRJVJJKWBXVQGV><+-.,[]
FLOCCINAUCINIHILIPILIFICATION><+-.,[]

As in Angelfrick, this program does not terminate under the reference implementation: getchar returns EOF (−1) at end of input, which is stored in the cell as a nonzero value, so the loop continues forever.

Truth machine

The standard esolang benchmark, 103 commands and 5,024 bytes. Given 0 it prints 0 and halts; given 1 it prints 1 forever.

Self-compiler

A brainfuck-to-Angelfrick-- compiler written in Angelfrick--: 6,928 brainfuck commands, 318,009 bytes. It reads a brainfuck program on standard input and emits the Angelfrick-- translation.

./afmm afcmm.angelfrick-- < hello.bf > hello.angelfrick--

Fed its own brainfuck source it reproduces its own 318,009-byte source exactly, verified byte for byte in a single uninterrupted run. The language therefore bootstraps: no external translator is required to produce Angelfrick-- programs.

Snake

A playable 8×8 Snake — growth, pseudo-random food, wall and self-collision, and a running score — at 481,307 brainfuck commands and 18,850,729 bytes. It is turn-based rather than real-time, because brainfuck's input instruction blocks and the language has no clock, so the snake cannot advance on its own while the player watches. This is a limit of the instruction set rather than of the implementation.

Programming in Angelfrick--

Angelfrick-- is legible in a way Angelfrick is not: the keywords are ordinary upper-case dictionary words that can be looked up and spelled. Small programs are genuinely typeable by hand — the cat program is five keywords and 202 bytes — and Hello World, at 4,602 bytes, is a tedious but achievable afternoon. Beyond a few hundred keywords it stops being reasonable.

Two obstacles survive the simplification, and neither comes from the features it removed.

A mistyped keyword is not an error. Because unrecognised text is discarded as a comment, a single wrong letter causes the keyword to be skipped and the program to compute something else in silence. Altering one character of the input keyword in the cat program above makes it produce no output at all, with no diagnostic. For a program of several thousand hand-typed bytes there is no feedback loop of any kind.

More fundamentally, composition still happens in brainfuck. Hello World needs 106 keywords because brainfuck needs 106 commands to print twelve characters; that cost is inherited from the substrate. Nobody reasons about a tape and a pointer through 41-byte English words. A programmer writes brainfuck and expands it — and since the casing is uniform, that expansion is a single sed invocation with eight substitutions. Hand-writing becomes possible and pointless at the same moment.

The distinction from the parent language is therefore narrower than it looks: Angelfrick blocks transcription, Angelfrick-- permits it, and neither permits authorship.

Computational class

A one-to-one substitution of brainfuck's instruction set with no additional state or commands, and therefore Turing complete by the same argument as brainfuck.

Implementation

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define IS(x) (!strncmp(c + i, x, sizeof(x) - 1))
#define OPEN  IS("PSEUDOPSEUDOHYPOPARATHYROIDISM><+-.,[]")
#define CLOSE IS("FLOCCINAUCINIHILIPILIFICATION><+-.,[]")
int main(int ac , char** av)
{
  if (ac < 2 || !strstr(av[1], ".angelfrick--")) return fprintf(stderr, "ok, so where is it?\n"), 1;
  FILE* f = fopen(av[1], "rb"); if (!f) return perror("Oopsies. You have accidentally typed rm -rf /."), 1;
  fseek(f, 0, SEEK_END); long s = ftell(f); rewind(f);
  char* c = (char*)calloc(s + 1, 1); fread(c, 1, s, f); fclose(f);
  char m[30000] = {0}; int p = 0, i = 0, l;
  while (i < s) {
    if (IS("THYROPARATHYROIDECTOMIZED><+-.,[]")) p++;
    else if (IS("SUPERCALIFRAGILISTICEXPIALIDOCIOUS><+-.,[]")) p--;
    else if (IS("HIPPOPOTOMONSTROSESQUIPPEDALIOPHOBIA><+-.,[]")) m[p]++;
    else if (IS("PNEUMONOULTRAMICROSCOPICSILICOVOLCANOCONIOSIS><+-.,[]")) m[p]--;
    else if (IS("ANTIDISESTABLISHMENTARIANISM><+-.,[]")) putchar(m[p]);
    else if (IS("GIBBERISHGHEJVIYOCNJNIRJVJJKWBXVQGV><+-.,[]")) m[p] = getchar();
    else if (OPEN && !m[p]) for (l = 1; l; ) { ++i; l += OPEN - CLOSE; }
    else if (CLOSE && m[p]) for (l = 1; l; ) { --i; l += CLOSE - OPEN; }
i++;
}
free(c);
}

Compile with g++ -O2 -o afmm angelfrick--.cpp and run as ./afmm program.angelfrick--.

Known issues

  • The tape pointer is not bounds-checked.
  • Unmatched brackets cause the scanning loops to run past the ends of the buffer.
  • EOF is stored as −1, breaking the usual ,[.,] cat idiom.
  • The extension check uses strstr, so hello.angelfrick--.txt is also accepted.
  • The return value of fread is ignored.

Trivia

  • Every keyword contains a complete copy of the brainfuck instruction set, and none of those eight characters ever does anything.
  • Because the keywords are uniform upper case with no shared scrambled suffix, an Angelfrick-- program can be produced from brainfuck by a single sed command — the standard fate of a trivial brainfuck substitution, and one Angelfrick deliberately avoids.
  • The 18 MB Snake program compresses to about 100 KB, a ratio near 190:1. Eight repeated keywords is close to the most compressible text a program can be made of.

See also