<html>
<head>
<style><!--
.hmmessage P
{
margin:0px;
padding:0px
}
body.hmmessage
{
font-size: 12pt;
font-family:Calibri
}
--></style></head>
<body class='hmmessage'><div dir='ltr'><font face="Calibri, sans-serif" size="3">It is not pervasive.</font><div style="font-family: Calibri, sans-serif; font-size: 12pt; ">It is like one line in about six files. M3CG.T => M3CG_Ops.Publics.</div><div style="font-family: Calibri, sans-serif; font-size: 12pt; "><br></div><div style="font-family: Calibri, sans-serif; font-size: 12pt; "><br></div><div style="font-family: Calibri, sans-serif; font-size: 12pt; ">I guess you are saying that M3CG.T is merely the extremely abstract ROOT, where M3CG_Ops.Public has a bunch of methods? Then I might argue that M3CG.T is overly abstract -- it is like void* instead of pointer just with a bunch of methods.</div><div style="font-family: Calibri, sans-serif; font-size: 12pt; "><br></div><div style="font-family: Calibri, sans-serif; font-size: 12pt; "><br></div><div style="font-family: Calibri, sans-serif; font-size: 12pt; ">This isn't quite right, doesn't compilte, but rougly:</div><div style="font-family: Calibri, sans-serif; font-size: 12pt; "><br></div><div><div><font face="Calibri, sans-serif">Index: M3CG_BinRd.i3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_BinRd.i3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.2</font></div><div><font face="Calibri, sans-serif">diff -u -r1.2 M3CG_BinRd.i3</font></div><div><font face="Calibri, sans-serif">--- M3CG_BinRd.i3<span class="Apple-tab-span" style="white-space:pre">  </span>12 Feb 2001 15:25:47 -0000<span class="Apple-tab-span" style="white-space:pre">  </span>1.2</font></div><div><font face="Calibri, sans-serif">+++ M3CG_BinRd.i3<span class="Apple-tab-span" style="white-space:pre">   </span>26 Sep 2012 15:34:32 -0000</font></div><div><font face="Calibri, sans-serif">@@ -3,9 +3,9 @@</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> INTERFACE M3CG_BinRd;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-IMPORT M3CG, Rd;</font></div><div><font face="Calibri, sans-serif">+IMPORT M3CG_Ops, Rd;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-PROCEDURE Inhale (rd: Rd.T;  cg: M3CG.T);</font></div><div><font face="Calibri, sans-serif">+PROCEDURE Inhale (rd: Rd.T;  cg: M3CG_Ops.Public);</font></div><div><font face="Calibri, sans-serif"> (* Parse the binary intermediate code M3CG calls from 'rd'</font></div><div><font face="Calibri, sans-serif">    and call 'cg' to implement them. *)</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">Index: M3CG_BinRd.m3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_BinRd.m3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.19</font></div><div><font face="Calibri, sans-serif">diff -u -r1.19 M3CG_BinRd.m3</font></div><div><font face="Calibri, sans-serif">--- M3CG_BinRd.m3<span class="Apple-tab-span" style="white-space:pre">  </span>4 Sep 2012 14:29:54 -0000<span class="Apple-tab-span" style="white-space:pre">   </span>1.19</font></div><div><font face="Calibri, sans-serif">+++ M3CG_BinRd.m3<span class="Apple-tab-span" style="white-space:pre">  </span>26 Sep 2012 15:34:32 -0000</font></div><div><font face="Calibri, sans-serif">@@ -20,7 +20,7 @@</font></div><div><font face="Calibri, sans-serif"> TYPE</font></div><div><font face="Calibri, sans-serif">   State = RECORD</font></div><div><font face="Calibri, sans-serif">     rd     : Rd.T;</font></div><div><font face="Calibri, sans-serif">-    cg     : M3CG.T;</font></div><div><font face="Calibri, sans-serif">+    cg     : M3CG_Ops.Public;</font></div><div><font face="Calibri, sans-serif">     buf    : InputBuffer;</font></div><div><font face="Calibri, sans-serif">     buf_len: CARDINAL;</font></div><div><font face="Calibri, sans-serif">     buf_ptr: CARDINAL;</font></div><div><font face="Calibri, sans-serif">@@ -200,7 +200,7 @@</font></div><div><font face="Calibri, sans-serif">     Cmd {Bop.fetch_and_xor,  fetch_and_xor}</font></div><div><font face="Calibri, sans-serif">   };</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-PROCEDURE Inhale (rd: Rd.T;  cg: M3CG.T) =</font></div><div><font face="Calibri, sans-serif">+PROCEDURE Inhale (rd: Rd.T;  cg: M3CG_Ops.Public) =</font></div><div><font face="Calibri, sans-serif">   VAR s: State;  op: M3CG.Name;  cmd: INTEGER;</font></div><div><font face="Calibri, sans-serif">   BEGIN</font></div><div><font face="Calibri, sans-serif">     s.rd      := rd;</font></div><div><font face="Calibri, sans-serif">Index: M3CG_BinWr.i3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_BinWr.i3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.2</font></div><div><font face="Calibri, sans-serif">diff -u -r1.2 M3CG_BinWr.i3</font></div><div><font face="Calibri, sans-serif">--- M3CG_BinWr.i3<span class="Apple-tab-span" style="white-space:pre"> </span>12 Feb 2001 15:25:47 -0000<span class="Apple-tab-span" style="white-space:pre">  </span>1.2</font></div><div><font face="Calibri, sans-serif">+++ M3CG_BinWr.i3<span class="Apple-tab-span" style="white-space:pre">   </span>26 Sep 2012 15:34:32 -0000</font></div><div><font face="Calibri, sans-serif">@@ -3,9 +3,9 @@</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> INTERFACE M3CG_BinWr;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-IMPORT M3CG, Wr;</font></div><div><font face="Calibri, sans-serif">+IMPORT M3CG_Ops, Wr;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-PROCEDURE New (wr: Wr.T): M3CG.T;</font></div><div><font face="Calibri, sans-serif">+PROCEDURE New (wr: Wr.T): M3CG_Ops.Public;</font></div><div><font face="Calibri, sans-serif"> (* returns a fresh, initialized code generator that writes its</font></div><div><font face="Calibri, sans-serif">    calls as binary intermediate code on 'wr'.  See M3CG_Binary</font></div><div><font face="Calibri, sans-serif">    for the binary format.  *)</font></div><div><font face="Calibri, sans-serif">Index: M3CG_BinWr.m3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_BinWr.m3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.23</font></div><div><font face="Calibri, sans-serif">diff -u -r1.23 M3CG_BinWr.m3</font></div><div><font face="Calibri, sans-serif">--- M3CG_BinWr.m3<span class="Apple-tab-span" style="white-space:pre">    </span>4 Sep 2012 15:20:09 -0000<span class="Apple-tab-span" style="white-space:pre">   </span>1.23</font></div><div><font face="Calibri, sans-serif">+++ M3CG_BinWr.m3<span class="Apple-tab-span" style="white-space:pre">  </span>26 Sep 2012 15:34:32 -0000</font></div><div><font face="Calibri, sans-serif">@@ -27,7 +27,7 @@</font></div><div><font face="Calibri, sans-serif">   END;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> TYPE</font></div><div><font face="Calibri, sans-serif">-  U = M3CG.T OBJECT</font></div><div><font face="Calibri, sans-serif">+  U = M3CG_Ops.Public OBJECT</font></div><div><font face="Calibri, sans-serif">         wr            : Wr.T := NIL;</font></div><div><font face="Calibri, sans-serif">         buf           : M3Buf.T := NIL;</font></div><div><font face="Calibri, sans-serif">         buf_len       : INTEGER := 0;</font></div><div><font face="Calibri, sans-serif">@@ -375,7 +375,7 @@</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> (*---------------------------------------------------------------------------*)</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-PROCEDURE New (output: Wr.T): M3CG.T =</font></div><div><font face="Calibri, sans-serif">+PROCEDURE New (output: Wr.T): M3CG_Ops.Public =</font></div><div><font face="Calibri, sans-serif">   VAR mbuf := M3Buf.New ();</font></div><div><font face="Calibri, sans-serif">   BEGIN</font></div><div><font face="Calibri, sans-serif">     M3Buf.AttachDrain (mbuf, output);</font></div><div><font face="Calibri, sans-serif">Index: M3CG_Check.i3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_Check.i3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.1.1.1</font></div><div><font face="Calibri, sans-serif">diff -u -r1.1.1.1 M3CG_Check.i3</font></div><div><font face="Calibri, sans-serif">--- M3CG_Check.i3<span class="Apple-tab-span" style="white-space:pre">     </span>14 Jan 2001 13:40:37 -0000<span class="Apple-tab-span" style="white-space:pre">  </span>1.1.1.1</font></div><div><font face="Calibri, sans-serif">+++ M3CG_Check.i3<span class="Apple-tab-span" style="white-space:pre">       </span>26 Sep 2012 15:34:32 -0000</font></div><div><font face="Calibri, sans-serif">@@ -7,11 +7,11 @@</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> INTERFACE M3CG_Check;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-IMPORT M3CG;</font></div><div><font face="Calibri, sans-serif">+IMPORT M3CG_Ops;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-PROCEDURE New (child: M3CG.T;</font></div><div><font face="Calibri, sans-serif">+PROCEDURE New (child: M3CG_Ops.Public;</font></div><div><font face="Calibri, sans-serif">                clean_jumps, clean_stores: BOOLEAN;</font></div><div><font face="Calibri, sans-serif">-               nested_calls, nested_procs: BOOLEAN): M3CG.T;</font></div><div><font face="Calibri, sans-serif">+               nested_calls, nested_procs: BOOLEAN): M3CG_Ops.Public;</font></div><div><font face="Calibri, sans-serif"> (* returns a fresh, initialized code generator that passes its calls</font></div><div><font face="Calibri, sans-serif">    to 'child' and checks that the stream obeys the M3CG restrictions.</font></div><div><font face="Calibri, sans-serif">    If 'clean_jumps', it also checks that the stack is empty at every</font></div><div><font face="Calibri, sans-serif">Index: M3CG_Check.m3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_Check.m3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.17</font></div><div><font face="Calibri, sans-serif">diff -u -r1.17 M3CG_Check.m3</font></div><div><font face="Calibri, sans-serif">--- M3CG_Check.m3<span class="Apple-tab-span" style="white-space:pre">     </span>4 Sep 2012 14:47:43 -0000<span class="Apple-tab-span" style="white-space:pre">   </span>1.17</font></div><div><font face="Calibri, sans-serif">+++ M3CG_Check.m3<span class="Apple-tab-span" style="white-space:pre">  </span>26 Sep 2012 15:34:33 -0000</font></div><div><font face="Calibri, sans-serif">@@ -32,7 +32,7 @@</font></div><div><font face="Calibri, sans-serif">   };</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> TYPE</font></div><div><font face="Calibri, sans-serif">-  U = M3CG.T OBJECT</font></div><div><font face="Calibri, sans-serif">+  U = M3CG_Ops.Public OBJECT</font></div><div><font face="Calibri, sans-serif">         clean_stores := FALSE;</font></div><div><font face="Calibri, sans-serif">         clean_jumps  := FALSE;</font></div><div><font face="Calibri, sans-serif">         nested_calls := TRUE;</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_Ops.i3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.12</font></div><div><font face="Calibri, sans-serif">diff -u -r1.12 M3CG_Ops.i3</font></div><div><font face="Calibri, sans-serif">--- M3CG_Ops.i3<span class="Apple-tab-span" style="white-space:pre"> </span>16 Aug 2012 13:12:35 -0000<span class="Apple-tab-span" style="white-space:pre">  </span>1.12</font></div><div><font face="Calibri, sans-serif">+++ M3CG_Ops.i3<span class="Apple-tab-span" style="white-space:pre">    </span>26 Sep 2012 15:34:33 -0000</font></div><div><font face="Calibri, sans-serif">@@ -30,7 +30,7 @@</font></div><div><font face="Calibri, sans-serif">   Public = OBJECT</font></div><div><font face="Calibri, sans-serif"> (*------------------------------------------------ READONLY configuration ---*)</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-child: M3CG.T := NIL;</font></div><div><font face="Calibri, sans-serif">+child: Public := NIL;</font></div><div><font face="Calibri, sans-serif"> (* The default methods simply call the corresponding method in 'child',</font></div><div><font face="Calibri, sans-serif">    hence a vanilla 'M3CG.T' can be used as a filter where you override</font></div><div><font face="Calibri, sans-serif">    only the methods of interest. *)</font></div><div><font face="Calibri, sans-serif">Index: M3CG_Rd.i3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_Rd.i3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.1.1.1</font></div><div><font face="Calibri, sans-serif">diff -u -r1.1.1.1 M3CG_Rd.i3</font></div><div><font face="Calibri, sans-serif">--- M3CG_Rd.i3<span class="Apple-tab-span" style="white-space:pre">       </span>14 Jan 2001 13:40:37 -0000<span class="Apple-tab-span" style="white-space:pre">  </span>1.1.1.1</font></div><div><font face="Calibri, sans-serif">+++ M3CG_Rd.i3<span class="Apple-tab-span" style="white-space:pre">  </span>26 Sep 2012 15:34:33 -0000</font></div><div><font face="Calibri, sans-serif">@@ -7,9 +7,9 @@</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> INTERFACE M3CG_Rd;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-IMPORT M3CG, Rd;</font></div><div><font face="Calibri, sans-serif">+IMPORT M3CG_Ops, Rd;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-PROCEDURE Inhale (rd: Rd.T;  cg: M3CG.T);</font></div><div><font face="Calibri, sans-serif">+PROCEDURE Inhale (rd: Rd.T;  cg: M3CG_Ops.Public);</font></div><div><font face="Calibri, sans-serif"> (* Parse the M3CG calls from 'rd' and call 'cg' to implement them. *)</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> END M3CG_Rd.</font></div><div><font face="Calibri, sans-serif">Index: M3CG_Rd.m3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_Rd.m3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.15</font></div><div><font face="Calibri, sans-serif">diff -u -r1.15 M3CG_Rd.m3</font></div><div><font face="Calibri, sans-serif">--- M3CG_Rd.m3<span class="Apple-tab-span" style="white-space:pre">     </span>4 Sep 2012 14:52:46 -0000<span class="Apple-tab-span" style="white-space:pre">   </span>1.15</font></div><div><font face="Calibri, sans-serif">+++ M3CG_Rd.m3<span class="Apple-tab-span" style="white-space:pre">     </span>26 Sep 2012 15:34:33 -0000</font></div><div><font face="Calibri, sans-serif">@@ -22,7 +22,7 @@</font></div><div><font face="Calibri, sans-serif"> TYPE</font></div><div><font face="Calibri, sans-serif">   State = RECORD</font></div><div><font face="Calibri, sans-serif">     rd     : Rd.T;</font></div><div><font face="Calibri, sans-serif">-    cg     : M3CG.T;</font></div><div><font face="Calibri, sans-serif">+    cg     : M3CG_Ops.Public;</font></div><div><font face="Calibri, sans-serif">     ch     : CHAR;  (* current scan character *)</font></div><div><font face="Calibri, sans-serif">     buf    : InputBuffer;</font></div><div><font face="Calibri, sans-serif">     buf_len: CARDINAL;</font></div><div><font face="Calibri, sans-serif">@@ -206,7 +206,7 @@</font></div><div><font face="Calibri, sans-serif">   cmds: IntIntTbl.T := NIL;</font></div><div><font face="Calibri, sans-serif">   types: IntIntTbl.T := NIL;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-PROCEDURE Inhale (rd: Rd.T;  cg: M3CG.T) =</font></div><div><font face="Calibri, sans-serif">+PROCEDURE Inhale (rd: Rd.T;  cg: M3CG_Ops.Public) =</font></div><div><font face="Calibri, sans-serif">   VAR s: State;  op: M3CG.Name;  cmd: INTEGER;</font></div><div><font face="Calibri, sans-serif">   BEGIN</font></div><div><font face="Calibri, sans-serif">     s.rd      := rd;</font></div><div><font face="Calibri, sans-serif">Index: M3CG_Wr.i3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_Wr.i3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.1.1.1</font></div><div><font face="Calibri, sans-serif">diff -u -r1.1.1.1 M3CG_Wr.i3</font></div><div><font face="Calibri, sans-serif">--- M3CG_Wr.i3<span class="Apple-tab-span" style="white-space:pre">      </span>14 Jan 2001 13:40:37 -0000<span class="Apple-tab-span" style="white-space:pre">  </span>1.1.1.1</font></div><div><font face="Calibri, sans-serif">+++ M3CG_Wr.i3<span class="Apple-tab-span" style="white-space:pre">  </span>26 Sep 2012 15:34:33 -0000</font></div><div><font face="Calibri, sans-serif">@@ -7,9 +7,9 @@</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> INTERFACE M3CG_Wr;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-IMPORT M3CG, Wr;</font></div><div><font face="Calibri, sans-serif">+IMPORT M3CG_Ops, Wr;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-PROCEDURE New (wr: Wr.T): M3CG.T;</font></div><div><font face="Calibri, sans-serif">+PROCEDURE New (wr: Wr.T): M3CG_Ops.Public;</font></div><div><font face="Calibri, sans-serif"> (* returns a fresh, initialized code generator that writes its</font></div><div><font face="Calibri, sans-serif">    calls as readable ASCII on 'wr'. *)</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">Index: M3CG_Wr.m3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div><div><font face="Calibri, sans-serif">RCS file: /usr/cvs/cm3/m3-sys/m3middle/src/M3CG_Wr.m3,v</font></div><div><font face="Calibri, sans-serif">retrieving revision 1.18</font></div><div><font face="Calibri, sans-serif">diff -u -r1.18 M3CG_Wr.m3</font></div><div><font face="Calibri, sans-serif">--- M3CG_Wr.m3<span class="Apple-tab-span" style="white-space:pre">       </span>22 Aug 2012 14:15:40 -0000<span class="Apple-tab-span" style="white-space:pre">  </span>1.18</font></div><div><font face="Calibri, sans-serif">+++ M3CG_Wr.m3<span class="Apple-tab-span" style="white-space:pre">     </span>26 Sep 2012 15:34:33 -0000</font></div><div><font face="Calibri, sans-serif">@@ -27,7 +27,7 @@</font></div><div><font face="Calibri, sans-serif">   END;</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> TYPE</font></div><div><font face="Calibri, sans-serif">-  U = M3CG.T OBJECT</font></div><div><font face="Calibri, sans-serif">+  U = M3CG_Ops.Public OBJECT</font></div><div><font face="Calibri, sans-serif">         wr            : Wr.T := NIL;</font></div><div><font face="Calibri, sans-serif">         buf           : M3Buf.T := NIL;</font></div><div><font face="Calibri, sans-serif">         buf_len       : INTEGER := 0;</font></div><div><font face="Calibri, sans-serif">@@ -375,7 +375,7 @@</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif"> (*---------------------------------------------------------------------------*)</font></div><div><font face="Calibri, sans-serif"> </font></div><div><font face="Calibri, sans-serif">-PROCEDURE New (output: Wr.T): M3CG.T =</font></div><div><font face="Calibri, sans-serif">+PROCEDURE New (output: Wr.T): M3CG_Ops.Public =</font></div><div><font face="Calibri, sans-serif">   VAR mbuf := M3Buf.New ();</font></div><div><font face="Calibri, sans-serif">   BEGIN</font></div><div><font face="Calibri, sans-serif">     M3Buf.AttachDrain (mbuf, output);</font></div><div><font face="Calibri, sans-serif">Index: Target.i3</font></div><div><font face="Calibri, sans-serif">===================================================================</font></div></div><div style="font-family: Calibri, sans-serif; font-size: 12pt; "><br></div><div style="font-family: Calibri, sans-serif; font-size: 12pt; "><br></div><div style="font-family: Calibri, sans-serif; font-size: 12pt; "> - Jay<br><br><div><div id="SkyDrivePlaceholder"></div><hr id="stopSpelling">From: hosking@cs.purdue.edu<br>Date: Wed, 26 Sep 2012 10:42:26 -0400<br>To: jay.krell@cornell.edu<br>CC: m3devel@elegosoft.com<br>Subject: Re: [M3devel] M3CG_Ops.Public vs. M3CG.T<br><br>I disagree.  M3CG.T is more abstract than M3CG_Ops.  The revelation of M3CG.T <: M3CG_Ops.Public is in M3CG_Ops.  If you want the ops you simply import that interface to get the revelation.  Please don’t make pervasive changes in interfaces that some of us are developing against.<br>
<br><div><div>On Sep 26, 2012, at 4:11 AM, Jay K <<a href="mailto:jay.krell@cornell.edu">jay.krell@cornell.edu</a>> wrote:</div><br class="ecxApple-interchange-newline"><blockquote><div class="ecxhmmessage" style="font-size:12pt;font-family:Calibri;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;line-height:normal;orphans:2;text-align:-webkit-auto;text-indent:0px;text-transform:none;white-space:normal;widows:2;word-spacing:0px"><div dir="ltr"><div><font face="Calibri, sans-serif">M3CG_Ops.i3:</font></div><div><font face="Calibri, sans-serif"><br></font></div><div><font face="Calibri, sans-serif"><br></font></div><div><font face="Calibri, sans-serif">child: M3CG.T := NIL;</font></div><div><font face="Calibri, sans-serif">(* The default methods simply call the corresponding method in 'child',</font></div><div><font face="Calibri, sans-serif">   hence a vanilla 'M3CG.T' can be used as a filter where you override</font></div><div><font face="Calibri, sans-serif">   only the methods of interest. *)</font></div><div><font face="Calibri, sans-serif"><br></font></div><div><font face="Calibri, sans-serif">1)</font></div><div><font face="Calibri, sans-serif"><br></font></div><div><font face="Calibri, sans-serif">I am not keen on fixing this, but I feel this was clearly a mistake.</font></div><div><font face="Calibri, sans-serif"><br></font></div><div><font face="Calibri, sans-serif">M3CG_Ops.Public should have been "purely abstract" with no default</font></div><div><font face="Calibri, sans-serif">implementation.</font></div><div><font face="Calibri, sans-serif">M3CG_Filter.T or somesuch could have been as described.</font></div><div><font face="Calibri, sans-serif"><br></font></div><div><font face="Calibri, sans-serif"><br></font></div><div><font face="Calibri, sans-serif">2) I am fixing:</font></div><div><font face="Calibri, sans-serif">M3CG.T is overused.</font></div><div><font face="Calibri, sans-serif">Most uses should be M3CG_Ops.Public.</font></div><div><font face="Calibri, sans-serif">It is ok to derive from -- though that was a mistake.</font></div><div><font face="Calibri, sans-serif">But functions that take or return M3CG.T should really be</font></div><div><font face="Calibri, sans-serif">taking and returning M3CG_Ops.Public.</font></div><div><font face="Calibri, sans-serif"><br></font></div><div><font face="Calibri, sans-serif"><br></font></div><div><font face="Calibri, sans-serif">  - Jay</font></div><br></div></div><br class="ecxApple-interchange-newline"></blockquote></div><br></div></div>                                      </div></body>
</html>