<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 5.5.2653.12">
<TITLE>RE: [Modules] Components or Modules??</TITLE>
</HEAD>
<BODY>

<P><FONT SIZE=2>Hi everyone,</FONT>
</P>

<P><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; </FONT></P>

<P><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?</FONT></P>

<P><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.</FONT></P>

<P><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 &quot;execution space&quot;.&nbsp; With the concept of a user execution context, we would have a multi-user system, each with disjoint resources and definitions &quot;installed&quot;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.</FONT></P>

<P><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>
</P>

<P><FONT SIZE=2>followed by:</FONT>
</P>

<P><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>
</P>

<P><FONT SIZE=2>regards,</FONT>
<BR><FONT SIZE=2>Rob</FONT>
</P>

<P><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; &quot;desiderata&quot; 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; &quot;components&quot; and </FONT>
<BR><FONT SIZE=2>&gt; &quot;modules&quot;.&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; Components&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; behavior&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; runtime &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; dynamic &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; loose&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; object refs/messages&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>
</P>

</BODY>
</HTML>