Hi, On Sunday, February 20, 2022 4:03:26 AM EST Liliana Marie Prikler wrote: > So here's my suggestion: > > Inside chez-and-racket-bootstrap, define (make-) functions for > the following: > - chez-bootstrap-bootfiles, chez-for-racket-bootstrap-bootfiles: > Taking version and origin. > - racket-vm-cgc: Taking version and origin. > - racket-vm-bc: Taking racket-vm-cgc. > - racket-vm-cs: Taking racket-vm-bc. > > Inside chez, define chez-scheme, as well as non-bootstrapped versions > of stex et al. > Also define make-chez-scheme-for-racket, taking version and origin as > parameter. Finally, define chez-scheme-for-system, which uses > (resolve-interface '(gnu packages racket)) to get racket's version and > origin. > > Inside racket, define %racket-version, %racket-origin, racket-minimal > and racket. It'd also be good if you made local definitions > (define racket-vm-cgc (make-racket-vm-cgc %racket-version %racket- > origin)) > (define racket-vm-bc (make-racket-vm-bc racket-vm-cgc)) > ... > in this file. My understanding—which is not very good!—is that this would have the same problem we do currently. It would be analogous to my example from : > But Ludo’'s examples show that's wrong: those uses of `chez scheme` are in > what the "expansion contexts" model would call "expression contexts". > > Instead, I think rule № 2 prohibits any reference to a variable imported > from > another (gnu packages ...) module that will be evaluated when the (gnu > packages ...) modules are—visited? instantiated? [2][3]—IDK when exactly, > but, for practical purposes, any variable reference that is not underneath > a lambda abstraction. > > If that's right, IIUC, it would mean that: > > (define chez-scheme-for-racket > (make-chez-scheme-for-racket ...)) > > would also be prohibited. > > On the other hand, uses of `(racket-vm-for-system)` and `(chez-scheme-for- > system)` in an `imports` field should still be fine, thanks to the implicit > thunks. The reference to `make-chez-scheme-for-racket` or `make-racket-vm-cs` or any such procedure defined in "chez-and-racket-bootstrap.scm" would be evaluated when "racket.scm" is instantiated—or whenever precisely it is that causes the problem. -Philip