1
0
Fork 0
mirror of https://github.com/ganelson/inform.git synced 2024-06-17 07:40:47 +03:00

Improvements to top-level navigation of source

This commit is contained in:
Graham Nelson 2022-04-03 23:56:31 +01:00
parent 40de6e1c2e
commit 67fa264942
59 changed files with 1313 additions and 398 deletions

View file

@ -1,6 +1,6 @@
# Inform 7
v10.1.0-alpha.1+6U71 'Krypton' (31 March 2022)
v10.1.0-alpha.1+6U72 'Krypton' (3 April 2022)
## About Inform 7
@ -178,7 +178,7 @@ be accepted. (Note that these are not git submodules.)
* inform7/Internal/Templates - Template websites for Inform 7's 'release as a website' feature
* inform7/Internal/Templates/Parchment - Z-machine in Javascript - __Parchment for Inform 7 (2015-09-25)__ - from [https://github.com/curiousdannii/parchment], maintained by [Dannii Willis](https://github.com/curiousdannii)
* inform7/Internal/Templates/Quixe - Glulx in Javascript - __Quixe for Inform 7 (v. 2.1.2)__ - from [https://github.com/erkyrath/quixe], maintained by [Andrew Plotkin](https://github.com/erkyrath)
* inform7/Internal/Templates/Quixe - Glulx in Javascript - __Quixe for Inform 7 (v. 2.2.0)__ - from [https://github.com/erkyrath/quixe], maintained by [Andrew Plotkin](https://github.com/erkyrath)
* inform7/Internal/Templates/Vorple - Multimedia in Javascript - __Vorple__ - from [https://github.com/vorple/inform7], maintained by [Juhana Leinonen](https://github.com/vorple)
### Binary resources (such as image files)

View file

@ -1,3 +1,3 @@
Prerelease: alpha.1
Build Date: 31 March 2022
Build Number: 6U71
Build Date: 3 April 2022
Build Number: 6U72

View file

@ -1,13 +1,16 @@
assets: docs/docs-assets
navigation: docs-src/nav.html
pattern: GitHubPages
pattern: W3Enhanced
breadcrumbs: none
web: "overview" at "docs-src/index.inweb" in "docs"
pattern: GitHubPages
navigation: docs-src/navc.html
breadcrumbs: "Home: //overview//"
web: "compiler" at "docs-src/compiler.inweb" in "docs"
web: "services" at "docs-src/services.inweb" in "docs"
web: "inform6" at "docs-src/inform6.inweb" in "docs"
breadcrumbs: "Home: //overview//" > "Compiler Tools: //compiler//"
home: docs
@ -31,7 +34,7 @@ module: "building" at "inter/building-module" in "docs/building-module"
module: "pipeline" at "inter/pipeline-module" in "docs/pipeline-module"
module: "final" at "inter/final-module" in "docs/final-module"
module: "index" at "inter/index-module" in "docs/index-module"
breadcrumbs: "Home: //overview//" > "Services: //compiler//"
breadcrumbs: "Home: //overview//" > "Services: //services//"
module: "arch" at "services/arch-module" in "docs/arch-module"
module: "syntax" at "services/syntax-module" in "docs/syntax-module"
module: "words" at "services/words-module" in "docs/words-module"
@ -68,7 +71,7 @@ web: "inpolicy" at "inpolicy" in "docs/inpolicy"
navigation: docs-src/navu.html
breadcrumbs: "Home: //overview//"
web: "units" at "docs-src/units.inweb" in "docs"
breadcrumbs: "Home: //overview//" > "Unit Test Tools: //units//"
breadcrumbs: "Home: //overview//" > "Services: //services//"
web: "arch-test" at "services/arch-test" in "docs/arch-test"
web: "building-test" at "inter/building-test" in "docs/building-test"
web: "inflections-test" at "services/inflections-test" in "docs/inflections-test"

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.6 KiB

View file

@ -0,0 +1,3 @@
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" href="https://www.w3schools.com/lib/w3-theme-black.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css">

View file

@ -0,0 +1,6 @@
name: W3Enhanced based on GitHubPages
format: HTML
default range: sections
plugin: GitHub
plugin: W3
plugin: Breadcrumbs

View file

@ -0,0 +1,15 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>[[Booklet Title]]</title>
[[Plugins]]
</head>
<body class="commentary-font">
<nav role="navigation">
[[Navigation]]
</nav>
<main role="main">
[[Weave Content]]
</main>
</body>
</html>

View file

@ -0,0 +1,71 @@
<html>
<head>
<title>[[Title]]</title>
[[Plugins]]
</head>
<body class="commentary-font">
<nav role="navigation">
[[Navigation]]
</nav>
<main role="main">
<ul class="crumbs">[[Breadcrumbs]]<li><b>[[Title]]</b></li></ul>
<p class="purpose">[[Purpose]] This is version [[Version Number]].</p>
<hr>
<div class="contentspage">
[[If Chapters]]
<ul class="chapterlist">
[[Repeat Chapter]]
<li>
<p class="chapterentry"><a name="[[Chapter Code]]"></a>
<span class="chaptertitle">[[Chapter Title]]</span></p>
[[If Chapter Purpose]]
<p class="chapterpurpose">[[Chapter Purpose]]</p>
[[End If]]
<ul class="sectionlist">
[[Repeat Section]]
<li>
<p class="sectionentry"><a href="[[Section Page]]">
<spon class="sectiontitle">[[Section Title]]</span></a> -
<span class="sectionpurpose">[[Section Purpose]]</span></p>
</li>
[[End Repeat]]
</ul>
</li>
[[End Repeat]]
</ul>
[[Else]]
[[Repeat Chapter]]
<ul class="chapterlist">
[[Repeat Section]]
<li>
<p class="chapterentry"><a href="[[Section Page]]">
<spon class="sectiontitle">[[Section Title]]</span></a> -
<span class="sectionpurpose">[[Section Purpose]]</span></p>
</li>
[[End Repeat]]
</ul>
[[End Repeat]]
[[End If]]
[[If Modules]]
<hr>
<p class="purpose">This program also incorporates the following web(s) as module(s):</p>
<ul class="chapterlist">
[[Repeat Module]]
<li>
<p class="moduleentry">
[[If Module Page]]
<a href="[[Module Page]]"><spon class="sectiontitle">[[Module Title]]</span></a>
[[Else]]
<spon class="sectiontitle">[[Module Title]]</span>
[[End If]]
- <span class="sectionpurpose">[[Module Purpose]]</span></p>
</li>
[[End Repeat]]
</ul>
[[End If]]
</div>
<hr>
<p class="purpose">Powered by <a href="https://github.com/ganelson/inweb">Inweb</a>.</p>
</main>
</body>
</html>

BIN
docs-src/assets/ext.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
docs-src/assets/ifext.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
docs-src/assets/ifkit.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
docs-src/assets/inblorb.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

BIN
docs-src/assets/inbuild.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
docs-src/assets/indoc.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
docs-src/assets/inform6.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

BIN
docs-src/assets/inform7.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
docs-src/assets/inrtps.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
docs-src/assets/inter.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
docs-src/assets/intest.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
docs-src/assets/inweb.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
docs-src/assets/kit.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
docs-src/assets/web.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -1,33 +1,57 @@
Title: The Inform 7 compiler
Title: Structure of the Inform 7 compiler
Author: Graham Nelson
@ The task of Inform to take natural-language source text, merged from the
author's main source and some "extensions"; to compile that to an intermediate
format called Inter; merge once again with pre-compiled libraries of Inter
called "kits"; and then translate the result to a program which a
more orthodox compiler can take the rest of the way. Because Inform 7 generates
code for another compiler, rather than directly making an executable itself,
it is properly speaking a "transpiler".
@ The core Inform compiler, the tool called //inform7//, combines natural-language
source text, including natural-language extensions, with kits of so-called Inter
code to make the instructions for making a playable story. Further tools are
needed to turn such instructions into that story -- perhaps as
For two decades that second compiler was always the roughly C-like Inform 6, a
sturdy 1990s tool for generating interactive fiction "story files" which, after
processing with the //inblorb// tool, can then be played in a web browser or
with an "interpreter". In 2021, limited support was added for transpiling a
general, non-IF-specific form of the language called Basic Inform to ANSI C.
This can be compiled into more general executable programs using Clang, gcc,
or other standard C compilers.
(*) a page in a web browser, where the story runs as JavaScript, using //inform6//
and then //inblorb//, other tools in the Inform toolchain;
(*) a "story file" which an app called an "interpreter" plays through, using
//inform6// alone; or
(*) an executable program which can be run on the command line, using a standard
C compiler such as |clang| or |gcc|.
@ The compiler runs in Stages, numbered 1 to 7, and each contains many sub-tasks.
But like most compilers, it can be summarised as turning its input first into
an AST or "abstract syntax tree"[1] and then into an "intermediate representation",
which in our case is called Inter. Kits have been compiled in advance by a different
flow path, directly into Inter. A weak form[2] of linker inside the Inform compiler
loads and combines those pre-compiled Inter files with the main body, and so
completes an intermediate representation for the story. This can then be optimised and
turned into various choices of output.
Inform 7 presents as three command-line tools, not one: //inbuild//, //inform7//
and //inter//. Really, though, they are three points of access to the same code
base. //inbuild// contains Stage 1 as a stand-alone tool, //inter// contains Stages
5 to 7 as a stand-alone tool, and //inform7// is the entire compiler (Stages 1 to 7)
in one. Each tool has its own CLI (or "command-line interface"): see
//inbuild: Manual//, //inform7: Manual//, //inter: Manual// and
//inbuild: Reference Card//, //inform7: Reference Card//, //inter: Reference Card//.
[1] Though in this source we usually call it an "annotated syntax tree" or simply
"syntax tree" to avoid the issue of whether it is concrete or abstract.
[2] Weak in that the //inter// tool can link any number of kits to a source text,
but not a source text to a source text.
@ The flow of data looks like so, with time running downwards on the page. Dotted
arrows are where work is done by tools other than //inform7//:
= (hyperlinked text as BoxArt)
main source text extension source texts
\ /
\ / INFORM7 Stage 1 or INBUILD
\ /
\|/ \|/
syntax tree
kit sources |
(in Inform 6 code) | INFORM7 Stages 2 to 5
INTER | |
\|/ \|/
precompiled Inter trees Inter tree
kit sources main source text extension source texts
(in Inform 6 code) \ /
| \ / INFORM7 Stage 1 or INBUILD
| INTER \ /
\|/ \|/ \|/
precompiled syntax tree
Inter trees |
. | INFORM7 Stages 2 to 5
. |
. . . . . . . precompiled \|/
Inter trees Inter tree
\ /
\ / INFORM7 Stage 6 or INTER
\|/ \|/
@ -36,19 +60,19 @@ or other standard C compilers.
/ | \ INFORM7 Stage 7 or INTER
\|/ \|/ \|/
Inform 6 code C code index mini-website
| |
INFORM6 | | CLANG or GCC
\|/ \|/
: :
INFORM6 : : CLANG or GCC
\:/ \:/
story file executable
|
INBLORB |
\|/
:
INBLORB :
\:/
playable website
=
@ The Inform 7 transpiler, then, occupies the top two-thirds of the above diagram.
Broadly speaking, it runs in seven stages, and the code for each stage is made
up of one or more "modules", as follows:
@ The source code is divided up into "modules", each of which is a literate
program or web in its own right. Most modules are used mostly in particular
stages of the compilation, which are as follows:
(*) Stage 1. A build manager called //supervisor// gathers what must be compiled.
(*) Stage 2. //core// organises compilation of a single Inform project,
doing little except to co-ordinate the other modules.
@ -65,15 +89,8 @@ more of a layer than a stage, providing services to Stages 4, 6 and 7.
(*) Stage 7. //final// generates final code and //index// generates human-readable
Index pages, which forn a small website about the project.
Inform 7 presents as three command-line tools, not one: //inbuild//, //inform7//
and //inter//. Really, though, they are three points of access to the same code
base. //inbuild// contains Stage 1 as a stand-alone tool, //inter// contains Stages
5 to 7 as a stand-alone tool, and //inform7// is the entire compiler (Stages 1 to 7)
in one. Each tool has its own CLI (or "command-line interface"): see
//inbuild: Manual//, //inform7: Manual//, //inter: Manual// and
//inbuild: Reference Card//, //inform7: Reference Card//, //inter: Reference Card//.
The full breakdown of these three tools into modules is as follows:
The full breakdown of the three tools //inbuild//, //inform7// and //inter//
into modules is as follows:
= (hyperlinked text as BoxArt)
INBUILD INFORM7 INTER
+-------------+ +-------------+ +-------------+
@ -123,17 +140,6 @@ The full breakdown of these three tools into modules is as follows:
| (standard C library) |
+-----------------------------------------------------------------------+
=
Note that all three tools use a "services" library, made up of a variety of modules
providing services useful for natural language-based programs. At one time this
was going to be called "Second Foundation" or possibly "Foundation and Empire",
because there is also //foundation// underneath, a library of utility functions
provided by //inweb//.
@ That's a lot: for code-spelunkers, this is quite the limestone hillside of
potential points of entry. Where to begin? Here are some suggested entrances:
(a) See //supervisor: What This Module Does// for an overview of the
build-management process.
(b) Or take that on trust, and see //core: What This Module Does// for
an overview of how Inform 7 basically works.
(c) If you're more interested in the low-level representation of Inter code,
and how to generate from it, see //bytecode: What This Module Does//.
Note that all three tools use a //services// library, made up of a variety of modules
providing services useful for natural language-based programs, and also the
//foundation// library of utility functions provided by //inweb//.

122
docs-src/html/panels.html Normal file
View file

@ -0,0 +1,122 @@
<div class="w3-row-padding w3-padding-16 w3-center" id="food">
<div class="w3-quarter">
<a href="compiler.html"><img src="docs-assets/inbuild.jpg" alt="Inbuild" style="width:100%"></a>
<h3><a href="compiler.html">inbuild</a></h3>
<p>A stand-alone build manager which is also Stage I of the Inform compiler.</p>
</div>
<div class="w3-quarter">
<a href="compiler.html"><img src="docs-assets/inform7.jpg" alt="Inform 7" style="width:100%"></a>
<h3><a href="compiler.html">inform7</a></h3>
<p>The core Inform compiler.</p>
</div>
<div class="w3-quarter">
<a href="compiler.html"><img src="docs-assets/inter.jpg" alt="Inter" style="width:100%"></a>
<h3><a href="compiler.html">inter</a></h3>
<p>A stand-alone tool for intermediate-level code, which is
also Stages VI and VII of the Inform compiler.</p>
</div>
<div class="w3-quarter">
<a href="services.html"><img src="docs-assets/services.jpg" alt="Services" style="width:100%"></a>
<h3><a href="services.html">services</a></h3>
<p>Support for predicate calculus, linguistics, abstract syntax trees and
other facilities needed by the compiler tools.</p>
</div>
</div>
<div class="w3-row-padding w3-padding-16 w3-center">
<div class="w3-quarter">
<img src="docs-assets/inblorb.jpg" alt="Inblorb" style="width:100%">
<h3>inblorb</h3>
<p>A packaging tool for wrapping interactive fiction story files,
included with the Inform apps but not as a part of the inform7 executable.</p>
</div>
<div class="w3-quarter">
<a href="compiler.html"><img src="docs-assets/inform6.jpg" alt="Inform 6" style="width:100%"></a>
<h3><a href="compiler.html">inform6</a></h3>
<p>A compiler for a low-level programming language,
included with the Inform apps but not as a part of the inform7 executable.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/ext.jpg" alt="Basic Inform" style="width:100%">
<h3>Basic Inform</h3>
<p>The Inform 7 extension read automatically into every project,
defining much of the language.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/ifext.jpg" alt="Standard Rules" style="width:100%">
<h3>Standard Rules</h3>
<p>The Inform 7 extension read automatically into every interactive
fiction project, defining much of the world model.</p>
</div>
</div>
<div class="w3-row-padding w3-padding-16 w3-center">
<div class="w3-quarter">
<img src="docs-assets/kit.jpg" alt="BasicInformKit" style="width:100%">
<h3>BasicInformKit</h3>
<p>A kit of Inter code providing runtime support for all programs written
with Inform. Included with the apps in precompiled form.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/kit.jpg" alt="BasicInformExtrasKit" style="width:100%">
<h3>BasicInformExtrasKit</h3>
<p>A kit of Inter code providing runtime support for all programs not using
WorldModelKit. Included with the apps in precompiled form.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/ifkit.jpg" alt="WorldModelKit" style="width:100%">
<h3>WorldModelKit</h3>
<p>A kit of Inter code providing runtime support for interactive fiction
projects with a simulated world. Included with the apps in precompiled form.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/ifkit.jpg" alt="CommandParserKit" style="width:100%">
<h3>CommandParserKit</h3>
<p>A kit of Inter code providing runtime support for interactive fiction
projects with a command parser interface. Included with the apps in precompiled form.</p>
</div>
</div>
<div class="w3-row-padding w3-padding-16 w3-center">
<div class="w3-quarter">
<img src="docs-assets/indoc.jpg" alt="Indoc" style="width:100%">
<h3>indoc</h3>
<p>A tool for typesetting the two books about Inform, and their hundreds
of examples, so that these are readable in the apps. Needed by Inform
(and Inform website) maintainers, but not end users.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/inpolicy.jpg" alt="Inpolicy" style="width:100%">
<h3>inpolicy</h3>
<p>A small tool for checking that the Inform source base complies
with some self-imposed social norms. Needed by Inform maintainers, but not end users.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/inrtps.jpg" alt="Inrtps" style="width:100%">
<h3>inrtps</h3>
<p>A small tool for formatting the run-time problem displays included
with the Inform apps. Needed by Inform maintainers, but not end users.</p>
</div>
</div>
<div class="w3-row-padding w3-padding-16 w3-center">
<div class="w3-quarter">
<img src="docs-assets/inweb.jpg" alt="Inweb" style="width:100%">
<h3>inweb</h3>
<p>A literate-programming tool needed to build the other Inform tools.
Needed by Inform maintainers, but not end users.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/intest.jpg" alt="Intest" style="width:100%">
<h3>intest</h3>
<p>A tool for running complex suites of end-to-end tests to verify the
correctness of other tools. Needed by Inform maintainers, but not end users.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/services.jpg" alt="Foundation" style="width:100%">
<h3>foundation</h3>
<p>A module of basic computing services used across all of the Inform
tool-chain: file-handling, generating HTML, semantic version-numbering,
string-handling, memory management.</p>
</div>
</div>

View file

@ -1,33 +1,26 @@
Title: Overview
Title: Inform: The Program
Author: Graham Nelson
Paragraph Numbers Visibility: Off
@ This is the home page for the source code for the Inform 7 programming
language. For the language itself, its documentation, and downloads of the
apps for different platforms, see: http://www.inform7.com
@ Inform is a programming language used for interactive fiction and other creative
purposes. Most users engage with it as an app on their devices: there are apps
for MacOS, Windows, Linux and Android, but in the centre of each is the same
core compiler and software.
Almost everything here is a "web", or "literate program", powered by //inweb//.
Those new to literate programming may want first to try the modest examples
there (say, //goldbach//), and skim the //inweb// manual.
(*) For user documentation, and downloads of the apps, go to the Inform home page
at: http://www.inform7.com
These pages host "woven", human-readable, forms of the source and are intended
for browsing. To obtain and build the software, or to see resources which
are not webs and thus not here, see: https://github.com/ganelson/inform
(*) To download the source for the core compiler, build it, and run it at the command
line rather than through the apps, go to the main GitHub repository
at: https://github.com/ganelson/inform
@ The Inform 7 compiler comes with a large penumbra of supporting resources,
so there are around 50 webs in this repository:
(a) The compiler is built from around 20 modules, plus three front-end command
line tools controlling them. See //compiler// for a map.
(b) See //other// for command-line tools useful for building or working with
Inform, but not involving compilation: //inblorb//, a packager; //indoc//, to
format documentation; //inpolicy//, a lint-like tool for checking Inform's
source code; and //inrtps//, to format run-time problem messages.
(c) The extensions "Basic Inform" (//basic_inform//) and "Standard Rules"
(//standard_rules//), together with a number of "kits" of precompiled Inter
code: see //extensions//.
(d) Small unit-test tools to exercise the modules mentioned in (a): see //units//.
(*) Inform is a set of "literate programs", written as "webs" of
source code designed to be read by humans (in "woven" form), as well as
executed by computers (in "tangled" form). For more on literate programming,
go to the tool used by the Inform project: //inweb//
@ Three webs are conspicuously missing, but only because they are on similar
mini-websites on other Github repositories:
(a) //inweb// itself, and its function library, //foundation//, which all of
the Inform tools use;
(b) the testing utility //intest//, which has a repository of its own.
@ Inform is not a single program. There are around 50 webs in all, together
with some images, PDF files, sets of test cases, documentation, and so on.
This page is intended as a jumping-off point to navigate these.
= (html panels.html)

41
docs-src/inform6.inweb Executable file
View file

@ -0,0 +1,41 @@
Title: A note about Inform 6
Author: Graham Nelson
@ The Inform system of today sometimes uses the Inform system of yesteryear,
|inform6|, as a final stage of compilation, a stage largely invisible to end
users of the Inform apps. See //compiler// for a diagram of how the tools
are combined in use.
Inform 6 is a C-like language designed to be compiled to the specialist Z-machine
or Glulx virtual machines, which in turn were designed for interactive fiction.
The Inform 7 repository at Github contains a copy of the most recent stable
release of the Inform 6 compiler, but this is only a copy.
The Inform 6 compiler repository is here:
(*) https://github.com/DavidKinder/Inform6
Note that this is a straight-up C program, and not a literate program needing
//inweb// to compile.
@ The I7 repository does not contain the Inform 6 "Designer's Manual 4th Edition",
the "DM4", or the Inform 6 Technical Manual, for which see:
(*) https://www.inform-fiction.org/manual/html/contents.html
(*) https://www.inform-fiction.org/source/tm/index.html
The I7 repository also does not contain the Inform 6 library, which is not used
by Inform 7: but see --
(*) https://gitlab.com/DavidGriffith/inform6lib
@ However, the I7 repository does contain a version of Andrew Plotkin's test suite
for the I6 compiler:
(*) https://github.com/erkyrath/Inform6-Testing
ported to use //intest// rather than the Python script originally supplied. So
if you've already built the Inform 7 tool chain, and are already using intest
to test //inform7// and the others, then you can run this suite against the
included copy of the I6 compiler as well.

View file

@ -1,10 +1,11 @@
<h1>[[Link "overview"]]
<img src="[[Docs]]docs-assets/Inform.png" height=72">
</a></h1>
[[Item "compiler tools" -> //compiler//]]
[[Item "home" -> //overview//]]
[[Item "structure" -> //compiler//]]
[[Item "services" -> //services//]]
[[Item "other tools" -> //other//]]
[[Item "extensions and kits" -> //extensions//]]
[[Item "unit test tools" -> //units//]]
[[Menu "Repository"]]
[[Item "<github.png> github" -> https://github.com/ganelson/inform]]
[[Menu "Related Projects"]]

170
docs-src/services.inweb Executable file
View file

@ -0,0 +1,170 @@
Title: Services and their unit tests
Author: Graham Nelson
@ The programs in the Inform toolchain need a variety of services beyond those
provided by our standard library //foundation//. The latter offers basics such
as memory allocation, linked lists, string manipulation and so on, but the
Inform tools need much more than that.
The services layer of Inform[1] is structured as a set of modules. They can be
(and are) used by other tools besides the main //inform7// compiler, and in
particular most of the services come with unit-testing tools: small stand-alone
executables which enable the workings of the service in question to be tested
in isolation from the rest of the Inform toolchain.
To some extent a tool can include just those modules it needs, but there are
dependencies between them: for example, //linguistics// requires //syntax//,
which in turn requires //words//. Each service has a section of documentation
called "How To Include This Module", explaining its needs.
[1] At one time this was going to be called Second Foundation, or perhaps
Foundation and Empire.
@ The //words// module provides for natural-language text to be read in,
and then broken up into words and punctuation marks. Usefully efficient ways
to refer to fragments of this text, such as |wording| and |word_assemblage|,
are also provided. Much of this is simple book-keeping, but the words module
also provides the "Preform" system for parsing text against simple grammars.
Preform powers the lexical/syntax analysis phases of Inform.
(*) Contents page of web: //words//.
(*) Detailed overview: //words: What This Module Does//.
(*) Usage instructions: //words: How To Include This Module//.
(*) Unit test tool here: //words-test//.
(*) A manual for writing Preform grammars: //words: About Preform//.
@ The //lexicon// module provides a way to store and look up meanings of
multi-word phrases such as "brass plaque" or "red silk jacket". This is the
equivalent, in a natural-language context, of a symbols table in a more
conventional compiler. Speed is critical and some novel algorithms are used.
(*) Contents page of web: //lexicon//.
(*) Detailed overview: //lexicon: What This Module Does//.
(*) Usage instructions: //lexicon: How To Include This Module//.
@ The //calculus// module allows logical propositions to be stored and
simplified. The word "calculus" is used here in the sense of predicate
calculus with equality, a standard system for mathematical logic, and is
nothing to do with derivatives or integrals.
(*) Contents page of web: //calculus//.
(*) Detailed overview: //calculus: What This Module Does//.
(*) Usage instructions: //calculus: How To Include This Module//.
(*) Unit test tool here: //calculus-test//.
@ //syntax// is a relatively small module, which manages annotated syntax trees.
It provides only basic facilities for making and annotating ASTs, but also
contains the sentence-breaking algorithm, turning a stream of words into a
rudimentary AST.
This is really part one of a two-part story, the second being //linguistics//.
Together these define the AST for the Inform 7 language.
(*) Contents page of web: //syntax//.
(*) Detailed overview: //syntax: What This Module Does//.
(*) Usage instructions: //syntax: How To Include This Module//.
(*) Unit test tool here: //syntax-test//.
@ The //linguistics// module manages grammatical categories such as verbs,
adjectives, determiners and so on, and uses the annotated syntax trees of
the //syntax// module to diagram sentences.
This is really part two of a two-part story, the first being //syntax//.
Together these define the AST for the Inform 7 language.
(*) Contents page of web: //linguistics//.
(*) Detailed overview: //linguistics: What This Module Does//.
(*) Usage instructions: //linguistics: How To Include This Module//.
(*) Unit test tool here: //linguistics-test//.
(*) A description of the result: //linguistics: About Sentence Diagrams//.
@ The //inflections// module provides ways to recognise or generate inflected
forms of words: for example, "fig" becoming "figs", "ox" becoming "oxen",
"box" becoming "boxes", and "sheep" becoming "sheep" are all inflections to
make the plural of an English noun.[1] And similarly for inflected verb forms
such as "starting", "starts" and "start"; or adjectival inflections such as
those used to generate comparatives and superlatives -- "large" to "larger"
or "largest".
(*) Contents page of web: //inflections//.
(*) Detailed overview: //inflections: What This Module Does//.
(*) Usage instructions: //inflections: How To Include This Module//.
(*) Unit test tool here: //inflections-test//.
[1] A full implementation of Conway's pluralisation algorithm can be found in
this module, and is one of Inform's more picturesque corners.
@ The //kinds// module provides a basic type system for an Inform-like language.[1]
Note that this does not contain the Inform typechecker, which can be found in
the main compiler (at //values: Dash//); but it does contain code to test
whether or not values of one kind conform to another kind, which is a key part
of the typechecking process.
(*) Contents page of web: //kinds//.
(*) Detailed overview: //kinds: What This Module Does//.
(*) Usage instructions: //kinds: How To Include This Module//.
(*) Unit test tool here: //kinds-test//.
(*) A manual for "Neptune", the mini-language used by kits to create fundamental
kinds and kind constructors: //kinds: A Brief Guide to Neptune//.
[1] Following traditional Inform practice, the term "kind" is used instead of the
more conventional computer-science word "type".
@ The //arch// module is a way to represent the possible code-generation
"architectures" supported in the Inform toolchain. For example, "32-bit words
with debugging enabled" is an architecture.
(*) Contents page of web: //arch//.
(*) Detailed overview: //arch: What This Module Does//.
(*) Usage instructions: //arch: How To Include This Module//.
(*) Unit test tool here: //arch-test//.
@ The //problems// module is a simple system for producing HTML-page-style
error messages, such as the Problems issued by the Inform compiler.[1]
(*) Contents page of web: //problems//.
(*) Detailed overview: //problems: What This Module Does//.
(*) Usage instructions: //problems: How To Include This Module//.
(*) Unit test tool here: //problems-test//.
[1] Arguably it's not really of any wider application and shouldn't have been
made a module at all, but never mind.
@ The //html// module contains tools for generating non-standard features of HTML
needed by the files made by Inform, such as clickable links to the source text.
(*) Contents page of web: //html//.
(*) Detailed overview: //html: What This Module Does//. This section includes a
description of the custom Inform-app-only URL schemas |inform:| and |source:|.
(*) Usage instructions: //html: How To Include This Module//.

View file

@ -1,7 +1,7 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>The Inform 7 compiler</title>
<title>Structure of the Inform 7 compiler</title>
<link href="docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@ -12,6 +12,11 @@
<link href="docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script src="http://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="docs-assets/Bigfoot.js"></script>
<link href="docs-assets/Bigfoot.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
@ -60,39 +65,62 @@
</ul>
</nav>
<main role="main">
<!--Weave of 'The Inform 7 compiler' generated by Inweb-->
<!--Weave of 'Structure of the Inform 7 compiler' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="index.html">Home</a></li><li><b>The Inform 7 compiler</b></li></ul></div>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>The task of Inform to take natural-language source text, merged from the
author's main source and some "extensions"; to compile that to an intermediate
format called Inter; merge once again with pre-compiled libraries of Inter
called "kits"; and then translate the result to a program which a
more orthodox compiler can take the rest of the way. Because Inform 7 generates
code for another compiler, rather than directly making an executable itself,
it is properly speaking a "transpiler".
<ul class="crumbs"><li><a href="index.html">Home</a></li><li><b>Structure of the Inform 7 compiler</b></li></ul></div>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>The core Inform compiler, the tool called <a href="inform7/index.html" class="internal">inform7</a>, combines natural-language
source text, including natural-language extensions, with kits of so-called Inter
code to make the instructions for making a playable story. Further tools are
needed to turn such instructions into that story &mdash; perhaps as
</p>
<p class="commentary">For two decades that second compiler was always the roughly C-like Inform 6, a
sturdy 1990s tool for generating interactive fiction "story files" which, after
processing with the <a href="inblorb/index.html" class="internal">inblorb</a> tool, can then be played in a web browser or
with an "interpreter". In 2021, limited support was added for transpiling a
general, non-IF-specific form of the language called Basic Inform to ANSI C.
This can be compiled into more general executable programs using Clang, gcc,
or other standard C compilers.
<ul class="items"><li>&#9679; a page in a web browser, where the story runs as JavaScript, using <a href="inform6.html" class="internal">inform6</a>
and then <a href="inblorb/index.html" class="internal">inblorb</a>, other tools in the Inform toolchain;
</li><li>&#9679; a "story file" which an app called an "interpreter" plays through, using
<a href="inform6.html" class="internal">inform6</a> alone; or
</li><li>&#9679; an executable program which can be run on the command line, using a standard
C compiler such as <span class="extract"><span class="extract-syntax">clang</span></span> or <span class="extract"><span class="extract-syntax">gcc</span></span>.
</li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The compiler runs in Stages, numbered 1 to 7, and each contains many sub-tasks.
But like most compilers, it can be summarised as turning its input first into
an AST or "abstract syntax tree"<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> and then into an "intermediate representation",
which in our case is called Inter. Kits have been compiled in advance by a different
flow path, directly into Inter. A weak form<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> of linker inside the Inform compiler
loads and combines those pre-compiled Inter files with the main body, and so
completes an intermediate representation for the story. This can then be optimised and
turned into various choices of output.
</p>
<p class="commentary">Inform 7 presents as three command-line tools, not one: <a href="inbuild/index.html" class="internal">inbuild</a>, <a href="inform7/index.html" class="internal">inform7</a>
and <a href="inter/index.html" class="internal">inter</a>. Really, though, they are three points of access to the same code
base. <a href="inbuild/index.html" class="internal">inbuild</a> contains Stage 1 as a stand-alone tool, <a href="inter/index.html" class="internal">inter</a> contains Stages
5 to 7 as a stand-alone tool, and <a href="inform7/index.html" class="internal">inform7</a> is the entire compiler (Stages 1 to 7)
in one. Each tool has its own CLI (or "command-line interface"): see
<a href="inbuild/M-ui.html" class="internal">Manual (in inbuild)</a>, <a href="inform7/M-cu.html" class="internal">Manual (in inform7)</a>, <a href="inter/M-ui.html" class="internal">Manual (in inter)</a> and
<a href="inbuild/M-rc.html" class="internal">Reference Card (in inbuild)</a>, <a href="inform7/M-rc.html" class="internal">Reference Card (in inform7)</a>, <a href="inter/M-rc.html" class="internal">Reference Card (in inter)</a>.
</p>
<ul class="footnotetexts"><li class="footnote" id="fn:1"><p class="inwebfootnote"><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> Though in this source we usually call it an "annotated syntax tree" or simply
"syntax tree" to avoid the issue of whether it is concrete or abstract.
<a href="#fnref:1" title="return to text"> &#x21A9;</a></p></li><li class="footnote" id="fn:2"><p class="inwebfootnote"><sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> Weak in that the <a href="inter/index.html" class="internal">inter</a> tool can link any number of kits to a source text,
but not a source text to a source text.
<a href="#fnref:2" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The flow of data looks like so, with time running downwards on the page. Dotted
arrows are where work is done by tools other than <a href="inform7/index.html" class="internal">inform7</a>:
</p>
<pre class="displayed-code all-displayed-code code-font">
<span class="plain-syntax"> </span><span class="element-syntax">main</span><span class="plain-syntax"> </span><span class="element-syntax">source</span><span class="plain-syntax"> </span><span class="element-syntax">text</span><span class="plain-syntax"> </span><span class="element-syntax">extension</span><span class="plain-syntax"> </span><span class="element-syntax">source</span><span class="plain-syntax"> </span><span class="element-syntax">texts</span>
<span class="plain-syntax"> \ /</span>
<span class="plain-syntax"> \ / </span><span class="function-syntax">INFORM7</span><span class="plain-syntax"> </span><span class="element-syntax">Stage</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="element-syntax">or</span><span class="plain-syntax"> </span><span class="function-syntax">INBUILD</span>
<span class="plain-syntax"> \ /</span>
<span class="plain-syntax"> \|/ \|/</span>
<span class="plain-syntax"> </span><span class="element-syntax">syntax</span><span class="plain-syntax"> </span><span class="element-syntax">tree</span>
<span class="plain-syntax"> </span><span class="element-syntax">kit</span><span class="plain-syntax"> </span><span class="element-syntax">sources</span><span class="plain-syntax"> |</span>
<span class="plain-syntax"> (</span><span class="element-syntax">in</span><span class="plain-syntax"> </span><span class="element-syntax">Inform</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="element-syntax">code</span><span class="plain-syntax">) | </span><span class="function-syntax">INFORM7</span><span class="plain-syntax"> </span><span class="element-syntax">Stages</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="element-syntax">to</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span>
<span class="plain-syntax"> </span><span class="function-syntax">INTER</span><span class="plain-syntax"> | |</span>
<span class="plain-syntax"> \|/ \|/</span>
<span class="plain-syntax"> </span><span class="element-syntax">precompiled</span><span class="plain-syntax"> </span><span class="element-syntax">Inter</span><span class="plain-syntax"> </span><span class="element-syntax">trees</span><span class="plain-syntax"> </span><span class="element-syntax">Inter</span><span class="plain-syntax"> </span><span class="element-syntax">tree</span>
<span class="plain-syntax"> </span><span class="element-syntax">kit</span><span class="plain-syntax"> </span><span class="element-syntax">sources</span><span class="plain-syntax"> </span><span class="element-syntax">main</span><span class="plain-syntax"> </span><span class="element-syntax">source</span><span class="plain-syntax"> </span><span class="element-syntax">text</span><span class="plain-syntax"> </span><span class="element-syntax">extension</span><span class="plain-syntax"> </span><span class="element-syntax">source</span><span class="plain-syntax"> </span><span class="element-syntax">texts</span>
<span class="plain-syntax"> (</span><span class="element-syntax">in</span><span class="plain-syntax"> </span><span class="element-syntax">Inform</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="element-syntax">code</span><span class="plain-syntax">) \ /</span>
<span class="plain-syntax"> | \ / </span><span class="function-syntax">INFORM7</span><span class="plain-syntax"> </span><span class="element-syntax">Stage</span><span class="plain-syntax"> </span><span class="constant-syntax">1</span><span class="plain-syntax"> </span><span class="element-syntax">or</span><span class="plain-syntax"> </span><span class="function-syntax">INBUILD</span>
<span class="plain-syntax"> | </span><span class="function-syntax">INTER</span><span class="plain-syntax"> \ /</span>
<span class="plain-syntax"> \|/ \|/ \|/</span>
<span class="plain-syntax"> </span><span class="element-syntax">precompiled</span><span class="plain-syntax"> </span><span class="element-syntax">syntax</span><span class="plain-syntax"> </span><span class="element-syntax">tree</span>
<span class="plain-syntax"> </span><span class="element-syntax">Inter</span><span class="plain-syntax"> </span><span class="element-syntax">trees</span><span class="plain-syntax"> |</span>
<span class="plain-syntax"> . | </span><span class="function-syntax">INFORM7</span><span class="plain-syntax"> </span><span class="element-syntax">Stages</span><span class="plain-syntax"> </span><span class="constant-syntax">2</span><span class="plain-syntax"> </span><span class="element-syntax">to</span><span class="plain-syntax"> </span><span class="constant-syntax">5</span>
<span class="plain-syntax"> . |</span>
<span class="plain-syntax"> . . . . . . . </span><span class="element-syntax">precompiled</span><span class="plain-syntax"> \|/</span>
<span class="plain-syntax"> </span><span class="element-syntax">Inter</span><span class="plain-syntax"> </span><span class="element-syntax">trees</span><span class="plain-syntax"> </span><span class="element-syntax">Inter</span><span class="plain-syntax"> </span><span class="element-syntax">tree</span>
<span class="plain-syntax"> \ /</span>
<span class="plain-syntax"> \ / </span><span class="function-syntax">INFORM7</span><span class="plain-syntax"> </span><span class="element-syntax">Stage</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="element-syntax">or</span><span class="plain-syntax"> </span><span class="function-syntax">INTER</span>
<span class="plain-syntax"> \|/ \|/</span>
@ -101,18 +129,18 @@ or other standard C compilers.
<span class="plain-syntax"> / | \ </span><span class="function-syntax">INFORM7</span><span class="plain-syntax"> </span><span class="element-syntax">Stage</span><span class="plain-syntax"> </span><span class="constant-syntax">7</span><span class="plain-syntax"> </span><span class="element-syntax">or</span><span class="plain-syntax"> </span><span class="function-syntax">INTER</span>
<span class="plain-syntax"> \|/ \|/ \|/</span>
<span class="plain-syntax"> </span><span class="element-syntax">Inform</span><span class="plain-syntax"> </span><span class="constant-syntax">6</span><span class="plain-syntax"> </span><span class="element-syntax">code</span><span class="plain-syntax"> </span><span class="element-syntax">C</span><span class="plain-syntax"> </span><span class="element-syntax">code</span><span class="plain-syntax"> </span><span class="element-syntax">index</span><span class="plain-syntax"> </span><span class="element-syntax">mini</span><span class="plain-syntax">-</span><span class="element-syntax">website</span>
<span class="plain-syntax"> | |</span>
<span class="plain-syntax"> </span><span class="function-syntax">INFORM6</span><span class="plain-syntax"> | | </span><span class="function-syntax">CLANG</span><span class="plain-syntax"> </span><span class="element-syntax">or</span><span class="plain-syntax"> </span><span class="function-syntax">GCC</span>
<span class="plain-syntax"> \|/ \|/</span>
<span class="plain-syntax"> : :</span>
<span class="plain-syntax"> </span><span class="function-syntax">INFORM6</span><span class="plain-syntax"> : : </span><span class="function-syntax">CLANG</span><span class="plain-syntax"> </span><span class="element-syntax">or</span><span class="plain-syntax"> </span><span class="function-syntax">GCC</span>
<span class="plain-syntax"> \:/ \:/</span>
<span class="plain-syntax"> </span><span class="element-syntax">story</span><span class="plain-syntax"> </span><span class="element-syntax">file</span><span class="plain-syntax"> </span><span class="element-syntax">executable</span>
<span class="plain-syntax"> |</span>
<span class="plain-syntax"> </span><span class="function-syntax">INBLORB</span><span class="plain-syntax"> |</span>
<span class="plain-syntax"> \|/</span>
<span class="plain-syntax"> :</span>
<span class="plain-syntax"> </span><span class="function-syntax">INBLORB</span><span class="plain-syntax"> :</span>
<span class="plain-syntax"> \:/</span>
<span class="plain-syntax"> </span><span class="element-syntax">playable</span><span class="plain-syntax"> </span><span class="element-syntax">website</span>
</pre>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The Inform 7 transpiler, then, occupies the top two-thirds of the above diagram.
Broadly speaking, it runs in seven stages, and the code for each stage is made
up of one or more "modules", as follows:
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The source code is divided up into "modules", each of which is a literate
program or web in its own right. Most modules are used mostly in particular
stages of the compilation, which are as follows:
</p>
<ul class="items"><li>&#9679; Stage 1. A build manager called <a href="supervisor-module/index.html" class="internal">supervisor</a> gathers what must be compiled.
@ -131,16 +159,8 @@ more of a layer than a stage, providing services to Stages 4, 6 and 7.
</li><li>&#9679; Stage 7. <a href="final-module/index.html" class="internal">final</a> generates final code and <a href="index-module/index.html" class="internal">index</a> generates human-readable
Index pages, which forn a small website about the project.
</li></ul>
<p class="commentary">Inform 7 presents as three command-line tools, not one: <a href="inbuild/index.html" class="internal">inbuild</a>, <a href="inform7/index.html" class="internal">inform7</a>
and <a href="inter/index.html" class="internal">inter</a>. Really, though, they are three points of access to the same code
base. <a href="inbuild/index.html" class="internal">inbuild</a> contains Stage 1 as a stand-alone tool, <a href="inter/index.html" class="internal">inter</a> contains Stages
5 to 7 as a stand-alone tool, and <a href="inform7/index.html" class="internal">inform7</a> is the entire compiler (Stages 1 to 7)
in one. Each tool has its own CLI (or "command-line interface"): see
<a href="inbuild/M-ui.html" class="internal">Manual (in inbuild)</a>, <a href="inform7/M-cu.html" class="internal">Manual (in inform7)</a>, <a href="inter/M-ui.html" class="internal">Manual (in inter)</a> and
<a href="inbuild/M-rc.html" class="internal">Reference Card (in inbuild)</a>, <a href="inform7/M-rc.html" class="internal">Reference Card (in inform7)</a>, <a href="inter/M-rc.html" class="internal">Reference Card (in inter)</a>.
</p>
<p class="commentary">The full breakdown of these three tools into modules is as follows:
<p class="commentary">The full breakdown of the three tools <a href="inbuild/index.html" class="internal">inbuild</a>, <a href="inform7/index.html" class="internal">inform7</a> and <a href="inter/index.html" class="internal">inter</a>
into modules is as follows:
</p>
<pre class="displayed-code all-displayed-code code-font">
@ -192,24 +212,11 @@ in one. Each tool has its own CLI (or "command-line interface"): see
<span class="plain-syntax">| (</span><span class="element-syntax">standard</span><span class="plain-syntax"> </span><span class="element-syntax">C</span><span class="plain-syntax"> </span><span class="element-syntax">library</span><span class="plain-syntax">) |</span>
<span class="plain-syntax">+-----------------------------------------------------------------------+</span>
</pre>
<p class="commentary">Note that all three tools use a "services" library, made up of a variety of modules
providing services useful for natural language-based programs. At one time this
was going to be called "Second Foundation" or possibly "Foundation and Empire",
because there is also <a href="../../inweb/docs/foundation-module/index.html" class="internal">foundation</a> underneath, a library of utility functions
provided by <a href="../../inweb/docs/index.html" class="internal">inweb</a>.
<p class="commentary">Note that all three tools use a <a href="services.html" class="internal">services</a> library, made up of a variety of modules
providing services useful for natural language-based programs, and also the
<a href="../../inweb/docs/foundation-module/index.html" class="internal">foundation</a> library of utility functions provided by <a href="../../inweb/docs/index.html" class="internal">inweb</a>.
</p>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>That's a lot: for code-spelunkers, this is quite the limestone hillside of
potential points of entry. Where to begin? Here are some suggested entrances:
</p>
<ul class="items"><li>(a) See <a href="supervisor-module/P-wtmd.html" class="internal">What This Module Does (in supervisor)</a> for an overview of the
build-management process.
</li><li>(b) Or take that on trust, and see <a href="core-module/P-wtmd.html" class="internal">What This Module Does (in core)</a> for
an overview of how Inform 7 basically works.
</li><li>(c) If you're more interested in the low-level representation of Inter code,
and how to generate from it, see <a href="bytecode-module/P-wtmd.html" class="internal">What This Module Does (in bytecode)</a>.
</li></ul>
<!--End of weave-->
</main>

View file

@ -1,5 +1,4 @@
nav[role="navigation"] {
width: 180px;
position: fixed;
overflow: scroll;
left: 0;

BIN
docs/docs-assets/ext.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

BIN
docs/docs-assets/ifext.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

BIN
docs/docs-assets/ifkit.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 33 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 149 KiB

BIN
docs/docs-assets/indoc.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 193 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

BIN
docs/docs-assets/inrtps.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

BIN
docs/docs-assets/inter.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 183 KiB

BIN
docs/docs-assets/intest.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
docs/docs-assets/inweb.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

BIN
docs/docs-assets/kit.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 93 KiB

BIN
docs/docs-assets/web.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 11 KiB

View file

@ -1,7 +1,11 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Overview</title>
<title>Inform: The Program</title>
<link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css">
<link rel="stylesheet" href="https://www.w3schools.com/lib/w3-theme-black.css">
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.3.0/css/font-awesome.min.css">
<link href="docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
@ -20,10 +24,11 @@
<h1><a href="index.html">
<img src="docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="compiler.html">compiler tools</a></li>
<ul><li><span class="unlink">home</span></li>
<li><a href="compiler.html">structure</a></li>
<li><a href="services.html">services</a></li>
<li><a href="other.html">other tools</a></li>
<li><a href="extensions.html">extensions and kits</a></li>
<li><a href="units.html">unit test tools</a></li>
</ul><h2>Repository</h2><ul>
<li><a href="https://github.com/ganelson/inform"><img src="docs-assets/github.png" height=18> github</a></li>
</ul><h2>Related Projects</h2><ul>
@ -33,47 +38,155 @@
</ul>
</nav>
<main role="main">
<!--Weave of 'Overview' generated by Inweb-->
<!--Weave of 'Inform: The Program' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><b>Overview</b></li></ul></div>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>This is the home page for the source code for the Inform 7 programming
language. For the language itself, its documentation, and downloads of the
apps for different platforms, see: <a href="http://www.inform7.com" class="external">http://www.inform7.com</a>
<ul class="crumbs"><li><b>Inform: The Program</b></li></ul></div>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a>Inform is a programming language used for interactive fiction and other creative
purposes. Most users engage with it as an app on their devices: there are apps
for MacOS, Windows, Linux and Android, but in the centre of each is the same
core compiler and software.
</p>
<p class="commentary">Almost everything here is a "web", or "literate program", powered by <a href="../../inweb/docs/index.html" class="internal">inweb</a>.
Those new to literate programming may want first to try the modest examples
there (say, <a href="../../inweb/docs/goldbach/index.html" class="internal">goldbach</a>), and skim the <a href="../../inweb/docs/index.html" class="internal">inweb</a> manual.
</p>
<p class="commentary">These pages host "woven", human-readable, forms of the source and are intended
for browsing. To obtain and build the software, or to see resources which
are not webs and thus not here, see: <a href="https://github.com/ganelson/inform" class="external">https://github.com/ganelson/inform</a>
</p>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The Inform 7 compiler comes with a large penumbra of supporting resources,
so there are around 50 webs in this repository:
</p>
<ul class="items"><li>(a) The compiler is built from around 20 modules, plus three front-end command
line tools controlling them. See <a href="compiler.html" class="internal">compiler</a> for a map.
</li><li>(b) See <a href="other.html" class="internal">other</a> for command-line tools useful for building or working with
Inform, but not involving compilation: <a href="inblorb/index.html" class="internal">inblorb</a>, a packager; <a href="indoc/index.html" class="internal">indoc</a>, to
format documentation; <a href="inpolicy/index.html" class="internal">inpolicy</a>, a lint-like tool for checking Inform's
source code; and <a href="inrtps/index.html" class="internal">inrtps</a>, to format run-time problem messages.
</li><li>(c) The extensions "Basic Inform" (<a href="basic_inform/index.html" class="internal">basic_inform</a>) and "Standard Rules"
(<a href="standard_rules/index.html" class="internal">standard_rules</a>), together with a number of "kits" of precompiled Inter
code: see <a href="extensions.html" class="internal">extensions</a>.
</li><li>(d) Small unit-test tools to exercise the modules mentioned in (a): see <a href="units.html" class="internal">units</a>.
<ul class="items"><li>&#9679; For user documentation, and downloads of the apps, go to the Inform home page
at: <a href="http://www.inform7.com" class="external">http://www.inform7.com</a>
</li><li>&#9679; To download the source for the core compiler, build it, and run it at the command
line rather than through the apps, go to the main GitHub repository
at: <a href="https://github.com/ganelson/inform" class="external">https://github.com/ganelson/inform</a>
</li><li>&#9679; Inform is a set of "literate programs", written as "webs" of
source code designed to be read by humans (in "woven" form), as well as
executed by computers (in "tangled" form). For more on literate programming,
go to the tool used by the Inform project: <a href="../../inweb/docs/index.html" class="internal">inweb</a>
</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>Three webs are conspicuously missing, but only because they are on similar
mini-websites on other Github repositories:
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a>Inform is not a single program. There are around 50 webs in all, together
with some images, PDF files, sets of test cases, documentation, and so on.
This page is intended as a jumping-off point to navigate these.
</p>
<ul class="items"><li>(a) <a href="../../inweb/docs/index.html" class="internal">inweb</a> itself, and its function library, <a href="../../inweb/docs/foundation-module/index.html" class="internal">foundation</a>, which all of
the Inform tools use;
</li><li>(b) the testing utility <a href="../../intest/docs/index.html" class="internal">intest</a>, which has a repository of its own.
</li></ul>
<div class="inweb-extract">
<div class="w3-row-padding w3-padding-16 w3-center" id="food">
<div class="w3-quarter">
<a href="compiler.html"><img src="docs-assets/inbuild.jpg" alt="Inbuild" style="width:100%"></a>
<h3><a href="compiler.html">inbuild</a></h3>
<p>A stand-alone build manager which is also Stage I of the Inform compiler.</p>
</div>
<div class="w3-quarter">
<a href="compiler.html"><img src="docs-assets/inform7.jpg" alt="Inform 7" style="width:100%"></a>
<h3><a href="compiler.html">inform7</a></h3>
<p>The core Inform compiler.</p>
</div>
<div class="w3-quarter">
<a href="compiler.html"><img src="docs-assets/inter.jpg" alt="Inter" style="width:100%"></a>
<h3><a href="compiler.html">inter</a></h3>
<p>A stand-alone tool for intermediate-level code, which is
also Stages VI and VII of the Inform compiler.</p>
</div>
<div class="w3-quarter">
<a href="services.html"><img src="docs-assets/services.jpg" alt="Services" style="width:100%"></a>
<h3><a href="services.html">services</a></h3>
<p>Support for predicate calculus, linguistics, abstract syntax trees and
other facilities needed by the compiler tools.</p>
</div>
</div>
<div class="w3-row-padding w3-padding-16 w3-center">
<div class="w3-quarter">
<img src="docs-assets/inblorb.jpg" alt="Inblorb" style="width:100%">
<h3>inblorb</h3>
<p>A packaging tool for wrapping interactive fiction story files,
included with the Inform apps but not as a part of the inform7 executable.</p>
</div>
<div class="w3-quarter">
<a href="compiler.html"><img src="docs-assets/inform6.jpg" alt="Inform 6" style="width:100%"></a>
<h3><a href="compiler.html">inform6</a></h3>
<p>A compiler for a low-level programming language,
included with the Inform apps but not as a part of the inform7 executable.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/ext.jpg" alt="Basic Inform" style="width:100%">
<h3>Basic Inform</h3>
<p>The Inform 7 extension read automatically into every project,
defining much of the language.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/ifext.jpg" alt="Standard Rules" style="width:100%">
<h3>Standard Rules</h3>
<p>The Inform 7 extension read automatically into every interactive
fiction project, defining much of the world model.</p>
</div>
</div>
<div class="w3-row-padding w3-padding-16 w3-center">
<div class="w3-quarter">
<img src="docs-assets/kit.jpg" alt="BasicInformKit" style="width:100%">
<h3>BasicInformKit</h3>
<p>A kit of Inter code providing runtime support for all programs written
with Inform. Included with the apps in precompiled form.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/kit.jpg" alt="BasicInformExtrasKit" style="width:100%">
<h3>BasicInformExtrasKit</h3>
<p>A kit of Inter code providing runtime support for all programs not using
WorldModelKit. Included with the apps in precompiled form.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/ifkit.jpg" alt="WorldModelKit" style="width:100%">
<h3>WorldModelKit</h3>
<p>A kit of Inter code providing runtime support for interactive fiction
projects with a simulated world. Included with the apps in precompiled form.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/ifkit.jpg" alt="CommandParserKit" style="width:100%">
<h3>CommandParserKit</h3>
<p>A kit of Inter code providing runtime support for interactive fiction
projects with a command parser interface. Included with the apps in precompiled form.</p>
</div>
</div>
<div class="w3-row-padding w3-padding-16 w3-center">
<div class="w3-quarter">
<img src="docs-assets/indoc.jpg" alt="Indoc" style="width:100%">
<h3>indoc</h3>
<p>A tool for typesetting the two books about Inform, and their hundreds
of examples, so that these are readable in the apps. Needed by Inform
(and Inform website) maintainers, but not end users.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/inpolicy.jpg" alt="Inpolicy" style="width:100%">
<h3>inpolicy</h3>
<p>A small tool for checking that the Inform source base complies
with some self-imposed social norms. Needed by Inform maintainers, but not end users.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/inrtps.jpg" alt="Inrtps" style="width:100%">
<h3>inrtps</h3>
<p>A small tool for formatting the run-time problem displays included
with the Inform apps. Needed by Inform maintainers, but not end users.</p>
</div>
</div>
<div class="w3-row-padding w3-padding-16 w3-center">
<div class="w3-quarter">
<img src="docs-assets/inweb.jpg" alt="Inweb" style="width:100%">
<h3>inweb</h3>
<p>A literate-programming tool needed to build the other Inform tools.
Needed by Inform maintainers, but not end users.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/intest.jpg" alt="Intest" style="width:100%">
<h3>intest</h3>
<p>A tool for running complex suites of end-to-end tests to verify the
correctness of other tools. Needed by Inform maintainers, but not end users.</p>
</div>
<div class="w3-quarter">
<img src="docs-assets/services.jpg" alt="Foundation" style="width:100%">
<h3>foundation</h3>
<p>A module of basic computing services used across all of the Inform
tool-chain: file-handling, generating HTML, semantic version-numbering,
string-handling, memory management.</p>
</div>
</div>
</div>
<!--End of weave-->
</main>

117
docs/inform6.html Normal file
View file

@ -0,0 +1,117 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>A note about Inform 6</title>
<link href="docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="index.html">
<img src="docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="compiler.html">compiler tools</a></li>
<li><a href="other.html">other tools</a></li>
<li><a href="extensions.html">extensions and kits</a></li>
<li><a href="units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="inbuild/index.html">inbuild</a></li>
<li><a href="inform7/index.html">inform7</a></li>
<li><a href="inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="core-module/index.html">core</a></li>
<li><a href="assertions-module/index.html">assertions</a></li>
<li><a href="values-module/index.html">values</a></li>
<li><a href="knowledge-module/index.html">knowledge</a></li>
<li><a href="imperative-module/index.html">imperative</a></li>
<li><a href="runtime-module/index.html">runtime</a></li>
<li><a href="if-module/index.html">if</a></li>
<li><a href="multimedia-module/index.html">multimedia</a></li>
<li><a href="index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="bytecode-module/index.html">bytecode</a></li>
<li><a href="building-module/index.html">building</a></li>
<li><a href="pipeline-module/index.html">pipeline</a></li>
<li><a href="final-module/index.html">final</a></li>
</ul><h2>Services</h2><ul>
<li><a href="arch-module/index.html">arch</a></li>
<li><a href="calculus-module/index.html">calculus</a></li>
<li><a href="html-module/index.html">html</a></li>
<li><a href="inflections-module/index.html">inflections</a></li>
<li><a href="kinds-module/index.html">kinds</a></li>
<li><a href="linguistics-module/index.html">linguistics</a></li>
<li><a href="problems-module/index.html">problems</a></li>
<li><a href="syntax-module/index.html">syntax</a></li>
<li><a href="words-module/index.html">words</a></li>
<li><a href="../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'A note about Inform 6' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="index.html">Home</a></li><li><b>A note about Inform 6</b></li></ul></div>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>The Inform system of today sometimes uses the Inform system of yesteryear,
<span class="extract"><span class="extract-syntax">inform6</span></span>, as a final stage of compilation, a stage largely invisible to end
users of the Inform apps. See <a href="compiler.html" class="internal">compiler</a> for a diagram of how the tools
are combined in use.
</p>
<p class="commentary">Inform 6 is a C-like language designed to be compiled to the specialist Z-machine
or Glulx virtual machines, which in turn were designed for interactive fiction.
The Inform 7 repository at Github contains a copy of the most recent stable
release of the Inform 6 compiler, but this is only a copy.
</p>
<p class="commentary">The Inform 6 compiler repository is here:
</p>
<ul class="items"><li>&#9679; <a href="https://github.com/DavidKinder/Inform6" class="external">https://github.com/DavidKinder/Inform6</a>
</li></ul>
<p class="commentary">Note that this is a straight-up C program, and not a literate program needing
<a href="../../inweb/docs/index.html" class="internal">inweb</a> to compile.
</p>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The I7 repository does not contain the Inform 6 "Designer's Manual 4th Edition",
the "DM4", or the Inform 6 Technical Manual, for which see:
</p>
<ul class="items"><li>&#9679; <a href="https://www.inform-fiction.org/manual/html/contents.html" class="external">https://www.inform-fiction.org/manual/html/contents.html</a>
</li><li>&#9679; <a href="https://www.inform-fiction.org/source/tm/index.html" class="external">https://www.inform-fiction.org/source/tm/index.html</a>
</li></ul>
<p class="commentary">The I7 repository also does not contain the Inform 6 library, which is not used
by Inform 7: but see &mdash;
</p>
<ul class="items"><li>&#9679; <a href="https://gitlab.com/DavidGriffith/inform6lib" class="external">https://gitlab.com/DavidGriffith/inform6lib</a>
</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>However, the I7 repository does contain a version of Andrew Plotkin's test suite
for the I6 compiler:
</p>
<ul class="items"><li>&#9679; <a href="https://github.com/erkyrath/Inform6-Testing" class="external">https://github.com/erkyrath/Inform6-Testing</a>
</li></ul>
<p class="commentary">ported to use <a href="../../intest/docs/index.html" class="internal">intest</a> rather than the Python script originally supplied. So
if you've already built the Inform 7 tool chain, and are already using intest
to test <a href="inform7/index.html" class="internal">inform7</a> and the others, then you can run this suite against the
included copy of the I6 compiler as well.
</p>
<!--End of weave-->
</main>
</body>
</html>

View file

@ -84,14 +84,14 @@ which take more than 1/1000th of the total running time.
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">100.0% in inform7 run</span>
<span class="plain-syntax"> 69.0% in compilation to Inter</span>
<span class="plain-syntax"> 47.9% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 4.9% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 68.6% in compilation to Inter</span>
<span class="plain-syntax"> 47.6% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
<span class="plain-syntax"> 4.7% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pre_pass</a>
<span class="plain-syntax"> 3.4% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_1</a>
<span class="plain-syntax"> 2.4% in </span><a href="../runtime-module/6-pi.html#SP1" class="internal">RTPhrasebook::compile_entries</a>
<span class="plain-syntax"> 1.7% in </span><a href="../assertions-module/5-id.html#SP4" class="internal">ImperativeDefinitions::assess_all</a>
<span class="plain-syntax"> 1.5% in </span><a href="../runtime-module/5-kc.html#SP10" class="internal">RTKindConstructors::compile</a>
<span class="plain-syntax"> 0.9% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
<span class="plain-syntax"> 1.1% in </span><a href="../core-module/1-htc.html#SP12" class="internal">Sequence::lint_inter</a>
<span class="plain-syntax"> 0.5% in </span><a href="../assertions-module/5-id.html#SP5" class="internal">ImperativeDefinitions::compile_first_block</a>
<span class="plain-syntax"> 0.5% in </span><a href="../assertions-module/2-ptmn.html#SP1" class="internal">MajorNodes::pass_2</a>
<span class="plain-syntax"> 0.5% in </span><a href="../core-module/1-htc.html#SP9" class="internal">Sequence::undertake_queued_tasks</a>
@ -103,19 +103,19 @@ which take more than 1/1000th of the total running time.
<span class="plain-syntax"> 0.1% in </span><a href="../core-module/1-wtc.html#SP9" class="internal">Task::make_built_in_kind_constructors</a>
<span class="plain-syntax"> 0.1% in </span><a href="../knowledge-module/5-tmw.html#SP3" class="internal">World::stages_II_and_III</a>
<span class="plain-syntax"> 2.4% not specifically accounted for</span>
<span class="plain-syntax"> 28.2% in running Inter pipeline</span>
<span class="plain-syntax"> 10.1% in inter step 14/14: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 7.2% in inter step 5/14: load-binary-kits</span>
<span class="plain-syntax"> 6.2% in inter step 6/14: make-synoptic-module</span>
<span class="plain-syntax"> 1.5% in inter step 9/14: make-identifiers-unique</span>
<span class="plain-syntax"> 0.3% in inter step 12/14: eliminate-redundant-operations</span>
<span class="plain-syntax"> 0.3% in inter step 4/14: compile-splats</span>
<span class="plain-syntax"> 0.3% in inter step 7/14: shorten-wiring</span>
<span class="plain-syntax"> 0.3% in inter step 8/14: detect-indirect-calls</span>
<span class="plain-syntax"> 0.1% in inter step 11/14: eliminate-redundant-labels</span>
<span class="plain-syntax"> 28.6% in running Inter pipeline</span>
<span class="plain-syntax"> 10.2% in step 14/14: generate inform6 -&gt; auto.inf</span>
<span class="plain-syntax"> 7.5% in step 5/14: load-binary-kits</span>
<span class="plain-syntax"> 6.2% in step 6/14: make-synoptic-module</span>
<span class="plain-syntax"> 1.5% in step 9/14: make-identifiers-unique</span>
<span class="plain-syntax"> 0.3% in step 12/14: eliminate-redundant-operations</span>
<span class="plain-syntax"> 0.3% in step 4/14: compile-splats</span>
<span class="plain-syntax"> 0.3% in step 7/14: shorten-wiring</span>
<span class="plain-syntax"> 0.3% in step 8/14: detect-indirect-calls</span>
<span class="plain-syntax"> 0.1% in step 11/14: eliminate-redundant-labels</span>
<span class="plain-syntax"> 1.3% not specifically accounted for</span>
<span class="plain-syntax"> 2.0% in supervisor</span>
<span class="plain-syntax"> 0.6% not specifically accounted for</span>
<span class="plain-syntax"> 2.2% in supervisor</span>
<span class="plain-syntax"> 0.4% not specifically accounted for</span>
</pre>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. Memory consumption. </b>The following gives some idea of which classes of object have the most
instances, and also of how Inform's memory tends to be used in practice.
@ -124,57 +124,57 @@ represent less than 1/1000th of the total.
</p>
<pre class="undisplayed-code all-displayed-code code-font">
<span class="plain-syntax">Total memory consumption was 379100K = 370 MB</span>
<span class="plain-syntax">Total memory consumption was 126308K = 123 MB</span>
<span class="plain-syntax">66.6% was used for 2005764 objects, in 360735 frames in 316 x 800K = 252800K = 246 MB:</span>
<span class="plain-syntax"> ---- was used for 2006043 objects, in 360816 frames in 0 x 800K = 0K = 0 MB:</span>
<span class="plain-syntax"> 10.7% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
<span class="plain-syntax"> 6.2% text_stream_array 4340 x 100 = 434000 objects, 24442880 bytes</span>
<span class="plain-syntax"> 6.2% linked_list 43264 objects, 24227840 bytes</span>
<span class="plain-syntax"> 3.6% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes</span>
<span class="plain-syntax"> 3.4% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes</span>
<span class="plain-syntax"> 2.6% parse_node 129462 objects, 10356960 bytes</span>
<span class="plain-syntax"> 1.9% verb_conjugation 160 objects, 7425280 bytes</span>
<span class="plain-syntax"> 1.4% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes</span>
<span class="plain-syntax"> 0.8% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span>
<span class="plain-syntax"> 0.8% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes</span>
<span class="plain-syntax"> 0.6% kind_array 66 x 1000 = 66000 objects, 2642112 bytes</span>
<span class="plain-syntax"> 0.5% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes</span>
<span class="plain-syntax"> 0.5% inter_schema_token 13926 objects, 2005344 bytes</span>
<span class="plain-syntax"> 0.4% package_request 21137 objects, 1860056 bytes</span>
<span class="plain-syntax"> 0.4% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes</span>
<span class="plain-syntax"> 0.3% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes</span>
<span class="plain-syntax"> 0.3% inter_symbols_table 26569 objects, 1487864 bytes</span>
<span class="plain-syntax"> 0.3% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes</span>
<span class="plain-syntax"> 0.3% inter_package 26569 objects, 1275312 bytes</span>
<span class="plain-syntax"> 0.3% dict_entry_array 386 x 100 = 38600 objects, 1247552 bytes</span>
<span class="plain-syntax"> 0.2% map_data 670 objects, 1125600 bytes</span>
<span class="plain-syntax"> 0.2% id_body 941 objects, 1076504 bytes</span>
<span class="plain-syntax"> 0.2% adjective_meaning 202 objects, 1000304 bytes</span>
<span class="plain-syntax"> 0.2% excerpt_meaning 3100 objects, 967200 bytes</span>
<span class="plain-syntax"> 0.2% production 3872 objects, 898304 bytes</span>
<span class="plain-syntax"> 0.2% ptoken 8382 objects, 871728 bytes</span>
<span class="plain-syntax"> 0.2% grammatical_usage 3611 objects, 866640 bytes</span>
<span class="plain-syntax"> 0.2% individual_form 2561 objects, 860496 bytes</span>
<span class="plain-syntax"> 0.2% inter_schema_node 8891 objects, 853536 bytes</span>
<span class="plain-syntax"> 0.1% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes</span>
<span class="plain-syntax"> 0.1% scan_directory 112 objects, 462336 bytes</span>
<span class="plain-syntax"> 0.1% local_variable_array 47 x 100 = 4700 objects, 452704 bytes</span>
<span class="plain-syntax"> ---- verb_usage 1128 objects, 388032 bytes</span>
<span class="plain-syntax"> ---- rule 469 objects, 367696 bytes</span>
<span class="plain-syntax"> ---- verb_form 386 objects, 348944 bytes</span>
<span class="plain-syntax"> ---- dictionary 6619 objects, 317712 bytes</span>
<span class="plain-syntax"> ---- noun 2380 objects, 285600 bytes</span>
<span class="plain-syntax"> ---- compilation_subtask 3346 objects, 267680 bytes</span>
<span class="plain-syntax"> ---- inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes</span>
<span class="plain-syntax"> ---- inference_subject 665 objects, 260680 bytes</span>
<span class="plain-syntax"> ---- vanilla_function 3678 objects, 235392 bytes</span>
<span class="plain-syntax"> ---- binary_predicate 321 objects, 169488 bytes</span>
<span class="plain-syntax"> ---- hierarchy_location 1119 objects, 161136 bytes</span>
<span class="plain-syntax"> ---- linguistic_stock_item 3316 objects, 159168 bytes</span>
<span class="plain-syntax"> ---- rule_family_data 400 objects, 147200 bytes</span>
<span class="plain-syntax"> ---- nonterminal 760 objects, 139840 bytes</span>
<span class="plain-syntax"> ---- nascent_array 2123 objects, 135872 bytes</span>
<span class="plain-syntax"> 32.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes</span>
<span class="plain-syntax"> 18.9% text_stream_array 4342 x 100 = 434200 objects, 24454144 bytes</span>
<span class="plain-syntax"> 18.7% linked_list 43296 objects, 24245760 bytes</span>
<span class="plain-syntax"> 10.8% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes</span>
<span class="plain-syntax"> 10.2% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes</span>
<span class="plain-syntax"> 8.0% parse_node 129462 objects, 10356960 bytes</span>
<span class="plain-syntax"> 5.7% verb_conjugation 160 objects, 7425280 bytes</span>
<span class="plain-syntax"> 4.2% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes</span>
<span class="plain-syntax"> 2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes</span>
<span class="plain-syntax"> 2.4% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes</span>
<span class="plain-syntax"> 2.0% kind_array 66 x 1000 = 66000 objects, 2642112 bytes</span>
<span class="plain-syntax"> 1.5% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes</span>
<span class="plain-syntax"> 1.5% inter_schema_token 13926 objects, 2005344 bytes</span>
<span class="plain-syntax"> 1.4% package_request 21137 objects, 1860056 bytes</span>
<span class="plain-syntax"> 1.3% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes</span>
<span class="plain-syntax"> 1.1% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes</span>
<span class="plain-syntax"> 1.1% inter_symbols_table 26569 objects, 1487864 bytes</span>
<span class="plain-syntax"> 1.0% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes</span>
<span class="plain-syntax"> 0.9% inter_package 26569 objects, 1275312 bytes</span>
<span class="plain-syntax"> 0.9% dict_entry_array 386 x 100 = 38600 objects, 1247552 bytes</span>
<span class="plain-syntax"> 0.8% map_data 670 objects, 1125600 bytes</span>
<span class="plain-syntax"> 0.8% id_body 941 objects, 1076504 bytes</span>
<span class="plain-syntax"> 0.7% adjective_meaning 202 objects, 1000304 bytes</span>
<span class="plain-syntax"> 0.7% excerpt_meaning 3100 objects, 967200 bytes</span>
<span class="plain-syntax"> 0.6% production 3872 objects, 898304 bytes</span>
<span class="plain-syntax"> 0.6% ptoken 8382 objects, 871728 bytes</span>
<span class="plain-syntax"> 0.6% grammatical_usage 3611 objects, 866640 bytes</span>
<span class="plain-syntax"> 0.6% individual_form 2561 objects, 860496 bytes</span>
<span class="plain-syntax"> 0.6% inter_schema_node 8891 objects, 853536 bytes</span>
<span class="plain-syntax"> 0.4% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes</span>
<span class="plain-syntax"> 0.3% scan_directory 112 objects, 462336 bytes</span>
<span class="plain-syntax"> 0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes</span>
<span class="plain-syntax"> 0.3% verb_usage 1128 objects, 388032 bytes</span>
<span class="plain-syntax"> 0.2% rule 469 objects, 367696 bytes</span>
<span class="plain-syntax"> 0.2% verb_form 386 objects, 348944 bytes</span>
<span class="plain-syntax"> 0.2% dictionary 6619 objects, 317712 bytes</span>
<span class="plain-syntax"> 0.2% noun 2380 objects, 285600 bytes</span>
<span class="plain-syntax"> 0.2% compilation_subtask 3346 objects, 267680 bytes</span>
<span class="plain-syntax"> 0.2% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes</span>
<span class="plain-syntax"> 0.2% inference_subject 665 objects, 260680 bytes</span>
<span class="plain-syntax"> 0.1% vanilla_function 3678 objects, 235392 bytes</span>
<span class="plain-syntax"> 0.1% binary_predicate 321 objects, 169488 bytes</span>
<span class="plain-syntax"> 0.1% hierarchy_location 1119 objects, 161136 bytes</span>
<span class="plain-syntax"> 0.1% linguistic_stock_item 3316 objects, 159168 bytes</span>
<span class="plain-syntax"> 0.1% rule_family_data 400 objects, 147200 bytes</span>
<span class="plain-syntax"> 0.1% nonterminal 760 objects, 139840 bytes</span>
<span class="plain-syntax"> 0.1% nascent_array 2123 objects, 135872 bytes</span>
<span class="plain-syntax"> ---- documentation_ref 1273 objects, 112024 bytes</span>
<span class="plain-syntax"> ---- inference 1703 objects, 108992 bytes</span>
<span class="plain-syntax"> ---- imperative_defn 1377 objects, 99144 bytes</span>
@ -226,14 +226,14 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- property 146 objects, 19856 bytes</span>
<span class="plain-syntax"> ---- timed_rules_rfd_data 400 objects, 19200 bytes</span>
<span class="plain-syntax"> ---- pipeline_step 14 objects, 18928 bytes</span>
<span class="plain-syntax"> ---- method 374 objects, 17952 bytes</span>
<span class="plain-syntax"> ---- pcalc_prop_deferral 86 objects, 17888 bytes</span>
<span class="plain-syntax"> ---- method 371 objects, 17808 bytes</span>
<span class="plain-syntax"> ---- instance 167 objects, 17368 bytes</span>
<span class="plain-syntax"> ---- parse_node_tree 20 objects, 17280 bytes</span>
<span class="plain-syntax"> ---- understanding_reference_array 2 x 100 = 200 objects, 16064 bytes</span>
<span class="plain-syntax"> ---- to_phrase_request 59 objects, 16048 bytes</span>
<span class="plain-syntax"> ---- action_name_list_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- match_avinue_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- action_name_list_array 1 x 1000 objects, 16032 bytes</span>
<span class="plain-syntax"> ---- adjective 137 objects, 15344 bytes</span>
<span class="plain-syntax"> ---- generated_segment 14 objects, 14784 bytes</span>
<span class="plain-syntax"> ---- booking_list 407 objects, 13024 bytes</span>
@ -241,24 +241,24 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- adjective_iname_holder 320 objects, 12800 bytes</span>
<span class="plain-syntax"> ---- uniqueness_count 454 objects, 10896 bytes</span>
<span class="plain-syntax"> ---- inter_construct 30 objects, 10320 bytes</span>
<span class="plain-syntax"> ---- filename 246 objects, 9840 bytes</span>
<span class="plain-syntax"> ---- filename 250 objects, 10000 bytes</span>
<span class="plain-syntax"> ---- stopwatch_timer 112 objects, 8960 bytes</span>
<span class="plain-syntax"> ---- build_vertex 64 objects, 7680 bytes</span>
<span class="plain-syntax"> ---- equation_node 68 objects, 7616 bytes</span>
<span class="plain-syntax"> ---- understanding_item_array 3 x 100 = 300 objects, 7296 bytes</span>
<span class="plain-syntax"> ---- shared_variable_array 1 x 100 objects, 7232 bytes</span>
<span class="plain-syntax"> ---- determiner 22 objects, 7216 bytes</span>
<span class="plain-syntax"> ---- build_vertex 60 objects, 7200 bytes</span>
<span class="plain-syntax"> ---- verb 108 objects, 6912 bytes</span>
<span class="plain-syntax"> ---- hierarchy_attachment_point 77 objects, 6776 bytes</span>
<span class="plain-syntax"> ---- inbuild_work 105 objects, 6720 bytes</span>
<span class="plain-syntax"> ---- text_literal_holder 163 objects, 6520 bytes</span>
<span class="plain-syntax"> ---- inbuild_work 101 objects, 6464 bytes</span>
<span class="plain-syntax"> ---- inbuild_copy 55 objects, 5720 bytes</span>
<span class="plain-syntax"> ---- inbuild_copy 59 objects, 6136 bytes</span>
<span class="plain-syntax"> ---- inbuild_edition 78 objects, 5616 bytes</span>
<span class="plain-syntax"> ---- heading_tree 20 objects, 5440 bytes</span>
<span class="plain-syntax"> ---- inbuild_edition 74 objects, 5328 bytes</span>
<span class="plain-syntax"> ---- explicit_action_array 1 x 100 objects, 4832 bytes</span>
<span class="plain-syntax"> ---- value_property_data 84 objects, 4704 bytes</span>
<span class="plain-syntax"> ---- parsing_pp_data 96 objects, 4608 bytes</span>
<span class="plain-syntax"> ---- compatibility_specification 86 objects, 4128 bytes</span>
<span class="plain-syntax"> ---- compatibility_specification 90 objects, 4320 bytes</span>
<span class="plain-syntax"> ---- command_line_switch 49 objects, 3920 bytes</span>
<span class="plain-syntax"> ---- activity 35 objects, 3920 bytes</span>
<span class="plain-syntax"> ---- submodule_request 94 objects, 3760 bytes</span>
@ -270,18 +270,19 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- definition 44 objects, 3168 bytes</span>
<span class="plain-syntax"> ---- semver_range 29 objects, 3016 bytes</span>
<span class="plain-syntax"> ---- either_or_property_data 62 objects, 2976 bytes</span>
<span class="plain-syntax"> ---- target_vm 20 objects, 2880 bytes</span>
<span class="plain-syntax"> ---- use_option 29 objects, 2552 bytes</span>
<span class="plain-syntax"> ---- parentage_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- part_of_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- parentage_inference_data 79 objects, 2528 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_instance_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- kind_constructor_casting_rule_array 1 x 100 objects, 2432 bytes</span>
<span class="plain-syntax"> ---- equation_symbol 30 objects, 2400 bytes</span>
<span class="plain-syntax"> ---- scene 1 object, 2096 bytes</span>
<span class="plain-syntax"> ---- build_script 60 objects, 1920 bytes</span>
<span class="plain-syntax"> ---- build_script 64 objects, 2048 bytes</span>
<span class="plain-syntax"> ---- inform_pipeline 28 objects, 1792 bytes</span>
<span class="plain-syntax"> ---- pronoun_usage 42 objects, 1680 bytes</span>
<span class="plain-syntax"> ---- table_contribution_array 1 x 100 objects, 1632 bytes</span>
<span class="plain-syntax"> ---- plugin 25 objects, 1600 bytes</span>
<span class="plain-syntax"> ---- inform_pipeline 24 objects, 1536 bytes</span>
<span class="plain-syntax"> ---- noun_filter_token 22 objects, 1408 bytes</span>
<span class="plain-syntax"> ---- inter_node_array 34 objects, 1360 bytes</span>
<span class="plain-syntax"> ---- special_meaning_holder 33 objects, 1320 bytes</span>
@ -289,7 +290,6 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- table_column 16 objects, 1280 bytes</span>
<span class="plain-syntax"> ---- invocation_options_array 1 x 100 objects, 1224 bytes</span>
<span class="plain-syntax"> ---- direction_inference_data 30 objects, 1200 bytes</span>
<span class="plain-syntax"> ---- target_vm 8 objects, 1152 bytes</span>
<span class="plain-syntax"> ---- tree_inventory_item 28 objects, 1120 bytes</span>
<span class="plain-syntax"> ---- runtime_kind_structure 13 objects, 1040 bytes</span>
<span class="plain-syntax"> ---- quantifier 16 objects, 1024 bytes</span>
@ -314,22 +314,22 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- i6_memory_setting 14 objects, 448 bytes</span>
<span class="plain-syntax"> ---- inference_family 11 objects, 440 bytes</span>
<span class="plain-syntax"> ---- inter_annotation_form 10 objects, 400 bytes</span>
<span class="plain-syntax"> ---- article_usage 8 objects, 384 bytes</span>
<span class="plain-syntax"> ---- bp_family 12 objects, 384 bytes</span>
<span class="plain-syntax"> ---- article_usage 8 objects, 384 bytes</span>
<span class="plain-syntax"> ---- source_file 5 objects, 360 bytes</span>
<span class="plain-syntax"> ---- inbuild_genre 7 objects, 336 bytes</span>
<span class="plain-syntax"> ---- grammatical_category 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- module_request 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- door_dir_notice 5 objects, 320 bytes</span>
<span class="plain-syntax"> ---- cached_kind_declaration 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- pronoun 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- grammatical_category 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- module_request 8 objects, 320 bytes</span>
<span class="plain-syntax"> ---- tree_inventory 1 object, 312 bytes</span>
<span class="plain-syntax"> ---- up_family 9 objects, 288 bytes</span>
<span class="plain-syntax"> ---- build_step 4 objects, 288 bytes</span>
<span class="plain-syntax"> ---- compilation_unit 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- contents_entry 7 objects, 280 bytes</span>
<span class="plain-syntax"> ---- explicit_bp_data 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- door_to_notice 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- contents_entry 7 objects, 280 bytes</span>
<span class="plain-syntax"> ---- compilation_unit 5 objects, 280 bytes</span>
<span class="plain-syntax"> ---- verb_usage_tier 5 objects, 240 bytes</span>
<span class="plain-syntax"> ---- inter_pipeline 1 object, 232 bytes</span>
<span class="plain-syntax"> ---- adjective_meaning_family 7 objects, 224 bytes</span>
@ -337,13 +337,13 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- release_instructions 1 object, 208 bytes</span>
<span class="plain-syntax"> ---- build_skill 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- code_generator 5 objects, 200 bytes</span>
<span class="plain-syntax"> ---- plural_dictionary_entry 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- kit_dependency 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- inform_project 1 object, 192 bytes</span>
<span class="plain-syntax"> ---- plural_dictionary_entry 4 objects, 192 bytes</span>
<span class="plain-syntax"> ---- attachment_instruction 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inter_architecture 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inference_subject_family 5 objects, 160 bytes</span>
<span class="plain-syntax"> ---- imperative_defn_family 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- inference_subject_family 5 objects, 160 bytes</span>
<span class="plain-syntax"> ---- attachment_instruction 4 objects, 160 bytes</span>
<span class="plain-syntax"> ---- element_activation 4 objects, 128 bytes</span>
<span class="plain-syntax"> ---- inbuild_nest 3 objects, 120 bytes</span>
<span class="plain-syntax"> ---- local_block_value 2 objects, 112 bytes</span>
@ -351,37 +351,37 @@ represent less than 1/1000th of the total.
<span class="plain-syntax"> ---- compile_task_data 1 object, 80 bytes</span>
<span class="plain-syntax"> ---- article 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- group_together_function 2 objects, 80 bytes</span>
<span class="plain-syntax"> ---- build_methodology 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- figures_data 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- inter_warehouse 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- build_methodology 1 object, 56 bytes</span>
<span class="plain-syntax"> ---- star_invention 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- HTML_file_state 1 object, 48 bytes</span>
<span class="plain-syntax"> ---- I6_generation_data 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- by_function_bp_data 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- kind_template_definition 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- loop_over_scope 1 object, 40 bytes</span>
<span class="plain-syntax"> ---- by_function_bp_data 1 object, 40 bytes</span>
<span class="plain-syntax">33.3% was used for memory not allocated for objects:</span>
<span class="plain-syntax">100.0% was used for memory not allocated for objects:</span>
<span class="plain-syntax"> 19.7% text stream storage 76619108 bytes in 452033 claims</span>
<span class="plain-syntax"> 1.1% dictionary storage 4544512 bytes in 6619 claims</span>
<span class="plain-syntax"> 59.2% text stream storage 76627132 bytes in 452150 claims</span>
<span class="plain-syntax"> 3.5% dictionary storage 4544512 bytes in 6619 claims</span>
<span class="plain-syntax"> ---- sorting 744 bytes in 3 claims</span>
<span class="plain-syntax"> 1.8% source text 7200000 bytes in 3 claims</span>
<span class="plain-syntax"> 2.7% source text details 10800000 bytes in 2 claims</span>
<span class="plain-syntax"> ---- documentation fragments 262144 bytes in 1 claim</span>
<span class="plain-syntax"> 5.5% source text 7200000 bytes in 3 claims</span>
<span class="plain-syntax"> 8.3% source text details 10800000 bytes in 2 claims</span>
<span class="plain-syntax"> 0.2% documentation fragments 262144 bytes in 1 claim</span>
<span class="plain-syntax"> ---- linguistic stock array 81920 bytes in 2 claims</span>
<span class="plain-syntax"> ---- small word set array 105600 bytes in 22 claims</span>
<span class="plain-syntax"> 1.1% inter symbols storage 4521792 bytes in 27920 claims</span>
<span class="plain-syntax"> 4.3% inter bytecode storage 16767748 bytes in 14 claims</span>
<span class="plain-syntax"> 1.6% inter links storage 6222976 bytes in 11 claims</span>
<span class="plain-syntax"> ---- inter tree location list storage 191232 bytes in 32 claims</span>
<span class="plain-syntax"> 0.4% instance-of-kind counting 1695204 bytes in 1 claim</span>
<span class="plain-syntax"> 3.4% inter symbols storage 4522288 bytes in 27921 claims</span>
<span class="plain-syntax"> 12.9% inter bytecode storage 16767476 bytes in 14 claims</span>
<span class="plain-syntax"> 4.8% inter links storage 6222976 bytes in 11 claims</span>
<span class="plain-syntax"> 0.1% inter tree location list storage 191232 bytes in 32 claims</span>
<span class="plain-syntax"> 1.3% instance-of-kind counting 1695204 bytes in 1 claim</span>
<span class="plain-syntax"> ---- compilation workspace for objects 21856 bytes in 25 claims</span>
<span class="plain-syntax"> ---- lists for type-checking invocations 16000 bytes in 1 claim</span>
<span class="plain-syntax"> ---- code generation workspace for objects 1336 bytes in 4 claims</span>
<span class="plain-syntax"> ---- emitter array storage 279776 bytes in 1995 claims</span>
<span class="plain-syntax"> 0.2% emitter array storage 279776 bytes in 1995 claims</span>
<span class="plain-syntax">19.8% was overhead - 77076304 bytes = 75269K = 73 MB</span>
<span class="plain-syntax">-140.-5% was overhead - -181824128 bytes = -177562K = -173 MB</span>
</pre>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. Preform grammar. </b>The full annotated description of the Preform grammar (see <a href="../words-module/4-ap.html" class="internal">About Preform (in words)</a>),
with optimisation details and hit/miss statistics added, is also long: it's

228
docs/services.html Normal file
View file

@ -0,0 +1,228 @@
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Services and their unit tests</title>
<link href="docs-assets/Breadcrumbs.css" rel="stylesheet" rev="stylesheet" type="text/css">
<meta name="viewport" content="width=device-width initial-scale=1">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="Content-Language" content="en-gb">
<link href="docs-assets/Contents.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Progress.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Navigation.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Fonts.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Base.css" rel="stylesheet" rev="stylesheet" type="text/css">
<script src="http://code.jquery.com/jquery-1.12.4.min.js"
integrity="sha256-ZosEbRLbNQzLpnKIkEdrPv7lOy9C27hHQ+Xp8a4MxAQ=" crossorigin="anonymous"></script>
<script src="docs-assets/Bigfoot.js"></script>
<link href="docs-assets/Bigfoot.css" rel="stylesheet" rev="stylesheet" type="text/css">
<link href="docs-assets/Colours.css" rel="stylesheet" rev="stylesheet" type="text/css">
</head>
<body class="commentary-font">
<nav role="navigation">
<h1><a href="index.html">
<img src="docs-assets/Inform.png" height=72">
</a></h1>
<ul><li><a href="compiler.html">compiler tools</a></li>
<li><a href="other.html">other tools</a></li>
<li><a href="extensions.html">extensions and kits</a></li>
<li><a href="units.html">unit test tools</a></li>
</ul><h2>Compiler Webs</h2><ul>
<li><a href="inbuild/index.html">inbuild</a></li>
<li><a href="inform7/index.html">inform7</a></li>
<li><a href="inter/index.html">inter</a></li>
</ul><h2>Inbuild Modules</h2><ul>
<li><a href="supervisor-module/index.html">supervisor</a></li>
</ul><h2>Inform7 Modules</h2><ul>
<li><a href="core-module/index.html">core</a></li>
<li><a href="assertions-module/index.html">assertions</a></li>
<li><a href="values-module/index.html">values</a></li>
<li><a href="knowledge-module/index.html">knowledge</a></li>
<li><a href="imperative-module/index.html">imperative</a></li>
<li><a href="runtime-module/index.html">runtime</a></li>
<li><a href="if-module/index.html">if</a></li>
<li><a href="multimedia-module/index.html">multimedia</a></li>
<li><a href="index-module/index.html">index</a></li>
</ul><h2>Inter Modules</h2><ul>
<li><a href="bytecode-module/index.html">bytecode</a></li>
<li><a href="building-module/index.html">building</a></li>
<li><a href="pipeline-module/index.html">pipeline</a></li>
<li><a href="final-module/index.html">final</a></li>
</ul><h2>Services</h2><ul>
<li><a href="arch-module/index.html">arch</a></li>
<li><a href="calculus-module/index.html">calculus</a></li>
<li><a href="html-module/index.html">html</a></li>
<li><a href="inflections-module/index.html">inflections</a></li>
<li><a href="kinds-module/index.html">kinds</a></li>
<li><a href="linguistics-module/index.html">linguistics</a></li>
<li><a href="problems-module/index.html">problems</a></li>
<li><a href="syntax-module/index.html">syntax</a></li>
<li><a href="words-module/index.html">words</a></li>
<li><a href="../../inweb/docs/foundation-module/index.html">foundation</a></li>
</ul>
</nav>
<main role="main">
<!--Weave of 'Services and their unit tests' generated by Inweb-->
<div class="breadcrumbs">
<ul class="crumbs"><li><a href="index.html">Home</a></li><li><b>Services and their unit tests</b></li></ul></div>
<p class="commentary firstcommentary"><a id="SP1" class="paragraph-anchor"></a><b>&#167;1. </b>The programs in the Inform toolchain need a variety of services beyond those
provided by our standard library <a href="../../inweb/docs/foundation-module/index.html" class="internal">foundation</a>. The latter offers basics such
as memory allocation, linked lists, string manipulation and so on, but the
Inform tools need much more than that.
</p>
<p class="commentary">The services layer of Inform<sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> is structured as a set of modules. They can be
(and are) used by other tools besides the main <a href="inform7/index.html" class="internal">inform7</a> compiler, and in
particular most of the services come with unit-testing tools: small stand-alone
executables which enable the workings of the service in question to be tested
in isolation from the rest of the Inform toolchain.
</p>
<p class="commentary">To some extent a tool can include just those modules it needs, but there are
dependencies between them: for example, <a href="linguistics-module/index.html" class="internal">linguistics</a> requires <a href="syntax-module/index.html" class="internal">syntax</a>,
which in turn requires <a href="words-module/index.html" class="internal">words</a>. Each service has a section of documentation
called "How To Include This Module", explaining its needs.
</p>
<ul class="footnotetexts"><li class="footnote" id="fn:1"><p class="inwebfootnote"><sup id="fnref:1"><a href="#fn:1" rel="footnote">1</a></sup> At one time this was going to be called Second Foundation, or perhaps
Foundation and Empire.
<a href="#fnref:1" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary firstcommentary"><a id="SP2" class="paragraph-anchor"></a><b>&#167;2. </b>The <a href="words-module/index.html" class="internal">words</a> module provides for natural-language text to be read in,
and then broken up into words and punctuation marks. Usefully efficient ways
to refer to fragments of this text, such as <span class="extract"><span class="extract-syntax">wording</span></span> and <span class="extract"><span class="extract-syntax">word_assemblage</span></span>,
are also provided. Much of this is simple book-keeping, but the words module
also provides the "Preform" system for parsing text against simple grammars.
Preform powers the lexical/syntax analysis phases of Inform.
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="words-module/index.html" class="internal">words</a>.
</li><li>&#9679; Detailed overview: <a href="words-module/P-wtmd.html" class="internal">What This Module Does (in words)</a>.
</li><li>&#9679; Usage instructions: <a href="words-module/P-htitm.html" class="internal">How To Include This Module (in words)</a>.
</li><li>&#9679; Unit test tool here: <a href="words-test/index.html" class="internal">words-test</a>.
</li><li>&#9679; A manual for writing Preform grammars: <a href="words-module/4-ap.html" class="internal">About Preform (in words)</a>.
</li></ul>
<p class="commentary firstcommentary"><a id="SP3" class="paragraph-anchor"></a><b>&#167;3. </b>The <a href="lexicon-module/index.html" class="internal">lexicon</a> module provides a way to store and look up meanings of
multi-word phrases such as "brass plaque" or "red silk jacket". This is the
equivalent, in a natural-language context, of a symbols table in a more
conventional compiler. Speed is critical and some novel algorithms are used.
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="lexicon-module/index.html" class="internal">lexicon</a>.
</li><li>&#9679; Detailed overview: <a href="lexicon-module/P-wtmd.html" class="internal">What This Module Does (in lexicon)</a>.
</li><li>&#9679; Usage instructions: <a href="lexicon-module/P-htitm.html" class="internal">How To Include This Module (in lexicon)</a>.
</li></ul>
<p class="commentary firstcommentary"><a id="SP4" class="paragraph-anchor"></a><b>&#167;4. </b>The <a href="calculus-module/index.html" class="internal">calculus</a> module allows logical propositions to be stored and
simplified. The word "calculus" is used here in the sense of predicate
calculus with equality, a standard system for mathematical logic, and is
nothing to do with derivatives or integrals.
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="calculus-module/index.html" class="internal">calculus</a>.
</li><li>&#9679; Detailed overview: <a href="calculus-module/P-wtmd.html" class="internal">What This Module Does (in calculus)</a>.
</li><li>&#9679; Usage instructions: <a href="calculus-module/P-htitm.html" class="internal">How To Include This Module (in calculus)</a>.
</li><li>&#9679; Unit test tool here: <a href="calculus-test/index.html" class="internal">calculus-test</a>.
</li></ul>
<p class="commentary firstcommentary"><a id="SP5" class="paragraph-anchor"></a><b>&#167;5. </b><a href="syntax-module/index.html" class="internal">syntax</a> is a relatively small module, which manages annotated syntax trees.
It provides only basic facilities for making and annotating ASTs, but also
contains the sentence-breaking algorithm, turning a stream of words into a
rudimentary AST.
</p>
<p class="commentary">This is really part one of a two-part story, the second being <a href="linguistics-module/index.html" class="internal">linguistics</a>.
Together these define the AST for the Inform 7 language.
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="syntax-module/index.html" class="internal">syntax</a>.
</li><li>&#9679; Detailed overview: <a href="syntax-module/P-wtmd.html" class="internal">What This Module Does (in syntax)</a>.
</li><li>&#9679; Usage instructions: <a href="syntax-module/P-htitm.html" class="internal">How To Include This Module (in syntax)</a>.
</li><li>&#9679; Unit test tool here: <a href="syntax-test/index.html" class="internal">syntax-test</a>.
</li></ul>
<p class="commentary firstcommentary"><a id="SP6" class="paragraph-anchor"></a><b>&#167;6. </b>The <a href="linguistics-module/index.html" class="internal">linguistics</a> module manages grammatical categories such as verbs,
adjectives, determiners and so on, and uses the annotated syntax trees of
the <a href="syntax-module/index.html" class="internal">syntax</a> module to diagram sentences.
</p>
<p class="commentary">This is really part two of a two-part story, the first being <a href="syntax-module/index.html" class="internal">syntax</a>.
Together these define the AST for the Inform 7 language.
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="linguistics-module/index.html" class="internal">linguistics</a>.
</li><li>&#9679; Detailed overview: <a href="linguistics-module/P-wtmd.html" class="internal">What This Module Does (in linguistics)</a>.
</li><li>&#9679; Usage instructions: <a href="linguistics-module/P-htitm.html" class="internal">How To Include This Module (in linguistics)</a>.
</li><li>&#9679; Unit test tool here: <a href="linguistics-test/index.html" class="internal">linguistics-test</a>.
</li><li>&#9679; A description of the result: <a href="linguistics-module/P-asd.html" class="internal">About Sentence Diagrams (in linguistics)</a>.
</li></ul>
<p class="commentary firstcommentary"><a id="SP7" class="paragraph-anchor"></a><b>&#167;7. </b>The <a href="inflections-module/index.html" class="internal">inflections</a> module provides ways to recognise or generate inflected
forms of words: for example, "fig" becoming "figs", "ox" becoming "oxen",
"box" becoming "boxes", and "sheep" becoming "sheep" are all inflections to
make the plural of an English noun.<sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> And similarly for inflected verb forms
such as "starting", "starts" and "start"; or adjectival inflections such as
those used to generate comparatives and superlatives &mdash; "large" to "larger"
or "largest".
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="inflections-module/index.html" class="internal">inflections</a>.
</li><li>&#9679; Detailed overview: <a href="inflections-module/P-wtmd.html" class="internal">What This Module Does (in inflections)</a>.
</li><li>&#9679; Usage instructions: <a href="inflections-module/P-htitm.html" class="internal">How To Include This Module (in inflections)</a>.
</li><li>&#9679; Unit test tool here: <a href="inflections-test/index.html" class="internal">inflections-test</a>.
</li></ul>
<ul class="footnotetexts"><li class="footnote" id="fn:2"><p class="inwebfootnote"><sup id="fnref:2"><a href="#fn:2" rel="footnote">2</a></sup> A full implementation of Conway's pluralisation algorithm can be found in
this module, and is one of Inform's more picturesque corners.
<a href="#fnref:2" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary firstcommentary"><a id="SP8" class="paragraph-anchor"></a><b>&#167;8. </b>The <a href="kinds-module/index.html" class="internal">kinds</a> module provides a basic type system for an Inform-like language.<sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup>
Note that this does not contain the Inform typechecker, which can be found in
the main compiler (at <a href="values-module/5-dsh.html" class="internal">Dash (in values)</a>); but it does contain code to test
whether or not values of one kind conform to another kind, which is a key part
of the typechecking process.
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="kinds-module/index.html" class="internal">kinds</a>.
</li><li>&#9679; Detailed overview: <a href="kinds-module/P-wtmd.html" class="internal">What This Module Does (in kinds)</a>.
</li><li>&#9679; Usage instructions: <a href="kinds-module/P-htitm.html" class="internal">How To Include This Module (in kinds)</a>.
</li><li>&#9679; Unit test tool here: <a href="kinds-test/index.html" class="internal">kinds-test</a>.
</li><li>&#9679; A manual for "Neptune", the mini-language used by kits to create fundamental
kinds and kind constructors: <a href="kinds-module/4-abgtn.html" class="internal">A Brief Guide to Neptune (in kinds)</a>.
</li></ul>
<ul class="footnotetexts"><li class="footnote" id="fn:3"><p class="inwebfootnote"><sup id="fnref:3"><a href="#fn:3" rel="footnote">3</a></sup> Following traditional Inform practice, the term "kind" is used instead of the
more conventional computer-science word "type".
<a href="#fnref:3" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary firstcommentary"><a id="SP9" class="paragraph-anchor"></a><b>&#167;9. </b>The <a href="arch-module/index.html" class="internal">arch</a> module is a way to represent the possible code-generation
"architectures" supported in the Inform toolchain. For example, "32-bit words
with debugging enabled" is an architecture.
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="arch-module/index.html" class="internal">arch</a>.
</li><li>&#9679; Detailed overview: <a href="arch-module/P-wtmd.html" class="internal">What This Module Does (in arch)</a>.
</li><li>&#9679; Usage instructions: <a href="arch-module/P-htitm.html" class="internal">How To Include This Module (in arch)</a>.
</li><li>&#9679; Unit test tool here: <a href="arch-test/index.html" class="internal">arch-test</a>.
</li></ul>
<p class="commentary firstcommentary"><a id="SP10" class="paragraph-anchor"></a><b>&#167;10. </b>The <a href="problems-module/index.html" class="internal">problems</a> module is a simple system for producing HTML-page-style
error messages, such as the Problems issued by the Inform compiler.<sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup>
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="problems-module/index.html" class="internal">problems</a>.
</li><li>&#9679; Detailed overview: <a href="problems-module/P-wtmd.html" class="internal">What This Module Does (in problems)</a>.
</li><li>&#9679; Usage instructions: <a href="problems-module/P-htitm.html" class="internal">How To Include This Module (in problems)</a>.
</li><li>&#9679; Unit test tool here: <a href="problems-test/index.html" class="internal">problems-test</a>.
</li></ul>
<ul class="footnotetexts"><li class="footnote" id="fn:4"><p class="inwebfootnote"><sup id="fnref:4"><a href="#fn:4" rel="footnote">4</a></sup> Arguably it's not really of any wider application and shouldn't have been
made a module at all, but never mind.
<a href="#fnref:4" title="return to text"> &#x21A9;</a></p></li></ul>
<p class="commentary firstcommentary"><a id="SP11" class="paragraph-anchor"></a><b>&#167;11. </b>The <a href="html-module/index.html" class="internal">html</a> module contains tools for generating non-standard features of HTML
needed by the files made by Inform, such as clickable links to the source text.
</p>
<ul class="items"><li>&#9679; Contents page of web: <a href="html-module/index.html" class="internal">html</a>.
</li><li>&#9679; Detailed overview: <a href="html-module/P-wtmd.html" class="internal">What This Module Does (in html)</a>. This section includes a
description of the custom Inform-app-only URL schemas <span class="extract"><span class="extract-syntax">inform:</span></span> and <span class="extract"><span class="extract-syntax">source:</span></span>.
</li><li>&#9679; Usage instructions: <a href="html-module/P-htitm.html" class="internal">How To Include This Module (in html)</a>.
</li></ul>
<!--End of weave-->
</main>
</body>
</html>

View file

@ -21,10 +21,12 @@ usage: inbuild [-TASK] TARGET1 TARGET2 ...
-use-needs show all the extensions, kits and so on needed to use
for translating Inform source text to Inter:
-basic use Basic Inform language (same as -kit BasicInformKit)
-case X make any source links refer to the source in extension example X
-census perform an extensions census (default is -no-census)
-debug compile with debugging features even on a Release (default is -no-debug)
-format=X compile I6 code suitable for the virtual machine X
-format=X compile to the format X (default is Inform6/32)
-o X use file X as the compiled output (not for use with -project)
-project X work within the Inform project X
-release compile a version suitable for a Release build (default is -no-release)
-rng fix the random number generator of the story file (for testing) (default is -no-rng)
@ -46,5 +48,6 @@ for tweaking code generation from Inter:
-crash intentionally crash on internal errors, for backtracing (default is -no-crash)
-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)
-help print this help information
-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1
-log X write the debugging log to include diagnostics on X
-version print out version number

View file

@ -1,40 +1,47 @@
Inform 7 v10.1.0 has started.
inform7: a compiler from source text to Inter code
Usage: inform7 [OPTIONS]
for translating Inform source text to Inter:
-case X make any source links refer to the source in extension example X
-census perform an extensions census (default is -no-census)
-debug compile with debugging features even on a Release (default is -no-debug)
-format=X compile I6 code suitable for the virtual machine X
-project X work within the Inform project X
-release compile a version suitable for a Release build (default is -no-release)
-rng fix the random number generator of the story file (for testing) (default is -no-rng)
-source X use file X as the Inform source text
-basic use Basic Inform language (same as -kit BasicInformKit)
-case X make any source links refer to the source in extension example X
-census perform an extensions census (default is -no-census)
-debug compile with debugging features even on a Release (default is -no-debug)
-format=X compile to the format X (default is Inform6/32)
-o X use file X as the compiled output (not for use with -project)
-project X work within the Inform project X
-release compile a version suitable for a Release build (default is -no-release)
-rng fix the random number generator of the story file (for testing) (default is -no-rng)
-source X use file X as the Inform source text
for locating resources in the file system:
-external X use X as the user's home for installed material such as extensions
-internal X use X as the location of built-in material such as the Standard Rules
-nest X add the nest at pathname X to the search list
-transient X use X for transient data such as the extensions census
-external X use X as the user's home for installed material such as extensions
-internal X use X as the location of built-in material such as the Standard Rules
-nest X add the nest at pathname X to the search list
-transient X use X for transient data such as the extensions census
for tweaking code generation from Inter:
-kit X include Inter code from the kit called X
-pipeline X specify code-generation pipeline by name (default is "compile")
-pipeline-file X specify code-generation pipeline as file X
-variable X set pipeline variable X (in form name=value)
-kit X include Inter code from the kit called X
-pipeline X specify code-generation pipeline by name (default is "compile")
-pipeline-file X specify code-generation pipeline as file X
-variable X set pipeline variable X (in form name=value)
for testing and debugging inform7:
-crash-all intentionally crash on Problem messages, for backtracing (default is -no-crash-all)
-no-index don't produce an Index (default is -index)
-no-progress don't display progress percentages (default is -progress)
-require-problem X return 0 unless exactly this Problem message is generated
-sigils print Problem message sigils (default is -no-sigils)
-no-census-update don't update the extensions census (default is -census-update)
-crash-all intentionally crash on Problem messages, for backtracing (default is -no-crash-all)
-diagnostics X if no problems occur, write diagnostics files to directory X (default is -no-diagnostics)
-no-index don't produce an Index (default is -index)
-no-problems don't produce (an HTML) Problems report page (default is -problems)
-no-progress don't display progress percentages (default is -progress)
-require-problem X return 0 unless exactly this Problem message is generated
-sigils print Problem message sigils (default is -no-sigils)
-silence practice 'silence is golden': print only Unix-style errors (default is -no-silence)
-test-output X write output of internal tests to file X
-at X specify that this tool is installed at X
-crash intentionally crash on internal errors, for backtracing (default is -no-crash)
-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)
-help print this help information
-log X write the debugging log to include diagnostics on X
-version print out version number
-at X specify that this tool is installed at X
-crash intentionally crash on internal errors, for backtracing (default is -no-crash)
-fixtime pretend the time is 11 a.m. on 28 March 2016 for testing (default is -no-fixtime)
-help print this help information
-locale X set locales as 'L=E', L being shell or console, E platform, utf-8 or iso-latin1
-log X write the debugging log to include diagnostics on X
-version print out version number

View file

@ -1,54 +1,54 @@
Total memory consumption was 379108K = 370 MB
Total memory consumption was 126308K = 123 MB
66.6% was used for 2006043 objects, in 360816 frames in 316 x 800K = 252800K = 246 MB:
---- was used for 2006043 objects, in 360816 frames in 0 x 800K = 0K = 0 MB:
10.7% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
6.2% text_stream_array 4342 x 100 = 434200 objects, 24454144 bytes
6.2% linked_list 43296 objects, 24245760 bytes
3.6% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes
3.4% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes
2.6% parse_node 129462 objects, 10356960 bytes
1.9% verb_conjugation 160 objects, 7425280 bytes
1.4% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes
0.8% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes
0.8% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes
0.6% kind_array 66 x 1000 = 66000 objects, 2642112 bytes
0.5% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes
0.5% inter_schema_token 13926 objects, 2005344 bytes
0.4% package_request 21137 objects, 1860056 bytes
0.4% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes
0.3% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
0.3% inter_symbols_table 26569 objects, 1487864 bytes
0.3% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes
0.3% inter_package 26569 objects, 1275312 bytes
0.3% dict_entry_array 386 x 100 = 38600 objects, 1247552 bytes
0.2% map_data 670 objects, 1125600 bytes
0.2% id_body 941 objects, 1076504 bytes
0.2% adjective_meaning 202 objects, 1000304 bytes
0.2% excerpt_meaning 3100 objects, 967200 bytes
0.2% production 3872 objects, 898304 bytes
0.2% ptoken 8382 objects, 871728 bytes
0.2% grammatical_usage 3611 objects, 866640 bytes
0.2% individual_form 2561 objects, 860496 bytes
0.2% inter_schema_node 8891 objects, 853536 bytes
0.1% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
0.1% scan_directory 112 objects, 462336 bytes
0.1% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
---- verb_usage 1128 objects, 388032 bytes
---- rule 469 objects, 367696 bytes
---- verb_form 386 objects, 348944 bytes
---- dictionary 6619 objects, 317712 bytes
---- noun 2380 objects, 285600 bytes
---- compilation_subtask 3346 objects, 267680 bytes
---- inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
---- inference_subject 665 objects, 260680 bytes
---- vanilla_function 3678 objects, 235392 bytes
---- binary_predicate 321 objects, 169488 bytes
---- hierarchy_location 1119 objects, 161136 bytes
---- linguistic_stock_item 3316 objects, 159168 bytes
---- rule_family_data 400 objects, 147200 bytes
---- nonterminal 760 objects, 139840 bytes
---- nascent_array 2123 objects, 135872 bytes
32.3% inter_tree_node_array 58 x 8192 = 475136 objects, 41813824 bytes
18.9% text_stream_array 4342 x 100 = 434200 objects, 24454144 bytes
18.7% linked_list 43296 objects, 24245760 bytes
10.8% inter_symbol_array 132 x 1024 = 135168 objects, 14061696 bytes
10.2% inter_error_stash_array 101 x 1024 = 103424 objects, 13241504 bytes
8.0% parse_node 129462 objects, 10356960 bytes
5.7% verb_conjugation 160 objects, 7425280 bytes
4.2% parse_node_annotation_array 345 x 500 = 172500 objects, 5531040 bytes
2.6% pcalc_prop_array 25 x 1000 = 25000 objects, 3400800 bytes
2.4% inter_name_array 67 x 1000 = 67000 objects, 3218144 bytes
2.0% kind_array 66 x 1000 = 66000 objects, 2642112 bytes
1.5% inter_name_generator_array 51 x 1000 = 51000 objects, 2041632 bytes
1.5% inter_schema_token 13926 objects, 2005344 bytes
1.4% package_request 21137 objects, 1860056 bytes
1.3% vocabulary_entry_array 161 x 100 = 16100 objects, 1808352 bytes
1.1% match_trie_array 11 x 1000 = 11000 objects, 1496352 bytes
1.1% inter_symbols_table 26569 objects, 1487864 bytes
1.0% i6_schema_array 23 x 100 = 2300 objects, 1380736 bytes
0.9% inter_package 26569 objects, 1275312 bytes
0.9% dict_entry_array 386 x 100 = 38600 objects, 1247552 bytes
0.8% map_data 670 objects, 1125600 bytes
0.8% id_body 941 objects, 1076504 bytes
0.7% adjective_meaning 202 objects, 1000304 bytes
0.7% excerpt_meaning 3100 objects, 967200 bytes
0.6% production 3872 objects, 898304 bytes
0.6% ptoken 8382 objects, 871728 bytes
0.6% grammatical_usage 3611 objects, 866640 bytes
0.6% individual_form 2561 objects, 860496 bytes
0.6% inter_schema_node 8891 objects, 853536 bytes
0.4% unary_predicate_array 16 x 1000 = 16000 objects, 640512 bytes
0.3% scan_directory 112 objects, 462336 bytes
0.3% local_variable_array 47 x 100 = 4700 objects, 452704 bytes
0.3% verb_usage 1128 objects, 388032 bytes
0.2% rule 469 objects, 367696 bytes
0.2% verb_form 386 objects, 348944 bytes
0.2% dictionary 6619 objects, 317712 bytes
0.2% noun 2380 objects, 285600 bytes
0.2% compilation_subtask 3346 objects, 267680 bytes
0.2% inter_annotation_array 2 x 8192 = 16384 objects, 262208 bytes
0.2% inference_subject 665 objects, 260680 bytes
0.1% vanilla_function 3678 objects, 235392 bytes
0.1% binary_predicate 321 objects, 169488 bytes
0.1% hierarchy_location 1119 objects, 161136 bytes
0.1% linguistic_stock_item 3316 objects, 159168 bytes
0.1% rule_family_data 400 objects, 147200 bytes
0.1% nonterminal 760 objects, 139840 bytes
0.1% nascent_array 2123 objects, 135872 bytes
---- documentation_ref 1273 objects, 112024 bytes
---- inference 1703 objects, 108992 bytes
---- imperative_defn 1377 objects, 99144 bytes
@ -235,25 +235,25 @@ Total memory consumption was 379108K = 370 MB
---- kind_template_definition 1 object, 40 bytes
---- loop_over_scope 1 object, 40 bytes
33.3% was used for memory not allocated for objects:
100.0% was used for memory not allocated for objects:
19.7% text stream storage 76626784 bytes in 452148 claims
1.1% dictionary storage 4544512 bytes in 6619 claims
59.2% text stream storage 76627132 bytes in 452150 claims
3.5% dictionary storage 4544512 bytes in 6619 claims
---- sorting 744 bytes in 3 claims
1.8% source text 7200000 bytes in 3 claims
2.7% source text details 10800000 bytes in 2 claims
---- documentation fragments 262144 bytes in 1 claim
5.5% source text 7200000 bytes in 3 claims
8.3% source text details 10800000 bytes in 2 claims
0.2% documentation fragments 262144 bytes in 1 claim
---- linguistic stock array 81920 bytes in 2 claims
---- small word set array 105600 bytes in 22 claims
1.1% inter symbols storage 4522288 bytes in 27921 claims
4.3% inter bytecode storage 16767476 bytes in 14 claims
1.6% inter links storage 6222976 bytes in 11 claims
---- inter tree location list storage 191232 bytes in 32 claims
0.4% instance-of-kind counting 1695204 bytes in 1 claim
3.4% inter symbols storage 4522288 bytes in 27921 claims
12.9% inter bytecode storage 16767476 bytes in 14 claims
4.8% inter links storage 6222976 bytes in 11 claims
0.1% inter tree location list storage 191232 bytes in 32 claims
1.3% instance-of-kind counting 1695204 bytes in 1 claim
---- compilation workspace for objects 21856 bytes in 25 claims
---- lists for type-checking invocations 16000 bytes in 1 claim
---- code generation workspace for objects 1336 bytes in 4 claims
---- emitter array storage 279776 bytes in 1995 claims
0.2% emitter array storage 279776 bytes in 1995 claims
19.8% was overhead - 77043072 bytes = 75237K = 73 MB
-140.-5% was overhead - -181824128 bytes = -177562K = -173 MB

View file

@ -1,7 +1,7 @@
100.0% in inform7 run
68.2% in compilation to Inter
47.4% in //Sequence::undertake_queued_tasks//
4.5% in //MajorNodes::pre_pass//
68.6% in compilation to Inter
47.7% in //Sequence::undertake_queued_tasks//
4.7% in //MajorNodes::pre_pass//
3.4% in //MajorNodes::pass_1//
2.4% in //RTPhrasebook::compile_entries//
1.7% in //ImperativeDefinitions::assess_all//
@ -17,17 +17,17 @@
0.1% in //RTKindConstructors::compile_permissions//
0.1% in //Task::make_built_in_kind_constructors//
0.1% in //World::stages_II_and_III//
2.5% not specifically accounted for
28.9% in running Inter pipeline
2.3% not specifically accounted for
28.5% in running Inter pipeline
10.2% in step 14/14: generate inform6 -> auto.inf
7.7% in step 5/14: load-binary-kits
6.4% in step 6/14: make-synoptic-module
1.5% in step 9/14: make-identifiers-unique
7.6% in step 5/14: load-binary-kits
6.2% in step 6/14: make-synoptic-module
1.3% in step 9/14: make-identifiers-unique
0.3% in step 12/14: eliminate-redundant-operations
0.3% in step 4/14: compile-splats
0.3% in step 7/14: shorten-wiring
0.3% in step 8/14: detect-indirect-calls
0.1% in step 11/14: eliminate-redundant-labels
1.4% not specifically accounted for
2.4% in supervisor
0.4% not specifically accounted for
2.2% in supervisor
0.6% not specifically accounted for

View file

@ -371,6 +371,8 @@ diagrams:
cp -f inform7/Internal/Pipelines/link.interpipeline inter/pipeline-module/Figures
cp -f inform7/Internal/Pipelines/optimise.interpipeline inter/pipeline-module/Figures
cp -f inform7/Internal/Pipelines/build-kit.interpipeline inter/pipeline-module/Figures
$(INBUILDX) -help >inbuild/Figures/help.txt
$(INFORM7X) -help >inform7/Figures/help.txt
$(INTERX) -help >inter/Figures/help.txt
{repeat-tools-block:ctools}
@ -434,7 +436,7 @@ docs/$(@LEAF)-module/index.html: {dependent-files-for-module}@
{end-block}
.PHONY: prepages
prepages: diagnostics docs/index.html docs/compiler.html docs/extensions.html docs/other.html docs/units.html
prepages: diagnostics docs/index.html docs/compiler.html docs/extensions.html docs/other.html docs/units.html docs/services.html docs/inform6.html
docs/index.html: docs-src/index.inweb docs-src/nav.html
$(INWEBX) -colony $(COLONY) -member overview -weave
@ -442,6 +444,12 @@ docs/index.html: docs-src/index.inweb docs-src/nav.html
docs/compiler.html: docs-src/compiler.inweb docs-src/navc.html
$(INWEBX) -colony $(COLONY) -member compiler -weave
docs/services.html: docs-src/services.inweb docs-src/navc.html
$(INWEBX) -colony $(COLONY) -member services -weave
docs/inform6.html: docs-src/inform6.inweb docs-src/navc.html
$(INWEBX) -colony $(COLONY) -member inform6 -weave
docs/extensions.html: docs-src/extensions.inweb docs-src/navk.html
$(INWEBX) -colony $(COLONY) -member extensions -weave
@ -456,6 +464,8 @@ forceprepages: diagnostics
rm -f docs/*.html
$(INWEBX) -colony $(COLONY) -member overview -weave
$(INWEBX) -colony $(COLONY) -member compiler -weave
$(INWEBX) -colony $(COLONY) -member services -weave
$(INWEBX) -colony $(COLONY) -member inform6 -weave
$(INWEBX) -colony $(COLONY) -member extensions -weave
$(INWEBX) -colony $(COLONY) -member other -weave
$(INWEBX) -colony $(COLONY) -member units -weave