[plt-scheme] eval and phases (v4.0.1.2)

From: Sam TH (samth at ccs.neu.edu)
Date: Thu Jun 26 16:42:51 EDT 2008

On Thu, Jun 26, 2008 at 4:38 PM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> At Thu, 26 Jun 2008 15:49:34 -0400, "Sam TH" wrote:
>> On Wed, Jun 25, 2008 at 2:55 PM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
>> > As of version 4.0.1.2 (now in SVN):
>> >
>> >  1. Each namespace has a "base phase" that is used by `eval',
>> >    `dynamic-require', etc., instead of always starting in phase 0.
>> >
>> >  2. While compile-time expressions are evaluated (such as the body of a
>> >    macro transformer or the right-hand side of `define-for-syntax'),
>> >    the current namespace is set to one whose base phase matches the
>> >    evaluation phase.
>>
>> I have a couple issues with this.  First, the following seems like a
>> bug.  If you put this module in the Module language, and hit run:
>
> More simply
>
>  #lang scheme/base
>
>  (define-namespace-anchor anch)
>  (parameterize ([current-namespace (namespace-anchor->namespace anch)])
>   (eval '(+ 3 3)))
>
> This bug is fixed in SVN. (It had to do with lazily creating the
> lexical information for syntax objects in the body of a module.
> Roughly, a `force' was missing.)

Great!

>> Second, in the new regime, how can I accomplish what this macro is
>> trying to do, since the current version no longer works?
>
> I'm not sure I understand. Is it just a question of fixing the bug
> above?

Yes.  I had thought the error was an intentional consequence of the
new behavior, but I was wrong.

Thanks,
-- 
sam th
samth at ccs.neu.edu


Posted on the users mailing list.