Tony Arcieri wrote:
> Homoiconicity doesn't afford power so much as simplicity.  Using parse
> transformations in Ruby requires learning what the Ruby parser's "sexps"
> look like, whereas in Lisp you write your code directly in those sexps so
> there is no disconnect.

Actually, you can have complex syntax *and* easy manipulation, by
delegating the building of the AST to the tool that already knows how
to do that anyway: the compiler.

The Converge Programming Language (<http://ConvergePL.Org/>) is a
great example of compile time metaprogramming in a language with
complex syntax (Pythonic in this case). It uses quasi-quoting to let
you build ASTs using the *concrete* syntax of the language and it uses
splice points to allow you to splice AST fragments back into the AST.

For things that are too complex for simple quoting and splicing,
Converge has an abstract standardized API to the compiler.

jwm

PS: Consider this my entry to "what Reia could steal from other 
    languages" (-: