[R6RS] safe and unsafe; declarations

dyb at cs.indiana.edu dyb at cs.indiana.edu
Sat Mar 4 14:49:46 EST 2006

> Right.  What bothers me is the idea that any macro I import
> from a library might transform the (safe 3) declarations in
> my code into (safe 0) declarations.  After thinking about it
> some more, I realize that syntax-case allows library macros
> to do that even without your proposed identifier-priority.

You don't need syntax-case for that---syntax-rules macros can do the same
thing.  An identifier-priority procedure doesn't make doing so any easier. 
My point was simply that a library's exports can always use unsafe code
without proving that it's okay to do so, even if you've declared (safe 3). 
If we provide an identifier-priority procedure that can be used, among
other things, to determine the safety level, there's no excuse.

> What bothers me the most, though, is my concern that unsafe
> mode will be perceived as a major misfeature of the R6RS,
> and not as an improvement over the R5RS.  In my view, the
> point of unsafe mode should be to allow the R6RS to talk
> as though certain exceptions are actually required, not to
> serve as a constant reminder that you can't rely on that.

I don't believe including identifier-priority adds to this potential
perception problem.  An "identifier-unsafe?" predicate might, but
identifier-priority isn't limited to checking for unsafe mode.  Perhaps an
example like the following instead of the one I provided earlier would

(define-syntax make-looker
  (lambda (x)
    (syntax-case x ()
      [(k base limit f)
       (if (and (>= (identifier-priority 'fast #'k) 2)
                (<= (identifier-priority 'small #'k) 1))
           #'(make-table-looker base limit f)
           #'(make-direct-looker base limit f))])))


More information about the R6RS mailing list