doc/concepts.tex: Emphasize a defining occurrence of `methods'.
[sod] / doc / concepts.tex
index 8e774fe..95a0891 100644 (file)
@@ -78,11 +78,11 @@ and a C value being returned to the sender.
 
 Every object is a \emph{direct instance} of exactly one \emph{class}.  The
 class determines which slots its instances have, which messages its instances
 
 Every object is a \emph{direct instance} of exactly one \emph{class}.  The
 class determines which slots its instances have, which messages its instances
-can be sent, and which methods are invoked when those messages are received.
-The Sod translator's main job is to read class definitions and convert them
-into appropriate C declarations, tables, and functions.  An object cannot
-(usually) change its direct class, and the direct class of an object is not
-affected by, for example, the static type of a pointer to it.
+can be sent, and which \emph{methods} are invoked when those messages are
+received.  The Sod translator's main job is to read class definitions and
+convert them into appropriate C declarations, tables, and functions.  An
+object cannot (usually) change its direct class, and the direct class of an
+object is not affected by, for example, the static type of a pointer to it.
 
 If an object~$x$ is a direct instance of some class~$C$, then we say that $C$
 is \emph{the class of}~$x$.  Note that the class of an object is a property
 
 If an object~$x$ is a direct instance of some class~$C$, then we say that $C$
 is \emph{the class of}~$x$.  Note that the class of an object is a property
@@ -537,7 +537,7 @@ Keyword arguments can be provided in three ways.
 \end{enumerate}
 
 Perhaps surprisingly, keyword arguments have a relatively small performance
 \end{enumerate}
 
 Perhaps surprisingly, keyword arguments have a relatively small performance
-impact.  On the author's aging laptop, a call to a simple function, passing
+impact.  On the author's ageing laptop, a call to a simple function, passing
 two out of three keyword arguments, takes about 30 cycles longer than calling
 a standard function which just takes integer arguments.  On the other hand,
 quite a lot of code is involved in decoding keyword arguments, so code size
 two out of three keyword arguments, takes about 30 cycles longer than calling
 a standard function which just takes integer arguments.  On the other hand,
 quite a lot of code is involved in decoding keyword arguments, so code size
@@ -1072,7 +1072,14 @@ follows.
   initializers, \emph{and} the sender supplied a value for one or more of the
   corresponding effective initargs, then the value of the most specific such
   initarg is stored in the slot.  (For this purpose, initargs defined earlier
   initializers, \emph{and} the sender supplied a value for one or more of the
   corresponding effective initargs, then the value of the most specific such
   initarg is stored in the slot.  (For this purpose, initargs defined earlier
-  in a class definition are more specific than initargs defined later.)
+  in a class definition are more specific than initargs defined
+  later.)\footnote{%
+    This is very different from the CLOS behaviour, in which a slot is
+    initialized from the first applicable initarg in the argument list.
+    Sod's keyword-argument machinery works in two stages: firstly, the
+    arguments values are collected into a structure on entry into an
+    effective method, which loses track of the order in which the arguments
+    were passed; and only then are the direct methods invoked.}
 
 \item Otherwise, if there are any slot initializers defined which include an
   initializer expression, then the initializer expression from the most
 
 \item Otherwise, if there are any slot initializers defined which include an
   initializer expression, then the initializer expression from the most
@@ -1278,7 +1285,7 @@ functions.
 Metaobject classes are chosen in a fairly standard way.
 \begin{itemize}
 \item All metaobject definitions support a symbol-valued property, usually
 Metaobject classes are chosen in a fairly standard way.
 \begin{itemize}
 \item All metaobject definitions support a symbol-valued property, usually
-  named @|@<thing>_class| (e.g., @|slot_class|, @|method_class|), which sets
+  named @|@<thing>{}_class| (e.g., @|slot_class|, @|method_class|), which sets
   the metaobject class explicitly.  (The class for a class metaobject is
   taken from the @|lisp_class| property, because @|class_class| seems less
   meaningful.)
   the metaobject class explicitly.  (The class for a class metaobject is
   taken from the @|lisp_class| property, because @|class_class| seems less
   meaningful.)