To use the proposed read-time evaluation in a program the program
would have to be in two parts. The first part defines the read-time
constructors and then loads a file containing the second part. The
second part can use `#,' to call constructors defined in the first
part. This is a very clumsy mechanism. I could get the same effect
in vanilla R5RS, with much more power and flexibility, by using EVAL
and an extensible reader:
(define my-reader (make-reader ...))
(eval (my-reader filename) some-environment)
This two-phase evaluation is unnecessary. Using `#,' in a program
has two effects: it causes side effects to occur at read time and it
ensures that a form is evaluated only once. The first has questionable
utility and semantics. The second is already available in R5RS as
`delay' and `force'. The only thing missing is a concise notation.
Why not have
#,(...)
read as
(force (delay (...)))
just as `(...) reads as (quasiquote ...)? This avoids the need to
preregister constructors and it preserves the separation between
syntax and semantics. A program can be evaluated in one fell swoop.
-Richard Kelsey.