From Esolang
Jump to: navigation, search

yoob is a framework for implementing esoteric programming languages in Java, designed and built by Chris Pressey.

Design goals

The design goals of the framework include the following:

  1. Make it possible for a user to easily experiment with a large number of esolangs.
  2. Reduce the install burden on the user.
  3. Make it possible for an implementor to rapidly implement new esolangs.

The first goal necessitated a graphical user interface with an emphasis on usability. Yoob could be described as primarily a debugger or animator; an esolang can be defined in a way so that yoob "understands" how to control, display, and animate the execution of programs in it. Often the entire state of the program can be made visible to the user.

The second goal necessitated a language for which implementations are so widespread that they are considered "standard equipment" on a modern personal computer; this suggests a language which has been implemented in multiple web browsers. Besides Java, other realistic choices in this area were Javascript and Flash. Javascript was rejected because the author didn't feel like using a dynamically typed language, and didn't feel like wrestling with more cross-browser issues than he had to. Flash was rejected because the author didn't feel like learning Actionscript, and was intimidated by the vast selection of high-quality free development tools for Flash. Java was also selected for having sufficient support for running outside of browsers entirely. The current implementation of yoob can be run either as a Java applet, or locally as a GUI Java application; there are vague plans to allow it to run under the JNLP, and "headless" as a classical, non-graphical, fully command-line interface.

The third goal necessitated common base classes for features that, though not often found in conventional languages, often appear in esolangs, such as two-dimensional playfields, unbounded tapes, pattern-matching facilities, and so forth.


Tapes are depicted vertically, rotated 90 degrees clockwise from the traditional horizontal orientation: the "left" of the tape is at the top of the display and the "right" of the tape is at the bottom. This is because in many esolangs, each tape cell may contain an unbounded integer, and in Arabic numeral notation, this takes up more horizontal area than vertical; thus displaying the tape vertically is a more efficient use of screen area.

To simplify display logic, stacks, queues, and deques are all implemented using tapes; for each of these data types, the framework provides a subclass of the base BasicTape, but it is up to the implementor of the language to stick to the storage discipline for the data type in question; it does not prevent the object from being used arbitrarily as a tape.


yoob allows you to edit the program to be executed, but the current editing facilities are rather crude. The justification for this is that the main purpose of yoob is to showcase the languages. If you're doing serious editing of programs in the languages, you're free to use an offline editor and copy and paste. (If you want to save your work, you have to do this anyway.)

Language support

As of this writing, yoob can interpret 21 languages: 1L_AOI, 1L_a, 2-ill, 2L, Ale, BackFlip, Befunge-93, Black, brainfuck, Circute, Etcha, Gemooy, LNUSP, noit o' mnain worb, PATH, Qdeql, Sceql, SMETANA, SNUSP, Wunnel, and Ypsilax.


As of this writing, yoob is at a "beta" stage of development. Its source code is publicly available and development takes place in a public repository on Bitbucket. The latest released version is 0.2; until version 1.x, its APIs are subject to change arbitrarily.

External resources