All well and fine but defmacro should be specified as a library for 'porting old CL code, but highly discouraged for useful macros'.
-- Matthias On Jul 10, 2012, at 9:20 PM, Eli Barzilay wrote: > 50 minutes ago, Matthew Flatt wrote: >> >> Some will want `defmacro', maybe for porting old code. So, if we >> don't provide `defmacro', then others will waste time re-creating it >> and/or asking how to re-create it. > > +7. And given a plan for migrating code from mzlib/* to racket/*, I > think that this should be moved too -- but the documentation should be > very explicit about the bad sides of using it, much more than it does > now. (It could also mention a brief note on how it guesses the > context back since that makes the hack aspect very obvious.) > > Three concrete examples for it being very useful: > > 1. Porting old scheme or CL code, or even new code written by people > who know only symbolic macros. In both cases it's better to have > some way to do a quick job, and later on upgrade to proper macros > rather than make it an all-or-nothing job (which in these cases > will often end up on the nothing side). > > 2. Semi-related: some people will inevitably use defmacro because they > have a vague intuition that it's obviously the most powerful > system, so they'll continue using it. Having a defmacro in Racket > is a very real way to say "no, it's a weaker system that can be > emulated". I know that this is a very high-level reason, but it is > manifested in a real way by allowing these people to port/write > code quickly and later on learn about proper macros. (This item is > based on a *lot* of interactions I've had with many people on this > subject.) > > 3. Another place where I find it useful (and also semi²-related), is > teaching. I find it very useful to introduce macros as "just sexpr > functions" since it corresponds to the simplified mental model that > students use for writing interpreters, then see how that breaks, > then show how the "syntax" type should grow from sexpr to > sexpr+scope, which also makes it more natural to later see how it > keeps growing to accomodate source information and more. > > -- > ((lambda (x) (x x)) (lambda (x) (x x))) Eli Barzilay: > http://barzilay.org/ Maze is Life! > > _________________________ > Racket Developers list: > http://lists.racket-lang.org/dev _________________________ Racket Developers list: http://lists.racket-lang.org/dev