Module loading is managed by the system's module name resolver. The primary responsibility of the module name resolver is to map distinct but equivalent references to modules into canonical forms. For example, it's possible to refer to the PLT Scheme string library with either of the two forms:
The standard module name resolver translates these to an absolute path to the module's source file in the filesystem.(lib "string.ss" "scheme")
The other responsibilities of the standard module name resolver are:
- to ensure that a module is only loaded once,
- to make sure each module is loaded the first time it is needed, and
- to check for and prevent cyclic loading dependencies between modules.