[racket-dev] Deprecating collects

From: Eli Barzilay (eli at barzilay.org)
Date: Tue Jul 10 21:20:51 EDT 2012

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!


Posted on the dev mailing list.