<ulclass="crumbs"><li><ahref="../index.html">Home</a></li><li><ahref="../inform7n.html">Inform7</a></li><li><ahref="index.html">core</a></li><li><ahref="index.html#P">Preliminaries</a></li><li><b>What This Module Does</b></li></ul></div>
<pclass="purpose">An overview of the core module's role and abilities.</p>
<ulclass="toc"><li><ahref="P-wtmd.html#SP1">§1. Prerequisites</a></li><li><ahref="P-wtmd.html#SP2">§2. The Core</a></li></ul><hrclass="tocbar">
<pclass="commentary firstcommentary"><aid="SP1"class="paragraph-anchor"></a><b>§1. Prerequisites. </b>The core module is a part of the Inform compiler toolset. It is
full details, but essentially: it's C without predeclarations or header files,
and where functions have names like <spanclass="extract"><spanclass="extract-syntax">Tags::add_by_name</span></span> rather than just <spanclass="extract"><spanclass="extract-syntax">add_by_name</span></span>.
<pclass="commentary firstcommentary"><aid="SP2"class="paragraph-anchor"></a><b>§2. The Core. </b>Until 2020, the core module contained almost the entire compiler, but it is
now modularised in such a way that <ahref="index.html"class="internal">core</a> itself only manages the sequence
<pclass="commentary">When <ahref="../supervisor-module/index.html"class="internal">supervisor</a> decides that an Inform project is being compiled, it uses
the <ahref="../words-module/index.html"class="internal">words</a> and <ahref="../syntax-module/index.html"class="internal">syntax</a> modules to build a parse tree for the project and
any extensions it needs, and works out dependencies on kits of Inter code. We
don't need to deal with any of that. For <ahref="index.html"class="internal">core</a>, the business starts when
<ahref="../supervisor-module/index.html"class="internal">supervisor</a> calls <ahref="1-wtc.html#SP3"class="internal">Task::carry_out</a>. The process is a long multi-stage one,
run as a production line: see <ahref="1-htc.html"class="internal">How To Compile</a> for a detailed list of steps,
<ulclass="items"><li>● The <ahref="../assertions-module/index.html"class="internal">assertions</a> module converts top-level declarations — sentences like
"The cat is in the hat" or "A truck is a kind of vehicle", for example — into
a series of logical propositions, making heavy use of the <ahref="../linguistics-module/index.html"class="internal">linguistics</a> and
<ahref="../calculus-module/index.html"class="internal">calculus</a> service modules.
</li><li>● Those propositions are "asserted" as being true by the <ahref="../knowledge-module/index.html"class="internal">knowledge</a> module,
which draws inferences and then reconciles these into a world model.
</li><li>● Both of those modules are helped by the <ahref="../values-module/index.html"class="internal">values</a> module, which handles how
values and descriptions are parsed and then stored within the compiler.
</li><li>● Imperative code inside phrase or rule definitions is the business of the
<ahref="../imperative-module/index.html"class="internal">imperative</a> module, the part of Inform most resembling a conventional compiler.
</li><li>● The <ahref="../runtime-module/index.html"class="internal">runtime</a> module compiles run-time support functions and data structures
needed to make Inform's many concepts work at run-time.
<pclass="commentary">There are then two expansion packs, as it were: the <ahref="../if-module/index.html"class="internal">if</a> and <ahref="../multimedia-module/index.html"class="internal">multimedia</a>
modules, which do nothing essential but add support for interactive fiction