24.1 Modules and Lazy Loading

In Mozart, modules of the base environment are loaded on need only. For observing this, start a fresh Mozart system and execute:

{Browse FD}

If your Mozart is really fresh than the Browser displays

FD:Future

meaning that the variable FD will be bound to the FD-module once it is needed in the future. This mechanism is called lazy loading.

The idea of lazy loading is as follows: When the Mozart system comes up then not all modules are automatically loaded in order to speed up the start-up time. However, there already exists a propagator in the system, who knows a web-address or a directory from where to import the value of FD. Once the value of FD is needed, this propagator becomes active and binds FD to the FD-module.

There are several ways of expressing the need of a value. For instance,

{Wait FD}

waits until the future value of the variable FD is known and loads its value. In a fresh programming environment, the future value of FD is known to be the finite domain module. Thus {Wait FD} simply leads to loading the finite domain module. Another way of expressing the need of FD is by selection a feature from the module, such as by executing FD.decl.

For programming with functors, a programmer has to know the names of the standard modules he uses. For instance, the procedure Browse is imported by the module Browser of the base environment.

{Browser.browse 'Browse belongs module Browser'}

The procedure Show belongs to the module System of the base environment.

{System.show 'Show belongs to the module System'}

In Mozart, you can also write your own modules that are loaded lazily by using the syntax for describing functors.


Denys Duchier, Claire Gardent and Joachim Niehren
Version 1.3.99 (20050412)