This section gives a brief description of modules and related entities. For detailed information, including a description of the module configuration language, see the module chapter.
A module is an isolated namespace, with visibility of bindings controlled by module descriptions written in a special configuration language. A module may be instantiated as a package, which is an environment in which code can be evaluated. Most modules are instantiated only once and so have a unique package. A structure is a subset of the bindings in a package. Only by being included in a structure can a binding be made visible in other packages. A structure has two parts, the package whose bindings are being exported and the set of names that are to be exported. This set of names is called an interface. A module then has three parts:
The following example uses
define-structure to create a module that
implements simple cells as pairs, instantiates this module, and binds the
resulting structure to
(export creates an interface
open clause lists structures whose bindings are visible
within the module.
begin clause contains source code.
(define-structure cells (export make-cell cell-ref cell-set!) (open scheme) (begin (define (make-cell x) (cons 'cell x)) (define cell-ref cdr) (define cell-set! set-cdr!)))
Cells could also have been implemented using the
and available in structure
(define-structure cells (export make-cell cell-ref cell-set!) (open scheme define-record-types) (begin (define-record-type cell :cell (make-cell value) cell? (value cell-ref cell-set!))))
With either definition the resulting structure can be used in other
modules by including
cells in an
The command interpreter is always operating within a particular package.
Initially this is a package in which only the standard Scheme bindings
The bindings of other structures can be made visible by using the
Note that this initial package does not include the configuration language.
Module code needs to be evaluated in the configuration package, which can
be done by using the
> ,config (define-structure cells ...) > ,open cells > (make-cell 4) '(cell . 4) > (define c (make-cell 4)) > (cell-ref c) 4
Previous: Disassembler | Next: Library