I'm starting a new project at work that will require a good bit of run-time code generation. I like the AST module in Python, but I'd like to think I have an open mind.
I also already know about, and sometimes use, Java Emitter Templates, but that doesn't feel like a run-time solution.
Maybe I'm subconsciously looking for something with the flavor of Go, Lua, Erlang, Ruby, etc. etc. -- you know, trendy ;)
This is a 18+ month long project, so learning a new language is completely reasonable (I picked up Python under similar circumstances).
It is OK if Lisp is the answer... how is arc coming along anyway?
In OO languages this turns into a class hierarchy of nodes, and you'd use the visitor pattern to manipulate them. This approach is awful: it generates large amount of boilerplate code in your program, which, if you're not careful, becomes so large that it obscures the actual logic.
Functional languages provide a better abstraction, in the form of discriminated unions for data structures, and pattern matching in place of the visitor pattern.
I recommend one of the ML family of languages: this is likely to be OCaml, Haskell or F#. I recommend Andrew W Appel's books on "Modern Compiler Implementation": he wrote three books, aimed at Java, C and ML, and the ML book is wonderfully clear.