I know Piers Cawley hates the word “metaprogramming” as much as I hate any of my pet peeves, but Tomasz WÄ™grzanowski just made a fantastic point:

Every use of text-based runtime code generation is a failure of language’s reflection model.

(See Ruby and methods with weird names.)

Language–and library–designers should keep this principle in mind. One of the explicit design goals of Perl 6 is to enable all of the metaprogramming of Perl 5 without exposing as much of the machinery. (For some reason, assignment to dynamically-scoped typeglobs frightened people.)