docs -> doc

lol
This commit is contained in:
crumbtoo
2023-12-04 14:51:44 -07:00
parent cb6321fbf8
commit 6767bd0b4f
304 changed files with 29610 additions and 0 deletions

409
doc/build/html/commentary/stg.html vendored Normal file
View File

@@ -0,0 +1,409 @@
<!DOCTYPE html>
<html lang="en" data-content_root="../">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="viewport" content="width=device-width, initial-scale=1" />
<title>The Spineless Tagless G-Machine &#8212; rlp documentation</title>
<link rel="stylesheet" type="text/css" href="../_static/pygments.css?v=4f649999" />
<link rel="stylesheet" type="text/css" href="../_static/alabaster.css?v=039e1c02" />
<script src="../_static/documentation_options.js?v=5929fcd5"></script>
<script src="../_static/doctools.js?v=888ff710"></script>
<script src="../_static/sphinx_highlight.js?v=dc90522c"></script>
<link rel="index" title="Index" href="../genindex.html" />
<link rel="search" title="Search" href="../search.html" />
<link rel="prev" title="Lexing, Parsing, and Layouts" href="layout-lexing.html" />
<link rel="stylesheet" href="../_static/custom.css" type="text/css" />
<meta name="viewport" content="width=device-width, initial-scale=0.9, maximum-scale=0.9" />
</head><body>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body" role="main">
<section id="the-spineless-tagless-g-machine">
<h1>The <em>Spineless Tagless G-Machine</em><a class="headerlink" href="#the-spineless-tagless-g-machine" title="Link to this heading"></a></h1>
<p>WIP. This will hopefully be expanded into a thorough walkthrough of the state
machine.</p>
<p>Evaluation is complete when a single <code class="code docutils literal notranslate"><span class="pre">NNum</span></code> remains on the stack and the
dump is empty.</p>
<div class="math">
<p><img src="../_images/math/51b8ee3def56618c3d5c55841743d53ffbedbcfb.svg" alt="\transrule
{ a : \nillist
&amp; \nillist
&amp; h
\begin{bmatrix}
a : \mathtt{NNum} \; n
\end{bmatrix}
&amp; g
}
{ \mathtt{HALT}
}"/></p>
</div><p>Dereference an indirection passed as an argument to a function.</p>
<div class="math">
<p><img src="../_images/math/e91c8c9e0530c873480544a154b5156c1a3bc5cf.svg" alt="\transrule
{a : s &amp; d &amp; h
\begin{bmatrix}
a : \mathtt{NAp} \; a_1 \; a_2 \\
a_2 : \mathtt{NInd} \; a_3
\end{bmatrix} &amp; g}
{a : s &amp; d &amp; h[a : \mathtt{NAp} \; a_1 \; a_3] &amp; g}"/></p>
</div><p>Dereference an indirection on top of the stack.</p>
<div class="math">
<p><img src="../_images/math/7a5577f4835bea58fb5e61feccfb2cac76ad365a.svg" alt="\transrule
{p : s &amp; d &amp; h
\begin{bmatrix}
p : \mathtt{NInd} \; a
\end{bmatrix} &amp; g}
{a : s &amp; d &amp; h &amp; g}"/></p>
</div><p>Perform a unary operation <img class="math" src="../_images/math/996b14e88c00afb0c157a014c7b04c192a6667d8.svg" alt="o(n)" style="vertical-align: -5px"/> with internal <code class="code docutils literal notranslate"><span class="pre">Prim</span></code> constructor
<code class="code docutils literal notranslate"><span class="pre">O</span></code> on an argument in normal form.</p>
<div class="math">
<p><img src="../_images/math/758e69f9e44c00c28db11caa744ce8468e26062d.svg" alt="\transrule
{ f : a : s
&amp; d
&amp; h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{O} \\
a : \mathtt{NAp} \; f \; x \\
x : \mathtt{NNum} \; n
\end{bmatrix}
&amp; g
}
{ a : s
&amp; d
&amp; h
\begin{bmatrix}
a : \mathtt{NNum} \; (o(n))
\end{bmatrix}
&amp; g
}"/></p>
</div><p>Evaluate the argument of a unary operation with internal <code class="code docutils literal notranslate"><span class="pre">Prim</span></code>
constructor <code class="code docutils literal notranslate"><span class="pre">O</span></code>.</p>
<div class="math">
<p><img src="../_images/math/9264520765ac3abdf00f5cff93232ef8f436c08c.svg" alt="\transrule
{ f : a : \nillist
&amp; d
&amp; h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{O} \\
a : \mathtt{NAp} \; f \; x
\end{bmatrix}
&amp; g
}
{ x : \nillist
&amp; (f : a : \nillist) : d
&amp; h
&amp; g
}"/></p>
</div><p>Restore the stack when a sub-computation has completed.</p>
<div class="math">
<p><img src="../_images/math/8dd8da75ac6612b08aa1c953fe79f69d9614a370.svg" alt="\transrule
{ a : \nillist
&amp; s : d
&amp; h
\begin{bmatrix}
a : \mathtt{NNum} \; n
\end{bmatrix}
&amp; g
}
{ s
&amp; d
&amp; h
&amp; g
}"/></p>
</div><p>Reduce a supercombinator and update the root with the <img class="math" src="../_images/math/cc9ad1bf37cbb0cbc3156f31e10ce7d8148d5e06.svg" alt="\beta" style="vertical-align: -4px"/>-reduced form</p>
<div class="math">
<p><img src="../_images/math/34e91bc0685dd54adb3e06c06e6fc0cc4d8ad419.svg" alt="\transrule
{ a_0 : a_1 : \ldots : a_n : s
&amp; d
&amp; h
\begin{bmatrix}
a_0 : \mathtt{NSupercomb} \; [x_1,\ldots,x_n] \; e
\end{bmatrix}
&amp; g
}
{ a_n : s
&amp; d
&amp; h'
&amp; g
\\
&amp; \SetCell[c=3]{c}
\text{where } h' = \mathtt{instantiateU} \; e \; a_n \; h \; g
}"/></p>
</div><p>Perform a binary operation <img class="math" src="../_images/math/a86f901ae855d64263ac2ab365517c5a7e5ccd14.svg" alt="o(x,y)" style="vertical-align: -5px"/> associated with internal <code class="code docutils literal notranslate"><span class="pre">Prim</span></code>
constructor <code class="code docutils literal notranslate"><span class="pre">O</span></code> on two <code class="code docutils literal notranslate"><span class="pre">NNum</span></code> s both in normal form.</p>
<div class="math">
<p><img src="../_images/math/021357ee48ac0e35395fa99353083fee184026dd.svg" alt="\transrule
{ f : a_1 : a_2 : s
&amp; d
&amp; h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{O} \\
a_1 : \mathtt{NAp} \; f \; (\mathtt{NNum} \; x) \\
a_2 : \mathtt{NAp} \; a_1 \; (\mathtt{NNum} \; y)
\end{bmatrix}
&amp; g
}
{ a_2 : s
&amp; d
&amp; h
\begin{bmatrix}
a_2 : \mathtt{NNum} \; (o(x,y))
\end{bmatrix}
&amp; g
}"/></p>
</div><p>In a conditional primitive, perform the reduction if the condition has been
evaluated as True (<code class="code docutils literal notranslate"><span class="pre">NData</span> <span class="pre">1</span> <span class="pre">[]</span></code>).</p>
<div class="math">
<p><img src="../_images/math/0a0458d62ece3f6e5019d53d0245ff5facdc5fdf.svg" alt="\transrule
{ f : a_1 : a_2 : a_3 : s
&amp; d
&amp; h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{IfP} \\
c : \mathtt{NPrim} \; (\mathtt{NData} \; 1 \; \nillist) \\
a_1 : \mathtt{NAp} \; f \; c \\
a_2 : \mathtt{NAp} \; a_1 \; x \\
a_3 : \mathtt{NAp} \; a_2 \; y
\end{bmatrix}
&amp; g
}
{ x : s
&amp; d
&amp; h
&amp; g
}"/></p>
</div><p>In a conditional primitive, perform the reduction if the condition has been
evaluated as False (<code class="code docutils literal notranslate"><span class="pre">NData</span> <span class="pre">0</span> <span class="pre">[]</span></code>).</p>
<div class="math">
<p><img src="../_images/math/5acebcc879cae1694dcc537b99796e0dc0e0ff05.svg" alt="\transrule
{ f : a_1 : a_2 : a_3 : s
&amp; d
&amp; h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{IfP} \\
c : \mathtt{NPrim} \; (\mathtt{NData} \; 0 \; \nillist) \\
a_1 : \mathtt{NAp} \; f \; c \\
a_2 : \mathtt{NAp} \; a_1 \; x \\
a_3 : \mathtt{NAp} \; a_2 \; y
\end{bmatrix}
&amp; g
}
{ y : s
&amp; d
&amp; h
&amp; g
}"/></p>
</div><p>In a conditional primitive, evaluate the condition.</p>
<div class="math">
<p><img src="../_images/math/1d1d05c2792b02598e523fd646d6268749231320.svg" alt="\transrule
{ f : a_1 : \nillist
&amp; d
&amp; h
\begin{bmatrix}
f : \mathtt{NPrim} \; \mathtt{IfP} \\
a_1 : \mathtt{NAp} \; f \; x
\end{bmatrix}
&amp; g
}
{ x : \nillist
&amp; (f : a_1 : \nillist) : d
&amp; h
&amp; g
}"/></p>
</div><p>Construct <code class="code docutils literal notranslate"><span class="pre">NData</span></code> out of a constructor and its arguments</p>
<div class="math">
<p><img src="../_images/math/a540630fbb5173bbf2de2d38326e10e6977b2c18.svg" alt="\transrule
{ c : a_1 : \ldots : a_n : \nillist
&amp; d
&amp; h
\begin{bmatrix}
c : \mathtt{NPrim} \; (\mathtt{ConP} \; t \; n) \\
a_1 : \mathtt{NAp} \; c \; x_1 \\
\vdots \\
a_n : \mathtt{NAp} \; a_{n-1} \; x_n
\end{bmatrix}
&amp; g
}
{ a_n : \nillist
&amp; d
&amp; h
\begin{bmatrix}
a_n : \mathtt{NData} \; t \; [x_1, \ldots, x_n]
\end{bmatrix}
&amp; g
}"/></p>
</div><section id="pairs">
<h2>Pairs<a class="headerlink" href="#pairs" title="Link to this heading"></a></h2>
<p>Evaluate the first argument if necessary</p>
<div class="math">
<p><img src="../_images/math/1fc5e2a4ce5b523a6e99c0937d45b0f285461097.svg" alt="\transrule
{ c : a_1 : a_2 : \nillist
&amp; d
&amp; h
\begin{bmatrix}
c : \mathtt{NPrim} \; \mathtt{CasePairP} \\
p : \mathtt{NAp} \; \_ \: \_ \\
a_1 : \mathtt{NAp} \; c \; p \\
a_2 : \mathtt{NAp} \; a_2 \; f
\end{bmatrix}
&amp; g
}
{ p : \nillist
&amp; (a_1 : a_2 : \nillist) : d
&amp; h
&amp; g
}"/></p>
</div><p>Perform the reduction if the first argument is in normal form</p>
<div class="math">
<p><img src="../_images/math/d13e748def2419af7ed6d97286f8f8ba95d695ab.svg" alt="\transrule
{ c : a_1 : a_2 : s
&amp; d
&amp; h
\begin{bmatrix}
c : \mathtt{NPrim} \; \mathtt{CasePairP} \\
p : \mathtt{NData} \; 0 \; [x,y] \\
a_1 : \mathtt{NAp} \; c \; p \\
a_2 : \mathtt{NAp} \; a_1 \; f
\end{bmatrix}
&amp; g
}
{ a_1 : a_2 : s
&amp; d
&amp; h
\begin{bmatrix}
a_1 : \mathtt{NAp} \; f \; x \\
a_2 : \mathtt{NAp} \; a_1 \; y
\end{bmatrix}
&amp; g
}"/></p>
</div></section>
<section id="lists">
<h2>Lists<a class="headerlink" href="#lists" title="Link to this heading"></a></h2>
<p>Evaluate the scrutinee</p>
<div class="math">
<p><img src="../_images/math/f670f05da2f796ded634f483374c8523a2ed0ac4.svg" alt="\transrule
{ c : a_1 : a_2 : a_3 : \nillist
&amp; d
&amp; h
\begin{bmatrix}
c : \mathtt{NPrim} \; \mathtt{CaseListP} \\
a_1 : \mathtt{NAp} \; c \; x
\end{bmatrix}
&amp; g
}
{ x : \nillist
&amp; (a_1 : a_2 : a_3) : \nillist
&amp; h
&amp; g
}"/></p>
</div><p>If the scrutinee is <code class="code docutils literal notranslate"><span class="pre">Nil</span></code>, perform the appropriate reduction.</p>
<div class="math">
<p><img src="../_images/math/2bfab760cd5a82cd980862645b628ea4c2a97f34.svg" alt="\transrule
{ c : a_1 : a_2 : a_3 : s
&amp; d
&amp; h
\begin{bmatrix}
c : \mathtt{NPrim} \; \mathtt{CaseListP} \\
p : \mathtt{NData} \; 1 \; \nillist \\
a_1 : \mathtt{NAp} \; c \; p \\
a_2 : \mathtt{NAp} \; p \; f_\text{nil} \\
a_3 : \mathtt{NAp} \; a_2 \; f_\text{cons}
\end{bmatrix}
&amp; g
}
{ a_3 : s
&amp; d
&amp; h
\begin{bmatrix}
a_3 : \mathtt{NAp} \; f_\text{nil}
\end{bmatrix}
&amp; g
}"/></p>
</div></section>
</section>
</div>
</div>
</div>
<div class="sphinxsidebar" role="navigation" aria-label="main navigation">
<div class="sphinxsidebarwrapper">
<h1 class="logo"><a href="../index.html">rlp</a></h1>
<h3>Navigation</h3>
<p class="caption" role="heading"><span class="caption-text">Index</span></p>
<ul>
<li class="toctree-l1"><a class="reference internal" href="../glossary.html">Glossary</a></li>
</ul>
<p class="caption" role="heading"><span class="caption-text">Commentary</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="layout-lexing.html">Lexing, Parsing, and Layouts</a></li>
<li class="toctree-l1 current"><a class="current reference internal" href="#">The <em>Spineless Tagless G-Machine</em></a></li>
</ul>
<div class="relations">
<h3>Related Topics</h3>
<ul>
<li><a href="../index.html">Documentation overview</a><ul>
<li>Previous: <a href="layout-lexing.html" title="previous chapter">Lexing, Parsing, and Layouts</a></li>
</ul></li>
</ul>
</div>
<div id="searchbox" style="display: none" role="search">
<h3 id="searchlabel">Quick search</h3>
<div class="searchformwrapper">
<form class="search" action="../search.html" method="get">
<input type="text" name="q" aria-labelledby="searchlabel" autocomplete="off" autocorrect="off" autocapitalize="off" spellcheck="false"/>
<input type="submit" value="Go" />
</form>
</div>
</div>
<script>document.getElementById('searchbox').style.display = "block"</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="footer">
&copy;2023, madeleine sydney ślaga.
|
Powered by <a href="http://sphinx-doc.org/">Sphinx 7.2.6</a>
&amp; <a href="https://github.com/bitprophet/alabaster">Alabaster 0.7.13</a>
|
<a href="../_sources/commentary/stg.rst.txt"
rel="nofollow">Page source</a>
</div>
</body>
</html>