/usr/share/doc/sbcl/sbcl-internals/Discriminating-Functions.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 | <!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>Discriminating Functions (SBCL Internals)</title>
<meta name="description" content="Discriminating Functions (SBCL Internals)">
<meta name="keywords" content="Discriminating Functions (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="index.html#Top" rel="up" title="Top">
<link href="The-Initial-Discriminating-Function.html#The-Initial-Discriminating-Function" rel="next" title="The Initial Discriminating Function">
<link href="Additional-Notes.html#Additional-Notes" rel="prev" title="Additional Notes">
<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="Discriminating-Functions"></a>
<div class="header">
<p>
Next: <a href="Foreign-Linkage.html#Foreign-Linkage" accesskey="n" rel="next">Foreign Linkage</a>, Previous: <a href="Calling-Convention.html#Calling-Convention" accesskey="p" rel="prev">Calling Convention</a>, Up: <a href="index.html#Top" accesskey="u" rel="up">Top</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>]</p>
</div>
<hr>
<a name="Discriminating-Functions-1"></a>
<h2 class="chapter">3 Discriminating Functions</h2>
<table class="menu" border="0" cellspacing="0">
<tr><td align="left" valign="top">• <a href="The-Initial-Discriminating-Function.html#The-Initial-Discriminating-Function" accesskey="1">The Initial Discriminating Function</a>:</td><td> </td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">• <a href="Method_002dBased-Discriminating-Functions.html#Method_002dBased-Discriminating-Functions" accesskey="2">Method-Based Discriminating Functions</a>:</td><td> </td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">• <a href="Accessor-Discriminating-Functions.html#Accessor-Discriminating-Functions" accesskey="3">Accessor Discriminating Functions</a>:</td><td> </td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">• <a href="Cacheing-and-Dispatch-Functions.html#Cacheing-and-Dispatch-Functions" accesskey="4">Cacheing and Dispatch Functions</a>:</td><td> </td><td align="left" valign="top">
</td></tr>
<tr><td align="left" valign="top">• <a href="The-Cacheing-Mechanism.html#The-Cacheing-Mechanism" accesskey="5">The Cacheing Mechanism</a>:</td><td> </td><td align="left" valign="top">
</td></tr>
</table>
<p>The Common Lisp Object System specifies a great deal of run-time
customizeability, such as class redefinition, generic function and
method redefinition, addition and removal of methods and redefinitions
of method combinations. The additional flexibility defined by the
Metaobject Protocol, specifying the generic functions called to achieve
the effects of CLOS operations (and allowing many of them to be
overridden by the user) makes any form of optimization seem intractable.
And yet such optimization is necessary to achieve reasonable
performance: the MOP specifies that a slot access looks up the class of
the object, and the slot definition from that class and the slot name,
and then invokes a generic function specialized on those three
arguments. This is clearly going to act against the user’s intuition
that a slot access given an instance should be relatively fast.
</p>
<p>The optimizations performed cannot be done wholly at compile-time,
however, thanks to all of these possibilities for run-time redefinition
and extensibility. This section describes the optimizations performed
in SBCL’s CLOS implementation in computing and calling the effective
method for generic functions.
</p>
</body>
</html>
|