[Python-Dev] A Hygienic Macro System in Python?

Daniel Mahler mahler@cyc.com
Tue, 19 Mar 2002 02:19:56 -0600


Greg Ewing writes:
 > Tim Peters <tim.one@comcast.net>:
 > 
 > > Maybe Guido can introduce a canned "withlock" macro just
 > > for that <ahem>:
 > > 
 > >     withlock lock:
 > >         do stuff
 > 
 > Daniel Mahler <mahler@cyc.com>:
 > 
 > > There are many APIs that lead you to write code with certain fixed
 > > parts
 > > ...
 > > I think the thing worth noting here is that the introduced
 > > constructs would usually be colon&indent type entities
 > 
 > I've been trying to think of a Pythonic syntax for passing
 > code blocks to procedures. The best thing I've come up with
 > so far is something like
 > 
 >   lock.do:
 >     something()
 > 
 > which would be (sort of) equivalent to
 > 
 >   def thunk():
 >     do_something()
 >   lock.do(thunk)


How about introducing a defsyn construct,
which takes an aditional *** argument,
whose evaluation is delayed.
The trick is to come up with syntax to distinguish compile/run times.
At *worst* one could use strings to quote the generated code in the macro definition.
Something like:

defsyn lock (lck, ***body):
  # 'expand' = a new keyword representing the macroexpansion operation
  # generated code is automatically indented to the calling level
  expand """
%s.acquire()
try:
    %s
finally:
    %s.release()
""" (lck, body, lck)

lock lck1:
   code

Clearly this is suboptimal and fuzzy as is,
but I think there is a sane idea try to get out :).
Maybe someone can give it more help than I can.

cheers
Daniel



 > 
 > except that the thunk would have to have write access to
 > the namespace it's embedded in, perhaps implemented by
 > sharing the stack frame.
 > 
 > Greg Ewing, Computer Science Dept, +--------------------------------------+
 > University of Canterbury,	   | A citizen of NewZealandCorp, a	  |
 > Christchurch, New Zealand	   | wholly-owned subsidiary of USA Inc.  |
 > greg@cosc.canterbury.ac.nz	   +--------------------------------------+
 > 
 > _______________________________________________
 > Python-Dev mailing list
 > Python-Dev@python.org
 > http://mail.python.org/mailman/listinfo/python-dev