Re: Namespace management & SRFI-0
Marc Feeley 06 Jan 1999 17:10 UTC
> Is it permissible for an implementation to make available the definitions
> implied by a SRFI only within the body of a corresponding `if-implements'?
No.
Remember that an SRFI just describes a property of a Scheme system
which is more general than an API consisting of a set of procedures
and special forms.
For example an SRFI, say SRFI-123, could specify case-sensitivity
(i.e. a Scheme system which conforms to SRFI-123 is case sensitive
and distinguishes the symbol foo from Foo and FOO). So consider
the program:
(if-implements SRFI-123
(begin)
(error "The Scheme system must be case sensitive to run this program!"))
(define (f x)
(case x
((Foo) 1)
((FOO) 2)
(else 3)))
(write (f 'foo)) ; we want this to print 3
So if you limit case-sensitivity to the first branch of the
if-implements, this program will not work as expected.
> My thinking is this: what I would like to do is map `if-implements' to
> RScheme's `with-module'. ((with-module M B ...) provides access within
> its body, B ..., to the exported definitions of the given module M.) I am
> planning on providing most SRFI implementations in the form of loadable
> modules with canonical names. This should allow users to easily download
> new SRFI implementations, and propertly manage the namespace even of
> conflicting SRFIs.
I think a different mechanism is needed for this which does
dynamic-loading of required modules, etc. That's for a different SRFI
to propose. SRFI-0 should only be viewed as a macro-expansion-time
feature tester.
Marc