/usr/share/doc/sbcl/sbcl-internals/The-Initial-Discriminating-Function.html is in sbcl-doc 2:1.4.5-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- This manual is part of the SBCL software system. See the
README file for more information.
This manual is in the public domain and is provided with absolutely no
warranty. See the COPYING and CREDITS files for more
information. -->
<!-- Created by GNU Texinfo 6.5, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>The Initial Discriminating Function (SBCL Internals)</title>
<meta name="description" content="The Initial Discriminating Function (SBCL Internals)">
<meta name="keywords" content="The Initial Discriminating Function (SBCL Internals)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html#Top" rel="start" title="Top">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Discriminating-Functions.html#Discriminating-Functions" rel="up" title="Discriminating Functions">
<link href="Method_002dBased-Discriminating-Functions.html#Method_002dBased-Discriminating-Functions" rel="next" title="Method-Based Discriminating Functions">
<link href="Discriminating-Functions.html#Discriminating-Functions" rel="prev" title="Discriminating Functions">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>
</head>
<body lang="en">
<a name="The-Initial-Discriminating-Function"></a>
<div class="header">
<p>
Next: <a href="Method_002dBased-Discriminating-Functions.html#Method_002dBased-Discriminating-Functions" accesskey="n" rel="next">Method-Based Discriminating Functions</a>, Up: <a href="Discriminating-Functions.html#Discriminating-Functions" accesskey="u" rel="up">Discriminating Functions</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
</div>
<hr>
<a name="The-Initial-Discriminating-Function-1"></a>
<h3 class="section">3.1 The Initial Discriminating Function</h3>
<a name="index-compute_002ddiscriminating_002dfunction"></a>
<a name="index-sb_002dmop_003acompute_002ddiscriminating_002dfunction"></a>
<p>The system method on <code>SB-MOP:COMPUTE-DISCRIMINATING-FUNCTION</code>,
under most circumstances, returns a function which closes over a
structure of type <code>SB-PCL::INITIAL</code>, and which calls
<code>SB-PCL::INITIAL-DFUN</code>. This discriminating function is
responsible for implementing the computation of the applicable methods,
the effective method, and thence the result of the call to the generic
function. In addition, it implements optimization of these steps, based
on the arguments it has been called with since the discriminating
function was installed and the methods of the generic function.
</p>
<div class="float"><a name="fig_003adfun_002dtransitions"></a>
<img src="discriminating-functions.png" alt="discriminating-functions">
<div class="float-caption"><p><strong>Figure 3.1
</strong></p></div></div>
<p>For each substantive change of the generic function (such as addition or
removal of a method, or other reinitialization) the discriminating
function is reset to its initial state.
</p>
<p>The initial discriminating function can transition into a discriminating
function optimized for the methods on the generic function
(<code>SB-PCL::NO-METHODS</code>, <code>SB-PCL::DEFAULT-METHOD-ONLY</code>,
<code>SB-PCL::CONSTANT-VALUE</code>), for slot access
(<code>SB-PCL::ONE-CLASS</code>, <code>SB-PCL::TWO-CLASS</code>,
<code>SB-PCL::ONE-INDEX</code>, <code>SB-PCL::N-N</code><a name="DOCF1" href="#FOOT1"><sup>1</sup></a>), or for dispatch based
on its arguments (<code>SB-PCL::CACHING</code>, <code>SB-PCL::DISPATCH</code>).
Those in the second category can transition into the third, or into a
<code>SB-PCL::CHECKING</code> state where the choice between
<code>SB-PCL::CACHING</code> and <code>SB-PCL::DISPATCH</code> has not yet been
made.
</p>
<p>The possible transitions are shown in <a href="#fig_003adfun_002dtransitions">Figure 3.1</a>.
</p>
<div class="footnote">
<hr>
<h4 class="footnotes-heading">Footnotes</h4>
<h3><a name="FOOT1" href="#DOCF1">(1)</a></h3>
<p>Would be better
named as <code>M-N</code>, as there is no requirement for the number of
classes and number of indices to be the same.</p>
</div>
</body>
</html>
|