[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: "source"-vicinity

This page is part of the web mail archives of SRFI 59 from before July 7th, 2015. The new archives for SRFI 59 contain all messages, not just those from before July 7th, 2015.



 | Date: Sun, 02 Jan 2005 14:49:11 -0800
 | From: Per Bothner <per@xxxxxxxxxxx>
 | 
 | Some Schemes support compile-time source inclusion.  Chez Scheme
 | has "include", which I've recently added to Kawa.  Often you want
 | to include a file relative to the current file, which suggests an
 | include-relative syntax form.  To implement include-relative you'd
 | need a "source-vicnity" concept.  This of course would have to be a
 | macro, rather than a function.  But there is a complication: the
 | source we want to be relative to is not the implementation of
 | include-relative, where the source-vicinity form appears, but the
 | source containing the include-relative form.

I tried to design vicinities to work either as syntax or procedures.
Library-vicinity, implementation-vicinity, user-vicinity, and
home-vicinity are static; their behavior works either as syntax or
procedures.

Program-vicinity is typically used to load pieces of programs at what
in Common-Lisp is called compile-time.  But program-vicinity is also
used at run-time for locating the software license or help text, for
instance.

Top level definition with the value of (program-vicinity) captures
that vicinity for later use.  We would like to be able to call
program-vicinity at any point in the code and have it return the same
value as a top-level-captured vicinity.  But to have it evaluated
during the load would require it be a read-syntax, wouldn't it?

Another way to do this would be to redefine DEFINE to wrap every
top-level definition thus:

(define <identifier>
  (let ((program-vicinity (lambda () "/program/vicinity/")))
    ...))

Are R5RS macros capable of this?

 | So this suggests a "source-vicinty" form that takes syntax form.
 | Chez Scheme and PLT (and probably others) have a way to extract
 | these using "source annotations"; Kawa also has a mechanism.

Must source-vicinity be distinct from program-vcinity?

 | Unfortunately, many Scheme implementations may be unable to extract
 | the "source-vicinity" of a form, but a (source-relative PATH) form
 | may be possible to standardize.  At least it should be possible to
 | standardize include and include-relative - but probably in a
 | different SRFI.