The nitrous cogen design is descended from the Mix system [JoSeSo89], via Similix and Schism. These three systems all consist of
self-applicable partial evaluators for various languages. That is
instead of providing cogen
they provide specialize
where
((specialize f s) d) = (f s d)
and then, according to the 3rd Futamura projection [Fu78]:
(define cogen (specialize (specialize specialize)))
Such systems are also known as off-line specializers. An on-line specializer satisfies the definition above, but doesn't produce an efficient cogen. [FUSE] is the canonical on-line system.
More recent systems such as [Fabius] and [BiWe93] implement cogen directly instead of generating it. This was originally motivated by the type-encoding problem of an ML specializer, but is otherwise useful. For example, cogen doesn't have to be written (or compiled into) its own input language (though in theory, ultimately this is only a bootstrapping problem).
The disadvantage of a direct implementation of cogen is that metastatic and static values have separate but parallel implementations, thus a specializer may ultimately be simpler.