An overview of the building module's role and abilities.


§1. Prerequisites. The building module is a part of the Inform compiler toolset. It is presented as a literate program or "web". Before diving in:

§2. Services for builders. This module is essentially middleware. It acts as a bridge to the low-level functions in the bytecode module, allowing them to be used with much greater ease and consistency.

In particular, the functions here enforce a number of conventions about how an Inter tree is laid out. Indiscriminate use of bytecode functions would allow other layouts to be made, but we want to be systematic.

This module needs plenty of working data, and stashes that data inside the inter_tree structure it is working on: in a compoment of that structure called a building_site. Whereas the main data ih an inter_tree affects the meaning of the tree, i.e., makes a difference as to what program the tree represents, the contents of the building_site component are only used to make it, and are ignored by the final code-generator.

§3. Structural conventions. An inter tree is fundamentally a set of resources stored in a nested set of inter_package boxes.

See Large-Scale Structure for the code which builds all of the above packages (though not their contents).

§4. In particular, Inter code is fundamentally a mass of inter_packages, which cross-reference each other using inter_symbols. But of course it cannot all be made simultaneously. What we need is a more flexible way to describe things in the Inter tree: both those which have already been made, and also those which are yet to be made. So:

                DEFINITELY MADE     PERHAPS NOT YET MADE
    PACKAGE     inter_package       //package_request//
    SYMBOL      inter_symbol        //inter_name//

So, for example, a package_request can represent /main/synoptic/kinds either before or after that package has been built. At some point the package ceases to be virtual and comes into being: this is called "incarnation".

And similarly for inter_name, which it would perhaps be more consistent to call a symbol_request.