Thu, 07 Jan 1999 08:37:34 -0700
I recently realized that I've been kind of ambiguous with some
of my terms, so I'd like to give you a short glossary. I'm also
going to clean up my usage so that I always use the same term to mean
the same thing.
* Abstraction: The concentrated essence of a larger whole (dictionary).
* System: A regularly interacting or interdependent group of subsystems
forming a unified whole. (Adapted from a dictionary.)
* Domain: A sphere of activity, concern, or function; field: "the domain
of history." (From my dictionary, again.)
* System Abstraction: A grouping of multiple subsystems into a single
* Domain Abstraction: Modelling a system in a different domain while
retaining the system's essential properties. (Preferably resulting in a
simplification of the system.)
* Program: A software system. Not source code, though. I'm going to
use this term to refer to the actual electrical activity within the CPU.
* Model: I'm going to define this term fairly narrowly, as "a
representation of a program." Source code is a model.
* Metamodel: A definition of a set of models. For example, the C
language grammar defines a set of source code.
* Meta-metamodel: A definition of a set of metamodels. For example,
phrase-structure grammar defines a set of language grammars.
* Syntax: The way in which symbols are put together to form phrases.
(Adapted from my dictionary.)
* Semantic: Of or pertaining to meaning. (Dictionary.)
* Syntactic Model: A model which uses specific syntax to convey meaning.
* Semantic Model: A model which uses abstract concepts, not concrete
symbols, to convey meaning. In Prism, the "abstract concepts" are data
* Syntactic Metamodel, Syntactic Meta-metamodel: A metamodel (or
meta-metamodel) which defines a set of syntactic models (or syntactic
* Semantic Metamodel, Semantic Meta-metamodel: A metamodel (or
meta-metamodel) which defines a set of semantic models (or semantic
The relationship between a domain, domain abstraction, and metamodel is
as follows: You identify the DOMAIN in which the problem you're solving
(by creating a program) resides. Then you choose or create a METAMODEL
which provides allows you to model the program with a high-level DOMAIN
ABSTRACTION. I contend that the simplest (most abstracted) metamodel
will have semantics which are most similar to the problem's DOMAIN.
The philosophy of Prism is that a single program deals with multiple
problems, each of which can reside in a separate domain. Thus, multiple
metamodels (each providing a different domain abstraction) need to be
used to achieve maximum simplicity. Simplicity = less bugs, quicker
I've been using the term "Domain" to mean "Domain," "Domain
Abstraction," and "Semantic Metamodel." You'll also notice that
ambiguity on the web site. Sorry if anybody was confused by this...
I'll try to be more consistent in the future.
Jim Little (email@example.com)
Prism is at http://www.teleport.com/~sphere.