[racket] Conditional compilation ?

From: Veer Singh (veer.chah at gmail.com)
Date: Wed Jan 18 02:50:05 EST 2012

Hello ,

How do I during compilation stop propagation of shared state in a some
module and allow propagation of shared state in other modules.

Consider the following normal and compiled modules given below where
applying (add) produces list of symbols.

Now in module m2 if there is some form like (require-special "m1.rkt") then
only (add) should produce '(m n a b x y)
Otherwise for normal require  it should produce '(m n) which mean
(begin-for-syntax ...) in m1 is not touched or executed in different phase
when compiling m2.

I can do other way around though i.e require-special expands to (for-syntax
"m1.rkt") which shifts the begin-for-syntax to phase 2 in m1 and avoids the
But then I am unable to import "add" from m1 without using normal require.

(normal-module m1 racket
  (require "defs.rkt") ; macro definitions for define-something and others
and manipulate shared state

  (provide add)

  (define-something (add x y)

  (define-something (add a b)

  (generate-defn) ;  macro that generate (define (add) '(a b x y))

  (add) ; should produce (list 'a 'b 'x 'y)


(compiled-module m1 racket
  (require "defs.rkt")
  (provide add)
    (add-to-hash! 'add '(x y))
    (add-to-hash! 'add '(a b)))

  (define (add) '(a b x y)) ;result of (generate-defs)
  (add) ; produces (list 'a 'b 'x 'y)

(normal-module m2 racket
  (require "defs.rkt")
  (require (prefix-in m1: "m1.rkt"))

  ;;(require (for-syntax "m1.rkt") ;

  (define-something (add m n) ...)

(compiled-module m2 racket
  (require "defs.rkt")
  (require "m1.rkt")
    (add-to-hash! 'add '(m n)))

  (define (add) '(m n a b x y)) ;result of (generate-defs)

  (add) ;produces '(m n a b x y)
  (m1:add) ;produces '(a b x y)

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20120118/0e3daff7/attachment.html>

Posted on the users mailing list.