<p>In the past I&#39;ve taken a hybrid approach - ad-hoc fixes are done to the generated code, but it is done via &#39;patch&#39; as an automated step, and the diff is stored in source control with everything else.</p>
<p>You&#39;ll need extra tool support to build the diff, as well.</p>
<p>It&#39;s still really brittle, and I would only recommend it if you don&#39;t own the input data you&#39;re generating from, and other consummers rely on it being in its current state.</p>
<p>Take care,<br>
Antoine</p>
<p>On Aug 24, 2010 4:51 PM, &quot;Richard O&amp;apos;Keefe&quot; &lt;<a href="mailto:ok@cs.otago.ac.nz">ok@cs.otago.ac.nz</a>&gt; wrote:<br type="attribution">&gt; <br>&gt; On Aug 22, 2010, at 7:34 PM, Jesse Schalken wrote:<br>
&gt; <br>&gt;&gt; I would also like to strongly discourage code generators.<br>&gt; <br>&gt; I&#39;ve used ad hoc code generators a lot, and never had<br>&gt; reason to regret it.<br>&gt; <br>&gt; The key point is that ALL maintenance of the generated code<br>
&gt; must be done by maintaining the generator and its input,<br>&gt; NOT by patching the output.<br>&gt; <br>&gt;&gt; Every software project which I&#39;ve worked on that used a code generator<br>&gt;&gt; turned into a nightmare, because when we find we need to change<br>
&gt;&gt; something about the generator&#39;s output, all the already generated code<br>&gt;&gt; has to be updated manually while at the same time maintaining all of the<br>&gt;&gt; unique modifications that have been since the code was first generated.<br>
&gt;&gt; It&#39;s a horrible duplication of program logic and maintenance work.<br>&gt; <br>&gt; If you need to change something about a generator&#39;s output,<br>&gt; you do it (always!) by changing the generator&#39;s input, or by<br>
&gt; changing the generator.  Then you *re*generate the code.<br>&gt; There should never *be* any &quot;unique modifications&quot; to the output<br>&gt; of a code generator.<br>&gt; <br>&gt;&gt; Of course code generation is perfectly fine when the output is not<br>
&gt;&gt; intended to be read and maintained by a human.<br>&gt; <br>&gt; &quot;Read&quot; and &quot;maintained&quot; are two different issues.<br>&gt; Depending on the tool-chain, it may be necessary for people to<br>&gt; read the generated code while debugging.<br>
&gt; <br>&gt; <br>&gt; _______________________________________________<br>&gt; Haskell-Cafe mailing list<br>&gt; <a href="mailto:Haskell-Cafe@haskell.org">Haskell-Cafe@haskell.org</a><br>&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</p>