For better starting time, Sagittarius caches compiled libraries. The cache files are stored in one of the following environment variables;
For Unix like (POSIX) environment:
SAGITTARIUS_CACHE_DIR
HOME
For Windows environment:
SAGITTARIUS_CACHE_DIR
TEMP
TMP
Sagittarius will use the variables respectively, so if the
SAGITTARIUS_CACHE_DIR
is found then it will be used.
The caching compiled file is carefully designed however the cache file might be
stored in broken state. In that case use -c
option with
sagittarius
, then it will wipe all cache files. If you don't want to use
it, pass -d
option then Sagittarius won't use it.
Users can provide own library with precompile script. The script looks like this;
(import (the-library-1)
(the-library-2))
When this script is run, then the libraries will be cached in the cache directory.
Note: The cache files are stored with the names converted from original library files' absolute path. So it is important that users' libraries are already installed before precompiling, otherwise Sagittarius won't use the precompiled cache files.
Some of the behaviours are not compliant or deviate from other implementations. Here, we list some of them.
The following code will print #t
instead of #f
with -r6
command line option or doing it on a library:
(import (rnrs) (for (rnrs eval) expand))
(define-syntax foo
(lambda(ctx)
(syntax-case ctx ()
((_ id)
(free-identifier=?
#'id
(eval '(datum->syntax #'k 'bar) (environment '(rnrs))))))))
(define bar)
(display (foo bar))
This is because, Sagittarius doesn't have separated phases of macro expansion
and compilation. When foo
is expanded, then the bar
is not defined
yet or at least it's not visible during the macro expansion. So, both _bar_s
are not bound, then free-identifier=?
will consider them the same
identifiers.