YO DAWG

YO_DAWG is an esolang with first-class esolangs.

YO_DAWG started as a vague idea Chris Pressey had, probably in the summer of 2012. He placed it on the wiki as a collaborative project in the hopes that someone could come up with a workable design for it.

Goals
In YO_DAWG, esolangs are "first-class objects", which implies things like:


 * You can create new esolangs at runtime.
 * You can pass an esolang to an esolang.
 * You can return an esolang from an esolang.

YO_DAWG is probably stack-based, and there are probably instructions to:


 * push a new esolang onto the stack
 * pop two esolangs off the stack; pass the first to the second; and push whatever esolang is returned back on the stack.

Data types: obviously, the fundamental data type is the esolang. There should be some built-in constants for common esolangs: brainfuck, False, Befunge, Underload, etc. The names of these constants should probably match the names of their entries on this wiki. Possibly with one-letter abbreviations for the most commonly-used esolangs. And of course, there is a constant YO_DAWG.

There might be other data types. The obvious choice for another data type is the program, because then our esolangs will have something to run. But let's not rush to confusion here: in YO_DAWG, esolangs take and return other esolangs, not programs. And a program is only a description of an esolang. There could be an operation to create an esolang from a description of the esolang. But esolangs should still take and return other esolangs directly -- not just their descriptions.

Let's assume for now that descriptions are out of the picture. Then YO_DAWG can only work on esolangs which themselves work on esolangs. This poses a small problem: up until now, all known esolangs (besides YO_DAWG, that is) do not themselves work on esolangs. To reconcile this, we would need to make up some new esolang-based esolangs for YO_DAWG to work on. For example, we could have:


 * I_herd_you_like_brainfuck (a variant of brainfuck where the tape cells contain esolangs)
 * I_herd_you_like_Underload (a variant of Underload where strings are strings of esolangs)
 * ...and so forth.