[racket] Flatten syntax and runtime phases?
No apologies needed. I just wanted to warn you that some old-style Lispers will give you a hard time concerning 'hygiene' and I also wanted to give you an idea that they usually don't understand the full range of expressive power we get from it, not to speak of the conflation of pattern-matching style macro definitions and scope-sensitivity. [Yes, these ideas are fully orthogonal and our senior author on the original 'hygiene' paper wanted to make this point by forcing us into using Lisp-style macros. People never understood anyway.] -- Matthias
On Jul 13, 2012, at 5:06 PM, Nick Sivo wrote:
>> You might have an extremely deep understanding of macros, in which case you can ignore the next sentence.
>
> I don't, and apologize if I've been using the term (and others!)
> incorrectly. What little I know has come from the documentation and
> papers I've encountered, and lacks the rigor of academic training or
> insight from the history of Racket.
>
> In providing an observation based on my personal (and limited)
> experience, I feel I've accidentally happened upon a (contentious?)
> topic with history unfamiliar to me, and about which I'm not currently
> able to converse precisely. Oops :)
>
> -Nick
>
> On Fri, Jul 13, 2012 at 12:37 PM, Matthias Felleisen
> <matthias at ccs.neu.edu> wrote:
>>
>> On Jul 13, 2012, at 2:05 PM, Nick Sivo wrote:
>>
>>> There were only a few places where breaking hygiene was a feature,
>>
>>
>> You might have an extremely deep understanding of macros, in which case you can ignore the next sentence.
>>
>> Hygiene -- as it is used nowadays, not the thing for which I imported Barendregt's original term -- does not just prohibit certain idioms it also enables some that cannot be implemented with old macro system.
>>
>> And yes, the cost you pay is that you need to learn a distinct notation. BUT I would argue that for true syntax programmers, this is a plus because it reminds them of the very important fact that syntax is evaluated at a very different time from run-time code, and that values flowing from one phase to another work only by 'accident'. [I understand enough to know that it isn't really by accident but in a sense it is and often it fails in subtle ways.]
>>
>> -- Matthias
>>