From 6ad202340d1a176d8038b20a0f785b8d5491e643 Mon Sep 17 00:00:00 2001 From: Christophe Rhodes Date: Wed, 5 Mar 2014 10:36:30 +0000 Subject: [PATCH] figures OK, give up on finding where I saw the MOP design space figure and make one. --- els-specializers.org | 36 ++++++++++-------- figures/dispatch-relationships.pdf | Bin 0 -> 28533 bytes .../dispatch-relationships.tikz | 4 +- figures/mop-design-space.pdf | Bin 0 -> 21178 bytes figures/mop-design-space.tikz | 24 ++++++++++++ 5 files changed, 46 insertions(+), 18 deletions(-) create mode 100644 figures/dispatch-relationships.pdf rename dispatch-relationships.tikz => figures/dispatch-relationships.tikz (89%) create mode 100644 figures/mop-design-space.pdf create mode 100644 figures/mop-design-space.tikz diff --git a/els-specializers.org b/els-specializers.org index 714abb6..74b2649 100644 --- a/els-specializers.org +++ b/els-specializers.org @@ -81,6 +81,11 @@ efficient. incorporating substantial fractions of the Metaobject Protocol as described. + #+CAPTION: MOP Design Space + #+LABEL: fig:mopdesign + #+ATTR_LATEX: width=\linewidth float + [[file:figures/mop-design-space.pdf]] + Although it has stood the test of time, the CLOS MOP is neither without issues (e.g. semantic problems with =make-method-lambda= \cite{Costanza.Herzeel:2008}; useful functions such as @@ -89,12 +94,16 @@ efficient. implement all conceivable variations of object-oriented behaviour. While metaprogramming offers some possibilities for customization of the object system behaviour, those possibilities cannot extend - arbitrarily in all directions. There is still an expectation that - functionality is implemented with methods on generic functions, - acting on objects with slots; it is not possible, for example, to - transparently implement support for “message not understood” as in - the message-passing paradigm, because the analogue of messages - (generic functions) need to be defined before they are used. + arbitrarily in all directions (conceptually, if a given object + system is a point in design space, then a MOP for that object system + allows exploration of a region of design space around that point; + see figure \ref{fig:mopdesign}). In the case of the CLOS MOP, there is + still an expectation that functionality is implemented with methods + on generic functions, acting on objects with slots; it is not + possible, for example, to transparently implement support for + “message not understood” as in the message-passing paradigm, because + the analogue of messages (generic functions) need to be defined + before they are used. Nevertheless, the MOP is flexible, and is used for a number of things, including: documentation generation (where introspection in @@ -104,13 +113,6 @@ efficient. symbols); and programmatic construction of metaobjects, for example for IDL compilers and model transformations. - [ XXX: A picture on MOP flexibility here would be good; I have in my mind - one where an object system is a point and the MOP opens up a blob - around that point, and I'm sure I've seen it somewhere but I can't - remember where. Alternatively, there's Kiczales et al "MOPs: why we - want them and what else they can do", fig. 2 ] - [AMOP, page 5] paints that picture, but again, only using words :) - One area of functionality where there is scope for customization by the metaprogrammer is in the mechanics and semantics of method applicability and dispatch. While in principle AMOP allows @@ -143,8 +145,8 @@ efficient. #+CAPTION: Dispatch Comparison #+LABEL: fig:dispatch - #+ATTR_LATEX: width=0.9\linewidth float - [[file:figures/dispatch-comparison.pdf]] + #+ATTR_LATEX: width=\linewidth float + [[file:figures/dispatch-relationships.pdf]] The remaining sections in this paper can be read in any order. We give some motivating examples in section [[#Examples]], including @@ -651,8 +653,10 @@ unbound variables. required arguments in a list to use as a key in an =equal= hash-table. - [XXX could we actually compute a suitable hash key using the +#+begin_comment + [could we actually compute a suitable hash key using the generalizer's class name and initargs?] +#+end_comment *** COMMENT - [X] =generalizer-of-using-class= (NB class of gf not class of object) diff --git a/figures/dispatch-relationships.pdf b/figures/dispatch-relationships.pdf new file mode 100644 index 0000000000000000000000000000000000000000..f90eb1a80531feaf3ac5418dddfe166fb27db057 GIT binary patch literal 28533 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 literal 0 HcmV?d00001 diff --git a/dispatch-relationships.tikz b/figures/dispatch-relationships.tikz similarity index 89% rename from dispatch-relationships.tikz rename to figures/dispatch-relationships.tikz index 18f774f..db30ab9 100644 --- a/dispatch-relationships.tikz +++ b/figures/dispatch-relationships.tikz @@ -1,4 +1,4 @@ -\documentclass{article} +\documentclass{standalone} \usepackage{tikz} \usetikzlibrary{shapes.geometric} @@ -22,7 +22,7 @@ \draw[->,>=open triangle 60,red] (genspec.150) -- (genspec.150 |- specializer.south); \draw[dashed] (argument.south) |- node[right,near start] {\texttt{eql}} node[below,near end] {\texttt{eql-specializer-object}} (eql.east); - \draw[dashed] (argument.west) -- node[below] {\texttt{typep}} node[above] {\texttt{class-of}} (class.east); + \draw[dashed] (argument.west) -- node[below] {\texttt{subtypep}} node[above] {\texttt{class-of}} (class.east); \draw[red] (argument.north) -- node[right] {\texttt{\color{red}generalizer-of}} (generalizer.south); \draw[red] (generalizer.west) -- node[above] (sagp) {\texttt{\color{red}s-a-g-p}} (genspec.east); \node (specaccgenp) at (6,5.5) {\texttt{\footnotesize{\color{red}specializer-accepts-generalizer-p}}}; diff --git a/figures/mop-design-space.pdf b/figures/mop-design-space.pdf new file mode 100644 index 0000000000000000000000000000000000000000..445097f55466cf6b524edadfdf1698ce31ea74ec GIT binary patch literal 21178 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 literal 0 HcmV?d00001 diff --git a/figures/mop-design-space.tikz b/figures/mop-design-space.tikz new file mode 100644 index 0000000..d99a47b --- /dev/null +++ b/figures/mop-design-space.tikz @@ -0,0 +1,24 @@ +\documentclass{standalone} + +\usepackage{tikz} +\usetikzlibrary{shapes.symbols} +\usetikzlibrary{arrows} +\usetikzlibrary{calc} + +\begin{document} + +\begin{tikzpicture}[>=stealth] + \draw [->] (0,0) -- (0,5); + \draw [->] (0,0) -- (5,0); + \draw [->] (0,0) -- (0,0,5); + + \node[draw,red,cloud,minimum height=2cm,minimum width=2cm] (mop) at (3,4,3) {$\color{black}\bullet$}; + + \node (os) at (2.5,2,3) {object system}; + \draw (os) -- (mop.center); + + \node[red] (mspace) at (5,6,3) {MOP space}; + \draw[red] (mspace) -- (mop); +\end{tikzpicture} + +\end{document} \ No newline at end of file -- 2.39.5