<html>
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 &quot;components&quot; 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; &quot;optimizations&quot; that
could be applied by the implementation when multiple components
incorporate the same modules. <br><br>
Starting from that you could easily imagine a &quot;tool space&quot; that
was independent from the &quot;user space&quot;.&nbsp; In fact, you could
have multiple &quot;user space&quot;.<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 type=cite class=cite 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 &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.<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; &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;&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></html>