▲ | bccdee 2 days ago | |
I would say more or less equivalent to textual macros. Unfortunately, as far as I can tell, the idiomatic way to write Go codegen (having skimmed some codegen repos and written some codegen tooling myself) is with the text/template package. Even battle-tested tools like protoc-gen-go are effectively built with printf statements rather than any sort of AST builder. AST macros are complicated, yeah, and I agree that any half-decent macro system needs a convenient way to dump generated code and so forth. I'm not saying any macro system is better than codegen. But a decent macro system will give you hygenic tools to modify an AST, whereas codegen really forces you to hack something together. I'll grant that there's some worse-is-better charm to codegen, but I don't think that saves it from being ultimately worse. | ||
▲ | kragen a day ago | parent [-] | |
A code generator is just a compiler; general arguments against code generation work equally well as arguments against using a compiler. Writing a compiler is not "worse is better" and does not force you to hack something [fragile] together. Therefore, your argument is wrong. |