Go to the first, previous, next, last section, table of contents.


The Problem

Here is an example of dependencies which arise in SLIB:

(require 'collect) causes a macro package to be loaded (if not already) in order to MACRO:LOAD `collect.scm'.

`macwork.scm'
requires common-list-functions
`collect.scm'
require yasos which causes `yasyn.scm' to be loaded.
`yasyn.scm'
requires object and format.
`format.scm'
requires string-case, string-port, rev4-optional-procedures, and pretty-print
`pp.scm'
requires generic-write

We already have a conflict. Both `collect.scm' and `comlist.scm' (common-list-functions) define reduce (differently). A module system should prevent such a conflict. "comlist.scm" was loaded by the macro expander. Procedures involved in the macro expansion should not be visible in the expanded code's name space. This example shows that modularity is not so much about sharing identifiers as it is about not sharing identifiers.


Go to the first, previous, next, last section, table of contents.