(guile.info.gz) General Information about Modules
Info Catalog
(guile.info.gz) The Guile module system
(guile.info.gz) Using Guile Modules
31.3.1 General Information about Modules
----------------------------------------
A Guile module can be thought of as a collection of named procedures,
variables and macros. More precisely, it is a set of "bindings" of
symbols (names) to Scheme objects.
An environment is a mapping from identifiers (or symbols) to
locations, i.e., a set of bindings. There are top-level environments
and lexical environments. The environment in which a lambda is
executed is remembered as part of its definition.
Within a module, all bindings are visible. Certain bindings can be
declared "public", in which case they are added to the module's
so-called "export list"; this set of public bindings is called the
module's "public interface" ( Creating Guile Modules).
A client module "uses" a providing module's bindings by either
accessing the providing module's public interface, or by building a
custom interface (and then accessing that). In a custom interface, the
client module can "select" which bindings to access and can also
algorithmically "rename" bindings. In contrast, when using the
providing module's public interface, the entire export list is available
without renaming ( Using Guile Modules).
To use a module, it must be found and loaded. All Guile modules
have a unique "module name", which is a list of one or more symbols.
Examples are `(ice-9 popen)' or `(srfi srfi-11)'. When Guile searches
for the code of a module, it constructs the name of the file to load by
concatenating the name elements with slashes between the elements and
appending a number of file name extensions from the list
`%load-extensions' ( Loading). The resulting file name is then
searched in all directories in the variable `%load-path' ( Build
Config). For example, the `(ice-9 popen)' module would result in the
filename `ice-9/popen.scm' and searched in the installation directories
of Guile and in all other directories in the load path.
Every module has a so-called syntax transformer associated with it.
This is a procedure which performs all syntax transformation for the
time the module is read in and evaluated. When working with modules,
you can manipulate the current syntax transformer using the
`use-syntax' syntactic form or the `#:use-syntax' module definition
option ( Creating Guile Modules).
Please note that there are some problems with the current module
system you should keep in mind ( Module System Quirks). We hope
to address these eventually.
Info Catalog
(guile.info.gz) The Guile module system
(guile.info.gz) Using Guile Modules
automatically generated byinfo2html