[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: RE: succinctness = power
On -1 xxx -1, Matthias Felleisen wrote:
> Finally, I argue that using NON-local transformations to implement
> patterns as linguistc constructs takes away a lot of explanatory power
> from the programmer.
I agree. The kind of non-local transformations we found most useful fell
into two camps:
- transformations on constructs very close to, but not directly enclosed
by, the macro. For example, annotating a field (eg, as a JavaBeans
property) might trigger the addition of a few methods and an interface
declaration to the class.
- non-intrusive extensions of other constructs, like the example I gave of
adding a visit() method to a visitor interface. How "non-local" this
seems depends largely on how accustomed you are to such extensions;
adding methods to other classes is not a big deal for those used to
Smalltalk or Ruby, less comfortable for those used to C++ or Java.
I'm not necessarily arguing for unrestricted scope of transformation; for
one thing, the fact that ELIDE allows it forces batch compilation, which
makes it impractical in a lot of situations. I do think that macros are
too restrictive. Somewhere in between there may be a sweet spot. For
Lisp, for example, it might be interesting to look at what you could do
with a "macro" that affected both its scope and its enclosing scope but
no further. This would get around some of the composability issues I have
with lisp macros, in that you can have multiple macros operating in the
same scope (yes, you'd need all kinds of messy dependency stuff to order
them correctly...)
Avi