1
0
Fork 0
cl-sites/guile.html_node/MOP-Specification.html
2024-12-17 12:49:28 +01:00

97 lines
4.3 KiB
HTML

<!DOCTYPE html>
<html>
<!-- Created by GNU Texinfo 7.1, https://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<!-- This manual documents Guile version 3.0.10.
Copyright (C) 1996-1997, 2000-2005, 2009-2023 Free Software Foundation,
Inc.
Copyright (C) 2021 Maxime Devos
Copyright (C) 2024 Tomas Volf
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License." -->
<title>MOP Specification (Guile Reference Manual)</title>
<meta name="description" content="MOP Specification (Guile Reference Manual)">
<meta name="keywords" content="MOP Specification (Guile Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content=".texi2any-real">
<meta name="viewport" content="width=device-width,initial-scale=1">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="The-Metaobject-Protocol.html" rel="up" title="The Metaobject Protocol">
<link href="Instance-Creation-Protocol.html" rel="next" title="Instance Creation Protocol">
<link href="Metaclasses.html" rel="prev" title="Metaclasses">
<style type="text/css">
<!--
a.copiable-link {visibility: hidden; text-decoration: none; line-height: 0em}
span:hover a.copiable-link {visibility: visible}
ul.mark-bullet {list-style-type: disc}
-->
</style>
<link rel="stylesheet" type="text/css" href="https://www.gnu.org/software/gnulib/manual.css">
</head>
<body lang="en">
<div class="subsection-level-extent" id="MOP-Specification">
<div class="nav-panel">
<p>
Next: <a href="Instance-Creation-Protocol.html" accesskey="n" rel="next">Instance Creation Protocol</a>, Previous: <a href="Metaclasses.html" accesskey="p" rel="prev">Metaclasses</a>, Up: <a href="The-Metaobject-Protocol.html" accesskey="u" rel="up">The Metaobject Protocol</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<h4 class="subsection" id="MOP-Specification-1"><span>8.11.3 MOP Specification<a class="copiable-link" href="#MOP-Specification-1"> &para;</a></span></h4>
<p>The aim of the MOP specification in this chapter is to specify all the
customizable generic function invocations that can be made by the standard
GOOPS syntax, procedures and methods, and to explain the protocol for
customizing such invocations.
</p>
<p>A generic function invocation is customizable if the types of the
arguments to which it is applied are not completely determined by the
lexical context in which the invocation appears. For example, the
<code class="code">(initialize <var class="var">instance</var> <var class="var">initargs</var>)</code> invocation in the
default <code class="code">make-instance</code> method is customizable, because the type of
the <code class="code"><var class="var">instance</var></code> argument is determined by the class that was
passed to <code class="code">make-instance</code>.
</p>
<p>(Whereas &mdash; to give a counter-example &mdash; the <code class="code">(make &lt;generic&gt;
#:name ',name)</code> invocation in <code class="code">define-generic</code> is not customizable,
because all of its arguments have lexically determined types.)
</p>
<p>When using this rule to decide whether a given generic function invocation
is customizable, we ignore arguments that are expected to be handled in
method definitions as a single &ldquo;rest&rdquo; list argument.
</p>
<p>For each customizable generic function invocation, the <em class="dfn">invocation
protocol</em> is explained by specifying
</p>
<ul class="itemize mark-bullet">
<li>what, conceptually, the applied method is intended to do
</li><li>what assumptions, if any, the caller makes about the applied method&rsquo;s side
effects
</li><li>what the caller expects to get as the applied method&rsquo;s return value.
</li></ul>
</div>
</body>
</html>