[racket-dev] `#%declare' and cross-phase persistent modules

From: Stephen Chang (stchang at ccs.neu.edu)
Date: Mon Jul 22 18:09:33 EDT 2013

The build completes successfully now. Thanks.

On Mon, Jul 22, 2013 at 5:33 PM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
> I'm seeing that in a fresh build. (Didn't see it before, because I had
> mangled my build.)
>
> I'll push a repair shortly.
>
> At Mon, 22 Jul 2013 17:14:49 -0400, Stephen Chang wrote:
>> When compiling a fresh git head clone, I still get some cross-phase
>> persistence errors (see below). Is this my fault, or are some packages
>> still missing the declaration?
>>
>>
>> raco setup: --- checking package dependencies ---
>> raco setup:
>> raco setup: error: during making for
>> <pkgs>/errortrace-doc/errortrace/scribblings
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/errortrace-lib/errortrace
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/errortrace-lib/errortrace
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/errortrace-lib/errortrace
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/errortrace-lib/errortrace
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/errortrace-lib/errortrace
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/errortrace-lib/errortrace/lang
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/algol60
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/drscheme
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/drracket
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/drracket/private
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/scribble/tools
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/scribblings/tools
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/scribblings/tools
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/scribblings/tools
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/scribblings/drracket
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/drracket/private
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/scribblings/drracket
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>> raco setup:
>> raco setup: error: during making for <pkgs>/drracket/drracket/private
>> raco setup:   module: does not satisfy cross-phase persistent grammar
>>
>> On Mon, Jul 22, 2013 at 12:18 PM, Matthew Flatt <mflatt at cs.utah.edu> wrote:
>> > As of v5.90.0.2 (pending), to declare a cross-phase persistent module,
>> > the module body must include
>> >
>> >  (#%declare #:cross-phase-persistent)
>> >
>> > If the module declaration fails to meet the syntactic and import
>> > constraints of a cross-phase persistent module, then a syntax error is
>> > reported.
>> >
>> > This change is backward-incompatible in two ways:
>> >
>> >  * Module declarations that are intended as cross-phase persistent
>> >    won't be, anymore, until a `#%declare' form is added.
>> >
>> >    I think cross-phase persistence is new enough --- and the old, quiet
>> >    inference of persistence is sufficiently distressing --- that this
>> >    won't be much of an issue.
>> >
>> >  * The grammar of fully-expanded modules now includes `#%declare'
>> >    forms.
>> >
>> >    Programs that process fully-expanded modules are not common, but I
>> >    expect that they exist outside of the main distribution. Those
>> >    programs will need to be updated. Meanwhile, they won't break until
>> >    they see a module that has a `#%declare' form, which won't happen
>> >    often (at least for the near future).
>> >
>> > Although `#:cross-phase-persistent' is the only keyword recognized by
>> > `#%declare' initially, we'll add more. One possibility is a declaration
>> > that corresponds to `compile-enforce-module-constants'.
>> >
>> > I named the form `#%declare' instead of `declare' to avoid conflicts,
>> > and also because I expect the form to be used more often in macro
>> > expansions than directly, so it seems like a "#%" kind of form.
>> >
>> > _________________________
>> >   Racket Developers list:
>> >   http://lists.racket-lang.org/dev

Posted on the dev mailing list.