Modules and class... [ a off-topic question ?]

David Simmons David.Simmons at smallscript.com
Thu Feb 28 20:18:38 UTC 2002


...snip...

Lex,

I snipped your great response, for this post, so that we could break it
up into a series of different discussions.

First, some background on SmallScript:

a) It has mixins
b) It has interfaces
c) You can instantiate interfaces
d) Interfaces can have concrete fields

Now, some comments on the summary section you wrote:

<quote>
Okay.  After this whirlwind tour, here's a summary on the question that
spurred it off:

	classes: behavior, structure, namespace, maybe types, interfaces
(though normally not in the program code)

	modules: ownership, namespace

Are these really the same type of thing?  They only overlap at
namespaces.
</quote>

My descriptions would include:

Class-Entity:
    - metadata repository for "class-as-an-entity" properties
      - version services
      - module entity services
        - owning module
      - namespace entity services
        - external module repository (database)
	    - DLL entry points [pragmatics require: resources, etc]
        - imported & inherited namespaces
        - language-namespace of selectors (Symbols)
        - language-namespace of (typed) shared-fields (pool-entries)
        - language-namespace of (typed) enum-consts
      - extensible collection of typed metadata properties
        - schema migration services
        - via basic object model services for metadata properties
          on any (non-virtual) object

    - constructor for "class-object"
	- behavior of class-object
        - includes associated external module entry points
        - interfaces & mixins (include/exclude set)
        - instance constructor methods and other class functions
      - structure of class-object
	  - parameterized/typed field defs (incl/initializer spec)
        - object memory defaults and policies
      - metadata repository for class-object properties
        - vtable mappings, super-behavior, super-types, 
          constructor-group, strong-name, ...

    - constructor for "instance-objects"
	- behavior of instance-objects 
        - includes pure-functions and associated external 
	    module entry points 
        - interfaces & mixins (include/exclude set)
      - structure of instance-objects
	  - parameterized/typed field defs (incl/initializer spec)
        - object memory defaults and policies
      - metadata repository for shared instance-object properties
        - vtable mappings, super-behavior, super-types, 
          constructor-group, strong-name, ...

Module-Entity:
    - metadata repository for "module-as-an-entity" properties    
      - version services
	- module entity services
	  - ownership [owned module-entity elements]
        - persistence/lifecycle [relates to external module repository]

          - image-slice/versions via [module repository]
	- namespace entity services (i.e., may, or may not, 
        also be used as a language-namespace)
        - external module repository (database(s))
	    - DLL entry points, resources, etc
        - imported & inherited namespaces
        - language-namespace of selectors (Symbols)
        - language-namespace of (typed) shared-fields (pool-entries)
        - language-namespace of (typed) enum-consts
      - extensible collection of typed metadata properties
        - schema migration services
        - via basic object model services for metadata properties
          on any (non-virtual) object

    - constructor for "module-object"
	- behavior of module-object (may, or may not, have unique
behavior)
        - includes associated external module entry points
        - interfaces & mixins (include/exclude set)
        - instance constructor methods and other class functions
        - module lifecycle behavior and custom services
      - structure of class-object
	  - parameterized/typed field defs (incl/initializer spec)
        - object memory defaults and policies
      - metadata repository for class-object properties  
        - vtable mappings, super-behavior, super-types, 
          constructor-group, strong-name, ...

    - constructor for "instance-objects"
      - not currently used, but may serve for supporting a
        complex repository (via a singleton), or for supporting
        multiple repositories or multiple repository versions.
        For source code management of modularized code/images,
        there are already half a dozen or more different types 
        of repositories (required for host integration).

* 
  The above descriptions are not meant to be exhaustive, but 
  merely illustrative. Not all capabilities are used in all
  scenarios. I apologize, but I need to stop here because
  I've got to run and do some other things... 
*

-- Dave S. [SmallScript Corp]

SmallScript for the AOS & .NET Platforms
David.Simmons at SmallScript.com | http://www.smallscript.org




More information about the Squeak-dev mailing list