guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: problems with syntax-case and with-syntax


From: Matt Wette
Subject: Re: problems with syntax-case and with-syntax
Date: Wed, 20 Sep 2017 05:50:19 -0700

> On Sep 18, 2017, at 6:16 AM, Matt Wette <address@hidden> wrote:
> 
>> 
>> On Aug 27, 2017, at 6:35 PM, Mark H Weaver <address@hidden> wrote:
>> 
>> Mark H Weaver <address@hidden> writes:
>> 
>>> The problem is that in Guile 2.2, whenever (define <id> ...) is found in
>>> the expanded code, where <id> was introduced by a macro (i.e. not passed
>>> as an explicit argument to the macro), Guile will rewrite the <id> into
>>> a new name based on the hash of the entire definition form.
>> 
>> I forgot to mention that only top-level definitions are munged in this
>> way.
>> 
>> Also, my parenthetical definition of what it means to be "introduced by
>> a macro" lacked precision.  To avoid <id> being "introduced by a macro",
>> it's not enough for <id> to have been passed an argument to the macro
>> that generated the definition.  If that were the case, you could work
>> around this by adding an additional layer of macros, where the upper
>> layer generated <id> and passed it down to the lower layer which would
>> generate the definition.
>> 
>> To avoid <id> being considered "introduced by a macro", <id> must
>> ultimately occur verbatim in the source code outside of any macro
>> template.
> 
> I have read through the posts, and the Guile 2.2 ref manual.  The explanations
> are not quite complete in my mind.  If all top-level id's introduced by macros
> were munged, then it would break a lot of existing code.  See, for example,
> the `define-structure' example in "The Scheme Programming Language", 4th ed.
> It seems identifiers introduced by datum->syntax are preserved, as long 
> as they are not redefined.  Is that correct?
> 
> In my case, I was redefining by architecture (or convention). I was 
> generating 
> "wrap-" + <identifier> in a macro that called a another macro that made the 
> same 
> definition.  Is it bad form to assume an convention like this?
> 
> Off to do more reading on this: Dybvig's paper on syntax-case and I have the 
> book too.  and R6RS ...

I have been convinced that introducing top-level definitions is bad form, so I 
will 
be removing datum->syntax calls but stuffing some procedures into the 
associated 
struct, I think.  So instead of

  (define-fh-type foo_t)
  ...
  (unwrap-foo_t obj)

I will use

  (define-fh-type foo_t
     foo_t? make-foo_t)
  ...
  (fh-unwrap foo_t obj)

Matt





reply via email to

[Prev in Thread] Current Thread [Next in Thread]