[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
load versus Macintosh
Date: Thu, 21 May 92 18:11:28 -0700
From: William Clinger <will@skinner.cs.uoregon.edu>
My point was that (load <filename>), where <filename> is a string, is
not completely compatible with the Macintosh file system because, on
the Macintosh, a program can access many distinct files that have
identical names. Yes, even identical full pathnames, because you can
have distinct disk volumes with identical names. On the Macintosh you
need a volume reference number or working directory number in addition
to the pathname, and that number is used to disambiguate. You can't
make that number part of the pathname because it is allocated dynamically
by the Macintosh file system. Hence there cannot be an implementation
of Scheme on the Macintosh that is fully compatible with both the R4RS
and with the Macintosh file system.
I agree that filenames should not be required to be strings. One
certainly doesn't want to be popping multiple dialog boxes in order to
load a large program consisting of several files. Vicinities, which I
proposed earlier, are an attempt to deal with these problems.
(in-vicinity <vicinity> <filename>) procedure
Returns a filename suitable for use by load, open-input-file,
open-output-file, etc. The returned filename is <filename> in
<vicinity>. For most systems in-vicinity is string-append.
IN-VICINTITY does not require pathnames to be strings.
And from R4RS:
(load filename) essential procedure
Filename should be a string naming an existing file ...
LOAD, call-with-input-file, and call-with-output-file are different
from open-input-file, open-output-file, and transcript-on in that the
filename SHOULD, as opposed to MUST, be a string. Vicinities are at
least compatible with LOAD, call-with-input-file, and
call-with-output-file in allowing other objects to describe pathnames.
I expect that this difference in wording is accidental. I would like
to see the requirement that filenames be strings be relaxed.