The design goals of the framework include the following:
- Make it possible for a user to easily experiment with a large number of esolangs.
- Reduce the install burden on the user.
- 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 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.)
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.