|
From: | Panicz Maciej Godek |
Subject: | Re: Making apostrophe, backtick, etc. hygienic? |
Date: | Sun, 30 Aug 2015 15:57:54 +0200 |
Panicz Maciej Godek <address@hidden> writes:
> You mean that #'x is synonymous to (syntax x), and that's where the
> problem stems from?
Yup. I shadow 'syntax', but I don't explicitly shadow "#'". It gets
shadowed implicitly. Lexical scoping and hygiene are supposed to let
the programmer forget about such worries.
> I think that every lisper should know that 'x is synonymous to (quote
> x), and in some contexts it might be desirable to bind a new meaning
> to the "quote" form (and this is already done by some libraries,
> notably in the (ice-9 match) module).
One may know, but still forget when sufficiently tired, and/or when
using the word "quote" to mean something conceptually different than the
quoting in lisp.
For instance, some kind of text processing program might give the term
"quote" a specific meaning in the program's problem domain, and once
you're immersed deeply enough in this domain, you might find yourself
naming some function parameter "quote" without giving it a second
thought. Kind of difficult to explain what I mean, but I know it
happens to me when I'm not careful.
As another example, it also keeps
happening to me that I write code like:
(syntax-rules ()
((_ foo)
(begin
...
(let ((foo bar))
...))))
where I forget that the 'foo' there will not be bound freshly by that
let form, and that despite that I understand how 'syntax-rules' works
very well (externally, not necessarily internally!). One is just
accustomed to be able to let-bind whatever one wants, and lexical
scoping and hygiene take care of all worries ... except when not. :-)
(In this case it has nothing to do with quote/syntax/etc., just giving
an example of what silly mistakes I can make when not careful.)
(Nowadays I name all my pattern variables <foo> for that reason. Reads
like BNF too, which is nice. And I don't see it ever clashing with
record type names in practice.)
> As to "syntax", the use of #'x is much rarer, and the idea that #'x is
> (syntax x) is indeed a bit controversial. But this regards the whole
> syntax-case macro system, and I think that it would be more valuable
> to think how to fix its flaws, rather than change the very
> fundamentals of the language.
Hmm, I'm not sure what flaws of syntax-case you have in mind. IMO it's
a pretty nice system.
But either way, I don't think making #'foo expand
to (__syntax__ foo), and simply making __syntax__ a synonyms to syntax,
are fundamental changes.
[Prev in Thread] | Current Thread | [Next in Thread] |