On Aug 16, 2011, at 5:42 PM, Sam Tobin-Hochstadt wrote:

> On Tue, Aug 16, 2011 at 5:31 PM, Matthias Felleisen
> <matth...@ccs.neu.edu> wrote:
>> 
>> Eli is right in principle. I sense that we are facing the same kind of 
>> problems we faced when we created mixins and then again when we created 
>> continuation marks.  We need annotations time and again and they couple 
>> parts of our system more closely than necessary. Problem is, we don't seem 
>> to see or have an abstraction that eliminates this coupling.
> 
> Aren't syntax properties precisely this abstraction?


It is a mechanism and as such it is an abstraction. But is it the best possible 
abstraction? 

The use of symbols means the use of a protocol: "when I see 'x, I will perform 
action A."  So the identity of the symbol is critical. And that means we're 
tying together the two (+) components that are subject to the protocol. If the 
symbol changes in one of them, the other one breaks (the type checker, the 
stepper). 

That's Dan's rule: don't use symbols to impose protocols. (Today's add1 day for 
Dan.) 

What you really want is a name (variable). So at a minimum, two components 
should rely on a shared module that exports a variable to be used instead of a 
symbol. Then you could use (gensym) and nobody could mess with the symbol. 
Identity would be enforced afresh every time you start the system. 

But once you introduce a random name, you see that you want some other 
mechanism that 'mixes' into the compilation process as needed. 

-- Matthias



_________________________________________________
  For list-related administrative tasks:
  http://lists.racket-lang.org/listinfo/dev

Reply via email to