<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">


<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT color=#0000ff face=Arial size=2><SPAN class=974023418-21082001>Ahh, I 
have been trying for over a year to realize the implications and requirements 
for doing this.&nbsp; I have arrived at the conclusion, with much help from many 
people - basically the entire squeak community, that we need a specialized 
object reference that allows us to manage, and 'bend' the message send.&nbsp; I 
am still not satisfied with a Proxy, subclassing from nil or ProtoObject or 
Object.&nbsp; there is the identity problem and there is some protocol that 
isn't fowarded to the real target.</SPAN></FONT></DIV>
<DIV><FONT color=#0000ff face=Arial size=2><SPAN 
class=974023418-21082001></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT color=#0000ff face=Arial size=2><SPAN class=974023418-21082001>Is it 
correct that you view Components as my&nbsp;'UserSpace', so to 
speak?&nbsp;&nbsp; It is the component that loads Modules, 
generates&nbsp;VariableBindings and initializers scoped to the component 
boundaries.&nbsp;&nbsp; The external references (which was the topic of 
discussion when these threads made to this list) are really of two types.&nbsp; 
One type is an external variable binding, that is looked up by global named 
reference resolution (compiler #pushResolvableLiteral).&nbsp; The other type is 
an external object reference.&nbsp; Of course, the external object reference 
could point to a Class...</SPAN></FONT></DIV>
<DIV><FONT color=#0000ff face=Arial size=2><SPAN 
class=974023418-21082001></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT color=#0000ff face=Arial size=2><SPAN class=974023418-21082001>Could 
you briefly tell us how Firewall specified external object references?&nbsp; 
Were they just the proxy pattern or was there special VM support for them?&nbsp; 
There is the identity issue and message sending and lookup issues.&nbsp; These 
external object references could also be of many types like:&nbsp; external 
component/environment, remote, persistent, unloaded.</SPAN></FONT></DIV>
<DIV><FONT face=Tahoma><FONT size=2><SPAN 
class=974023418-21082001></SPAN></FONT></FONT>&nbsp;</DIV>
<DIV><FONT color=#0000ff face=Arial size=2><SPAN class=974023418-21082001>thank 
you,</SPAN></FONT></DIV>
<DIV><FONT color=#0000ff face=Arial size=2><SPAN class=974023418-21082001>- 
Rob</SPAN></FONT></DIV>
<DIV><FONT color=#0000ff face=Arial size=2><SPAN 
class=974023418-21082001></SPAN></FONT>&nbsp;</DIV>
<DIV><FONT face=Tahoma><FONT size=2><SPAN 
class=974023418-21082001>&nbsp;</SPAN>-----Original Message-----<BR><B>From:</B> 
Allen Wirfs-Brock [mailto:Allen_Wirfs-Brock@Instantiations.com]<BR><B>Sent:</B> 
Tuesday, August 21, 2001 2:49 AM<BR><B>To:</B> Withers, Robert; 
'squeak-dev@lists.squeakfoundation.org'<BR><B>Cc:</B> 
modsqueak@bluefish.se<BR><B>Subject:</B> RE: [Modules] Components or 
Modules??<BR><BR></DIV></FONT>
<BLOCKQUOTE 
style="BORDER-LEFT: #0000ff 2px solid; MARGIN-LEFT: 5px; MARGIN-RIGHT: 0px; PADDING-LEFT: 5px"></FONT>I 
  think you're pushing into an important space with this message.<BR><BR>I'm not 
  yet ready to talk about name spaces in the context of modules (I think there 
  are more basic things that still need to be air first) but I think your 
  questions about the execution environment are very important.<BR><BR>As I view 
  the virtual machine it's simply an execution engine for message semantics. The 
  important fundamental things it supports are instantiation, object references, 
  object identity testing, and message sending. A single, shared class 
  library&nbsp; isn't&nbsp; a key element of the virtual machine. From this 
  perspective there are lots of interesting things you can do.&nbsp; For 
  example, you can have separate independent class libraries co-resident in the 
  same image. (There are some minor issues relating to nil and the booleans and 
  a few other things, but those are all solvable). The can use conflicting 
  names, the virtual machine doesn't care. They can even have conflicting class 
  definition, and the virtual machine still doesn't care.&nbsp; However, objects 
  defined by independent class libraries can still reference each other and 
  exchange message.<BR><BR>If starting from scratch, my first cut at 
  "components" would be to define a component as a namespace containing a self 
  contained class hierarchy defined from a set of modules.&nbsp; Multple such 
  components could be in a single image and the could communicate via object 
  references and messaging.&nbsp; I would not permit inheritance 
  relationships&nbsp; or name sharing among between such components.&nbsp; There 
  are, however, various sharing&nbsp; "optimizations" that could be applied by 
  the implementation when multiple components incorporate the same modules. 
  <BR><BR>Starting from that you could easily imagine a "tool space" that was 
  independent from the "user space".&nbsp; In fact, you could have multiple 
  "user space".<BR><BR>We used a trick like this in our Firewall systems to 
  allow a user to see a very simple class library that didn't include all the 
  implementation classes (CompiledMethods, Metaclasses, contexts, etc.) needed 
  by the virtual machine. All we had to do was treat the implementation classes 
  as an independent hierarchy that wasn't in the namespace of the user's 
  programs. Similary, we put all the classes necessary to support remote control 
  and debugging of the image into another separate hierarchy/namespace. The 
  functionality was all there in the image but the user constructing an 
  application didn't need to see it or worry about conflicting with 
  it.<BR><BR><BR>At 02:30 PM 8/20/2001 -0400, Withers, Robert wrote:<BR><BR>
  <BLOCKQUOTE class=cite cite type="cite"><FONT size=2>Hi everyone,</FONT> 
    <BR><BR><FONT size=2>I am really, really enjoying these discussions of 
    Modulization of Squeak.&nbsp; It may take awhile, but the enrgy gathering in 
    support of this is amazing.&nbsp; It seems complex to me because of being a 
    complex topic crossing the core language areas of the meta level and with 
    the execution environment.&nbsp; There are two areas, in particular, that I 
    am really unclear about (only two!?!?&nbsp; ha!).&nbsp; <BR></FONT><BR><FONT 
    size=2>First off, where does the concept of Namespaces fit into Modules 
    versus Components?&nbsp; This is clearly a meta-level modularization, 
    separating class definitions and extensions into different semantic 
    spaces.&nbsp; Is this orthogonal to Modules and 
    Components?<BR></FONT><BR><FONT size=2>The second question is what aspect of 
    Modularity partitions the execution environment of Squeak into separate 
    spaces?&nbsp; I don't even have a good name for it, since it isn't a 
    Component, although a Component may represent a separate execution 
    environment.&nbsp;&nbsp; It isn't a Module, since a Module is a chunk of 
    definitional space.&nbsp; If we view a Module a declarative, then there is 
    definitely no execution space in it, neither active nor inactive.&nbsp; It 
    is only when we attempt to install a Module that we would build execution 
    context.<BR></FONT><BR><FONT size=2>The concept of a user space is a good 
    description, to me, of a partitioned chunk of execution space.&nbsp; Does 
    this synergize with anyone else?&nbsp; If we take this perspective of 
    gaining access to an image, the contents of this user execution context 
    depends on how you initialize and utilize this "execution space".&nbsp; With 
    the concept of a user execution context, we would have a multi-user system, 
    each with disjoint resources and definitions "installed"and bound into their 
    user-context.&nbsp; I apologize for mixing the terms state, context, and 
    execution-space, but I mean the same thing with them; they may be 
    synonymous.<BR></FONT><BR><FONT size=2>Thus our lowest layer of orthogonal 
    cuts would be:</FONT> <BR><FONT size=2>1a) execution 
    environment:&nbsp;&nbsp;&nbsp; User spaces, each with a unique global 
    environment.&nbsp; Shared Globals?</FONT> <BR><FONT size=2>1b) process 
    environment:&nbsp;&nbsp;&nbsp;&nbsp; Processes, executing within a User 
    Space.&nbsp; Shared Processes?</FONT> <BR><FONT size=2>2)&nbsp; 
    Namespaces:&nbsp;&nbsp; separation of definitional elements between semantic 
    spaces</FONT> <BR><BR><FONT size=2>followed by:</FONT> <BR><BR><FONT 
    size=2>3)&nbsp; Modules:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; development spaces, 
    that allow independent control of chunks of code</FONT> <BR><FONT 
    size=2>4)&nbsp; Components:&nbsp;&nbsp; deployment mechanism</FONT> 
    <BR><BR><FONT size=2>regards,</FONT> <BR><FONT size=2>Rob</FONT> 
    <BR><BR><FONT size=2>&gt; -----Original Message-----</FONT> <BR><FONT 
    size=2>&gt; From: Allen Wirfs-Brock [<A 
    href="mailto:Allen_Wirfs-Brock@Instantiations.com">mailto:Allen_Wirfs-Brock@Instantiations.com</A>]</FONT> 
    <BR><FONT size=2>&gt; Sent: Thursday, August 16, 2001 5:13 PM</FONT> 
    <BR><FONT size=2>&gt; To: squeak-dev@lists.squeakfoundation.org</FONT> 
    <BR><FONT size=2>&gt; Cc: modsqueak@bluefish.se</FONT> <BR><FONT size=2>&gt; 
    Subject: [Modules] Components or Modules??</FONT> <BR><FONT size=2>&gt; 
    </FONT><BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; So what are we 
    trying to accomplish?&nbsp; Dan listed a set of </FONT><BR><FONT size=2>&gt; 
    "desiderata" that </FONT><BR><FONT size=2>&gt; I can whole-heartedly 
    support.&nbsp; However, I would like to step </FONT><BR><FONT size=2>&gt; up 
    one level </FONT><BR><FONT size=2>&gt; before plunging into the 
    details.</FONT> <BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; My 
    understanding is that a common goal is the elimination of the all 
    </FONT><BR><FONT size=2>&gt; encompassing, monolithic image. I can't argue 
    with that goal </FONT><BR><FONT size=2>&gt; and I don't </FONT><BR><FONT 
    size=2>&gt; think I need to reiterate all reasons this is desirable.&nbsp; 
    </FONT><BR><FONT size=2>&gt; However, there </FONT><BR><FONT size=2>&gt; are 
    a lot of different&nbsp; reasons that different constituencies 
    </FONT><BR><FONT size=2>&gt; have for </FONT><BR><FONT size=2>&gt; wanting 
    to see this happen.&nbsp; I don't necessarily believe that </FONT><BR><FONT 
    size=2>&gt; one solution </FONT><BR><FONT size=2>&gt; will make everybody 
    happy.&nbsp; I also think this may be one </FONT><BR><FONT size=2>&gt; 
    reason that there </FONT><BR><FONT size=2>&gt; appears to be a lack of 
    consensus on an approach to </FONT><BR><FONT size=2>&gt; modularity.&nbsp; 
    Different </FONT><BR><FONT size=2>&gt; people are trying to solve different 
    problems.</FONT> <BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; If one 
    tool won't do the job then the next simplest&nbsp; thing is to have 
    </FONT><BR><FONT size=2>&gt; exactly two tools that collective will.&nbsp; 
    For conquering the </FONT><BR><FONT size=2>&gt; monolithic </FONT><BR><FONT 
    size=2>&gt; image, I'm going to argue that the two tools we need are 
    </FONT><BR><FONT size=2>&gt; "components" and </FONT><BR><FONT size=2>&gt; 
    "modules".&nbsp;&nbsp; Clearly, I need to define what I mean by this 
    </FONT><BR><FONT size=2>&gt; terms.&nbsp; I'll </FONT><BR><FONT size=2>&gt; 
    start by trying to list some distinguishing characteristics:</FONT> 
    <BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; 
    Function&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    Components&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    Modules</FONT> <BR><FONT size=2>&gt; 
    --------------------------------------------------------------</FONT> 
    <BR><FONT size=2>&gt; ----------------------------</FONT> <BR><FONT 
    size=2>&gt; 
    Organizes&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    behavior&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </FONT><BR><FONT size=2>&gt; definition of behavior</FONT> <BR><FONT 
    size=2>&gt; 
    When&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    runtime&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    development time</FONT> <BR><FONT size=2>&gt; 
    composition&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    dynamic&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    static</FONT> <BR><FONT size=2>&gt; 
    coupling&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    loose&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    tight</FONT> <BR><FONT size=2>&gt; 
    via&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    object 
    refs/messages&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
    </FONT><BR><FONT size=2>&gt; inheritance/naming/syntax, etc.</FONT> 
    <BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; Roughly speaking 
    Components correspond to COM or CORBA </FONT><BR><FONT size=2>&gt; objects, 
    DLLs, SLLs </FONT><BR><FONT size=2>&gt; in Visual Smalltalk, etc.</FONT> 
    <BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; Roughly speaking Modules 
    correspond to Java source files, </FONT><BR><FONT size=2>&gt; Envy projects, 
    </FONT><BR><FONT size=2>&gt; TEAM/V packages, Smalltalk change sets.</FONT> 
    <BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; Modules are all about 
    organizing and managing code, </FONT><BR><FONT size=2>&gt; Components are 
    all </FONT><BR><FONT size=2>&gt; about composing functionality 
    (behavior).&nbsp; Modules are used to create </FONT><BR><FONT size=2>&gt; 
    components.</FONT> <BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; Most 
    module systems end up have some (usually weak) component-like 
    </FONT><BR><FONT size=2>&gt; characteristics. Most component systems have 
    some (usually weak) </FONT><BR><FONT size=2>&gt; module-like 
    characteristics. To me, all of the various </FONT><BR><FONT size=2>&gt; 
    systems I've heard </FONT><BR><FONT size=2>&gt; described in this discussion 
    appear to fit primarily in one </FONT><BR><FONT size=2>&gt; or the other of 
    </FONT><BR><FONT size=2>&gt; these categories with some features that are 
    more appropriate to the </FONT><BR><FONT size=2>&gt; other.&nbsp; (Here is 
    my first crack assignment based upon limited </FONT><BR><FONT size=2>&gt; 
    visibility.&nbsp; Component systems: Environments, OASIS, (I don't 
    </FONT><BR><FONT size=2>&gt; really know </FONT><BR><FONT size=2>&gt; enough 
    about either but this is my impression) , Pope's </FONT><BR><FONT 
    size=2>&gt; selector ideas. </FONT><BR><FONT size=2>&gt; Module systems: 
    Pelrine's work, change sets). My impression </FONT><BR><FONT size=2>&gt; is 
    that people </FONT><BR><FONT size=2>&gt; who are primarily thinking about 
    component issues have </FONT><BR><FONT size=2>&gt; problems with module 
    </FONT><BR><FONT size=2>&gt; systems because they don't see what they are 
    looking for visa </FONT><BR><FONT size=2>&gt; versa. Most </FONT><BR><FONT 
    size=2>&gt; of my work with modularizing Smalltalk has been on the module 
    </FONT><BR><FONT size=2>&gt; side.&nbsp; However, I think there is a real 
    place for the </FONT><BR><FONT size=2>&gt; component view. Many 
    </FONT><BR><FONT size=2>&gt; of the rough edge I encountered in module 
    systems have been </FONT><BR><FONT size=2>&gt; in areas where 
    </FONT><BR><FONT size=2>&gt; they have tried to support component like 
    usage.</FONT> <BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; So here's 
    my strawman position: Squeaks needs both a module </FONT><BR><FONT 
    size=2>&gt; architecture </FONT><BR><FONT size=2>&gt; and a component 
    architecture. They should be designed to be </FONT><BR><FONT size=2>&gt; 
    complementary </FONT><BR><FONT size=2>&gt; to each other. The module system 
    should stick to development time </FONT><BR><FONT size=2>&gt; issues.&nbsp; 
    The component system should stick to runtime issues. </FONT><BR><FONT 
    size=2>&gt; Globally, </FONT><BR><FONT size=2>&gt; some people should be 
    thinking about how to slice the image </FONT><BR><FONT size=2>&gt; into 
    components </FONT><BR><FONT size=2>&gt; and modules.</FONT> <BR><FONT 
    size=2>&gt; </FONT><BR><FONT size=2>&gt; Allen</FONT> <BR><FONT size=2>&gt; 
    </FONT><BR><FONT size=2>&gt; </FONT><BR><FONT size=2>&gt; </FONT><BR><FONT 
    size=2>&gt; </FONT><BR><FONT size=2>&gt; 
</FONT></BLOCKQUOTE></BLOCKQUOTE></BODY></HTML>