Esotope is a growing collection of implementations for esoteric programming languages("esolangs"). Its goals include:

The current implementation of Esotope is written in Ocaml. Historically some esolang implementations produced by me are also named esotope; they are being integrated to the Ocaml version as time permits.

How to Use

Esotope is currently in heavy development, and has no stable version yet. The development version is available in Mercurial repository (mirrored at Bitbucket).

The main usage of Esotope is to execute given code. This is done using -f option which selects the input language:

$ cat hello.b
$ esotope -f brainfuck hello.b
Hello World!
$ esotope hello.b
Hello World!

Esotope is able to guess the input language from the file extension (in this case, .b maps to Brainfuck). For the list of supported extensions and abbreviations use --list-kinds option.

Esotope is capable for converting various input languages to other languages. For example, one can convert the text (denoted by text pseudo-language) to the Spoon code that prints that text with -t option:

$ echo Hello, world! | ./esotope -f text -t spoon -v | ./esotope -f spoon
Found a path with 5 processors (weight=36): stream --(10)--> text --(10)--> brainfuck --(5)--> brainfuck-with-exit --(1)--> spoon --(10)--> buffer
Hello, world!

Here -v option is used for showing the internal path between the input to the output. As there is no direct transformation between text and Spoon, it uses Brainfuck as an intermediate language.

Supported Languages

As of 2011-09, Esotope supports the following languages:

...and the following non-trivial transformations:

Legacy Implementations

For the historic reasons, various other implementations bear the name of Esotope:

Some implementations are completely suppressed by the current Esotope implementation:

  1. This is the feature that sets Esotope apart from EsCo, which also supports multiple esolangs.

(rev 1a006a94abce)