[gambit-list] A question concerning load/include

Bradley Lucier lucier at math.purdue.edu
Thu Mar 17 13:59:14 EST 2005


I seem to have trashed about a dozen recent e-mail messages, including 
this one, but here's a reply:

> Are these declarations documented anywhere, I can't seem to find it in
> gambits distributed docs.
>
> >
> > See also (declare (core)) and (declare (not core)).
> >

Use The Source, Luke.  Marc, these really should be documented unless 
you think they're a hack and will be eliminated in the near future.

In gsc/_ptree1.scm, we find:

; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
- - - -
;
; Declarations.
<stuff omitted>
; Compilation strategy declarations:
;
; (block)     global vars defined are only mutated by code in the 
current file
; (separate)  global vars defined can be mutated by other code
;
; (core)      toplevel expressions and definitions must be compiled to 
code
; (not core)  toplevel expressions and definitions belong to another 
module


And see how it's used in the compiler.  For example, there's 
_envadt.scm, which defines Abstract Data Types for use in _env.scm, but 
which are also used in other files.  So in _env.scm we find

_env.scm:(include     "_envadt.scm")

while in other files that use the accessors, setters, etc., defined in 
_envadt.scm we find

_back.scm:(include-adt "_envadt.scm")
_env.scm:(include     "_envadt.scm")
_front.scm:(include-adt "_envadt.scm")
_gvm.scm:(include-adt "_envadt.scm")
_ptree1.scm:(include-adt "_envadt.scm")
_ptree2.scm:(include-adt "_envadt.scm")
_source.scm:(include-adt "_envadt.scm")
_t-c-1.scm:(include-adt "_envadt.scm")
_t-c-2.scm:(include-adt "_envadt.scm")
_t-c-3.scm:(include-adt "_envadt.scm")
_utils.scm:(include-adt "_envadt.scm")

while include-adt is defined by

(##define-macro (include-adt filename)
   `(begin
      (##declare (not core))
      (##include ,(string-append "../gsc/" filename))
      (##declare (core))))

So the definitions in files included with "include-adt" can be inlined, 
etc., in the surrounding source files, which is important for speed, 
but code for these standalone accessors will be defined only in 
_env.scm.

Brad




More information about the Gambit-list mailing list