[racket-dev] [racket] Plea for neologism (was: Re: letoverlambda)

From: Robby Findler (robby at eecs.northwestern.edu)
Date: Wed Nov 24 17:48:11 EST 2010

No I meant a particular system. The one he used.

On Wednesday, November 24, 2010, John Clements
<clements at brinckerhoff.org> wrote:
> (followups trimmed to dev; is that an acceptable strategy?)
>
> On Nov 24, 2010, at 12:44 PM, Robby Findler wrote:
>
>> On Wed, Nov 24, 2010 at 1:49 PM, John Clements
>> <clements at brinckerhoff.org> wrote:
>>>> On Wed, Nov 24, 2010 at 11:05 AM, Robby Findler
>>>> <robby at eecs.northwestern.edu> wrote:
>>>>> On Wed, Nov 24, 2010 at 12:55 PM, Joe Marshall <jmarshall at alum.mit.edu> wrote:
>>>>>>> On Nov 20, 2010, at 6:58 PM, Matthias Felleisen wrote:
>>>>>>>
>>>>>>>> Hygiene is a technical term.  The idea is roughly that
>>>>>>>> the __macro system__ (as a whole) should respect the
>>>>>>>> lexical structure of your program.
>>>>>>
>>>>>> It is somewhat unfortunate that the name `hygiene' has caught
>>>>>> on here.  It really ought to be called `lexical scoping' (with the
>>>>>> understanding that macros have no special permission to violate
>>>>>> lexical scope any more than lambda bindings do).
>>>>>
>>>>> You know about Oleg's macro called, bind-x-to-5 that has one
>>>>> subexpression does exactly its name claims, but in a hygenic macro
>>>>> system?
>>>
>>> Hang on... you're still using the term "hygienic" in the non-Felleisen way.
>>
>> No I'm not.
>>
>>>  That is, if we accept that a hygienic system is one that has well-defined behavior but where you can bind new names when you explicitly ask to, then
>>>
>>> #lang racket
>>>
>>> (define-syntax (bind-x-to-5 stx)
>>>  (syntax-case stx ()
>>>    [(_ exp)
>>>     #`(let ([#,(datum->syntax stx 'x) 5])
>>>         exp)]))
>>>
>>> (bind-x-to-5 x)
>>>
>>> ...is a legal macro in a hygienic macro system.
>>
>> Sure.
>>
>> But Oleg's macro doesn't do that.
>
> Right, I understand.  Oleg shows that you can bind x even in a macro system that doesn't allow variable capture in the way that I used here; in other words, variable capture is possible even in a system-without-XXX, where XXX refers to the property of being able to do what I did here (straightforward variable capture).  IIUC, you use the word "hygienic" in the paragraph above (when you say "but in a hygienic macro system") to mean "system-without-XXX", but Matthias' point is that hygienic *doesn't* mean "system-without-XXX", it just means "system-where-XXX-can-only-occur-deliberately."
>
>
> Naturally, this conversation would be simpler if we had a word for XXX... :)
>
> John
>
>


Posted on the dev mailing list.