Active vs. passive Generators

A passive generator (Wizard) can be used only once to create some artifact. When the generation is done the developer takes over the result and improves/completes it. The class template example from above represents passive generation. There is usual no real model behind passive generation.

An active generator is e.g. a compiler. It is a permanent part of the development process, takes a model and transforms it into a different artifact. When the model changes the compiler needs to run again. Typical for active generators is that the generated code is not changes by the developer. Or an elaborate system is put in place to distinguish generated code from hand-written code (checksums, at-generated tags in EMF). Do not use a passive generator when the artifacts need to change after model changes or you will drive your developers nuts.

Behind all this lies the ugly problem of "roundtripping". Is it possible to re-import changes made by developers after generation in every case? What does this mean for the level of abstraction between model and generated artifacts? Doesn't this imply that only a transformation into a different but equivalent syntax happened which works basically at the same abstraction level?