I&#x27;ve been thinking a lot about source code transformations as a possible key for maintenance in the &quot;future&quot; of programming. Its interesting to see that the preprocessor, which is a source code transformation itself, makes other source code transformations much more difficult, if not intractable. I&#x27;m wondering if this inherent to any macro system since they are not bijective.<p>Two possible directions I see away from macros which would play nicely with source code transformations are un-macros and layers of languages.<p>Un-macros would take source and display it in the condensed form only for human reading -- this takes away from human writing power of course, which may have to get pushed into the editor. This could also allow for automated pattern discovery.<p>Layers of languages would look similar to Racket&#x27;s #lang concept and current macro systems, but without the ability to escape back into the parent language. This creates a new language on top of -- not mixed into -- the parent language.