Software Development Control Based on Module

Software
Development Control Based on M o d u l e I n t e r c o n n e c t i o n
W a l t e r F. Tichy
D e p a r t m e n t of Computer S c i e n c e
Carnegie-Mellon University
Pittsburgh, PA 15,,213
Abstract
stage
of
need
C o n s t r t l c t i n g l a r g e s o f t w a r e s y s t e m s is not m e r e l y
a m a t t e r atr programming, but also a m a t t e r of
c o mmu n i c a t i o n and coordination.
Problems arise
b e c a u s e m a n y p e o p l e w o r k on a joint p r o j e c t and
use e a c h o t h e r ' s p r o g r a m s . This p a p e r p r e s e n t s an
integrated
d e v e l o p m e n t and m a i n t e n a n c e s y s t e m
t h a t p r o v i d e s a c o n t r o l l i n g e n v i r o n m e n t to insure t h e
consistency
o f a s o f t w a r e s y s t e m at t h e module
interconnection
l e v e l . It a s s i s t s the programmers
w i t h t w o f a c i l i t i e s : I n t e r f a c e control and v e r s i o n
control. Interface
control estal)lishes consistent
i n t e r f a c e s b e t w e e n s o f t w a r e modules and maintains
t h i s c o n s i s t e n c y w h e n c h a n g e s are made. Version
c o n t r o l c o o r d i n a t e s t h e g~.neration and i n t e g r a t i o n
o f t h e v a r i o u s v e r s i o n s and c o n f i g u r a t i o n s .
Both
f a c i l i t i e s d e r i v e t h e i r i n f o r m a t i o n from an o v e r a l l
system
(lescription
formulated
in t h e module
interconnection
language
INTERCOL.
A
d e m o n s t r a t i o n s y s t e m is s k e t c h e d t h a t runs under
t h e UNIX t i m e - s h a r i n g s y s t e m .
the
t h e s y s t e m . As a n o t h e r e x a m p l e for tile
of
communication
phenomenon
of
and c o o r d i n a t i o n consider
c o n t i n u i n g c l l a n g e 2 : All large
a n d w i d e l y u s e d s y s t e m s a r e subj~.ct to an endless
stream
of
corrections,
customizations,
improvements,
a n d d i v e r s i f i c a t i o n s , b e c a u s e it is
u s u a l l y c h e a p e r t o m o d i f y t h e m than to rebuild them
from
scratch.
means
Ilowever,
contilluing
system
comnluf~ication
structure,
implementation
continuing
design
details
control
deterioration
continuing
to
of
to
the
of
the
overall
decisions,
the
avoid
modification
(or
slow
system
and
modifiers,
and
down)
into
the
unfixable
unstructuredness.
Current
research
programming
in
programming
lan q u a g e s ,
verification
techniques
methodology,
specification
and
t a k e s a d i f f e r e n t v i e w : The
m a i n g o a l is t o reduce t h e c o m p l e x i t y and size of
software
systems
However,
1. Introduction
no
approaches
to
matter
manageable
how
dimensions.
successful
these
a r e , com;~uter ~,pplications are s u b j e c t
t o t h e P a r k i n s o n i a l ~ l o w t h a t t h e i r s c a l e will e x p a n d
Constructing
merely
a
large
software
system
is
not
to
a m a t t e r o f progr,~mming, but also a m a t t e r
o f communication and coordination. Communication
and
coordination
complexity
makes
rather
it
and
necessary
than
t e a m 1.
problems
size
with
of
arise
software
to
a single
work
b e c a u s e of the
systems.
witll
meet
be
systems
a n d shall h a v e t o s o l v e t h e communication
This
system,
involved
retain
p a r t s , it b e c o m e s e x t r e m e l y
t o e n s u r e t h e c o n s i s t e n c y of t h e s e parts.
the
asynchronous
nature
of
a clear
exhaust
human
problems
the
large,
inherent
complex
to
their
COl)abilities
the
to
software
and
system
prototype
of
an
products
by
addressing
the
c o o r d i n a t i o n problems outlined
I t s f a c i l i t i e s can be v i e w e d as g u a r a n t e e i n g
integrity
of a software
interconnection
p i c t u r e of t h e a c t u a l d e v e l o p m e n t
the
d e v e l o p m e n t and m a i n t e n a n c e
w h o s e g o a l it is t o c o n t r o l t i l e d e v e l o p m e n t
large
above.
presents
software
communication
a c t i v i t i e s and t i l e mass of information
quickly
paper
integrated
of
addition,
building
many p e o p l e
programmer or a small
numerous, interrelated
development
with
coordination
t o h u m a n i n t e r a c t i o n . With m a n y p e o p l e working on
In
faced
Thus, w e shall
development.
This i n t r o d u c e s atl t h e d i f f i c u l t i e s inherent
difficult
limits o f technolo~ly.
always
and
Size
the
appears
l e v e l 3.
as
s y s t e m a t t h e module
At this l e v e l , a s o f t w a r e
an
organized
collection
of
29
CH 1479-5/79/0000- 0029500.75 (~) ! 979 IEEE
modules
which
interfaces.
this
interact
with
Our s y s t e m
e a c h o t h e r through
it.~
p r o v i d e s t w o f a c i l i t i e s at
A
I n t e r f a c e control and version control.
level:
module
consists
control establisne3 consistent interfaces
modules
i n f o r m a t i o n . An e x p o r t e d or p r o v i d e d resource of a
changes
version
a r e m¢=(le.
selection
generation
(or
automatic
regeneration)
multi-configuration
in
a
and
status
m o d u l e is a r e s o u r c e t h a t is d e c l a r e d in tile program
Version control performs
and
data,
text,
Interface
when
test
program
between
o,,(I maintains this c o n s i s t e n c y
text,
of
documentation
(sub-)system
text
o f t h e m o d u l e and m a y be used in t h e program
multi-version/
text
of other
module
system.
is
An internal resource of a
modules.
declared
=n t h e
program t e x t
of t h a t
m o d u l e , b u t m a y n o t b e u s e d b y a n o t h e r module. An
Both interface
c o n t r o l and v e r s i o n control d e r i v e
imported
t h e i r i n f o r m a t i o n from an o v e r a l l s y s t e m description,
that
formulated
in
in t h e m o d u l e i n t e r c o n n e c t i o n language
or r e q u i r e d r e s o u r c e of a module is one
is n o t d e c l a r e d in t h e module, but may be used
it.
The
INTERCOL. S u c h a d e s c r i p t i o n s p e c i f i e s a s o f t w a r e
together
system
constitutes
at
indicates
module
how
versions
they
the
the
in|erconnection
various
modules
level.
and
interface
with
each
other.
An
is
not
set
of
provided resources
its
required resources
t h e i n t e r f a c e of t h a t module.
A s y s t e m c o n s i s t s o f a c o l l e c t i o n of components,
INTERCOL
v i z . m o d u l e s or o t h e r s y s t e m s , plus d o c u m e n t a t i o n
text,
test
data,
difference
INTERCOL 4
a module's
their
is s e p a r a t e from a c t u a l program code.
Although
of
the
and how
are grouped into (sub-)systems
specification
It
set
with
a subject
of
this
there
and
between
status
information. Thus, a
systems
and modules is t h a t
is n o p r o g r a m t e x t a s s o c i a t e d w i t h a s y s t e m .
p a p e r , w e n e e d t o i n t r o d u c e a f e w of its notions in
A system
a l s o has
an int~.rface of p r o v i d e d and
tile
required
resources.
I l o w e v e r , since t h e r e is no
program
text,
following section.
careful
analysis
In s e c t i o n 3, w e p r e s e n t a
of
inter-compilation
type-checking
important
mechanisms
for
because
our
of
interface
me(hods
of
control.
interface
control
Finally,
a
implementation
running
under
3. Inter-Compilation
the
Type-checking
t i m e - s h a r i n g s y s t e m is d e s c r i b e d in s e c t i o n O.
programs.
important
Terminology
the
is a n y e n t i t y t h a t can be d e c l a r e d
named
variables,
definitions,
verifies tile type-correctness
of
W e w o u l d like t o s t r e s s t h a t w e consider
a c r o s s module b o u n d a r i e s to be more
than type-checking
in
a
constants,
progr.:lmming
procedures,
language
(e.g.,
o f an a b s t r a c t
type of a resource
resource
may
generics, t y p e -
primitive
the
d a t a t y p e , e t c . ) . The
used
in
a
a
programmers
these
d e t e r m i n e s t h e w a y s in which
be
closely
implement
e t c . ) . A subresource is a r e s o u r c e t h a t
an operation
responsibility
small,
is p a r t o f a n o t h e r r e s o u r c e (e.g., a field of a record,
the
Type-Chocking
inside a module, for
t h e f o l l o w i n g r e a s o n s . We assume t h a t a module is
A resource
and
and required
components.
type-checking
2.
provided
and
c o n t r o l in s e c t i o n s 4 and 5, r e s p e c t i v e l y .
pilot
a system°s
a r e in t u r n p r o v i d e d and required by its
Then w e
version
UNiX
resources
a c r o s s compilation emits is t h e most
facility
discuss
the
type -checking,
own
program.
o f a sin qle pro qrammer or of a
interacting
module's
team.
provided
In
order
resources,
to
the
will u s u a l l y d e c l a r e some other, more
internal resources.
One can assume t h a t
programmers
rar,.,ly m a k e t y p e - e r r o r . 5 in using
resources,
siM,:e U l e y a r e dealing with their
creations,
different
t l o w e v e r , programmers working on
modules
cannot
interact
as closely. In
Type.~checking v e r i f i e s t h a t t h e r e s o u r c e is used in
only
those
inspecting
ways.
the
Type-checking
is
done
by
program, rather than by executing
= W e do not wlsh to give a more specific definition of the latter two
terms, in order to keep the diso.13sion independent of a particular
programming language. Clearly, we have 'algoli¢' languages in mind, like
PASCAL, ALPHARD, or ADA.
30
p a r t i c u l a r , t h e i m p l e m e n t o r s of a resource e x p o r t e d
We
from
following paragraphs.
a
module
programmers
are
not
using them.
identical
with
tl}e
s h a l l d i s c u s s e a c h column of the array in the
E x p e r i e n c e shows that
m i s u n d e r s t a n d i n g s a t module i n t e r f a c e s are the rule
rather
than
the
type-checking
The
value
exception.
can d e t e c t
of
We
believe
that
type-
many of t h e s e errors.
type-checking
across
module
monolithic incremental independent
b o u n d a r i e s has b e e n confirmed with the use of the
compilatioh.
M E S A _ s y s t e m 5, 6
There
which
is a small number of language systems
monolithic
PASCAL
provide for inter-compilation type-checking,
m o s t n o t a b l y SIMUIA~37 7, PtlSS 8, and MESA 9. The
following
paragraphs
they
classify
scheme
is
based
strategy
in w h i c h compilation (i.e., code generation)
the
Tile
various
that
on
use.
the
techniques
classification
observation
that
FORTRAN ', S]MULA67 !
PL/I
I ALGOL68C
II
libraries i
incremental
tl~e
~f
is p e r f o r m e d can b e d e c o u p l e d from the s t r a t e g y in
which
interfaces
strategies
are
checked.
FORTRAN
PL/I
independent
The compilation
i.e.,
CLUlibrary
MESA
checking
linkers
w e w i s h to distinguish are as follows:
1. M o n o l i t h i c
compilation,
s e p a r a t e compilation;
PLISS
type-
. . . . . . .
I
no
Figure 1 : Inter-compilation type-checking
2. I n c r e m e n t a l
compilation,
i.e.,
compilation
units
are
processed
a c c o r d i n g t o some partial ordering,
s u c h as b o t t o m - u p ;
3.1, Monolithic Type-Checking
A n y l a n g u a g e s y s t e m t h a t (toes not provide for
8. I n d e p e n d e n t
compilation,
i.e.,
c o m p i l a t i o n units may be p r o c e s s e d in
any order.
separate
compilation
(monolithic
c o m p i l a t i o n , monolithic t y p e - c h e c k i n g ) .
fits
into
square
[1,1 ]
The
square
[3,1]
is t h e most densely populated
I n t e r - c o m p i l a t i o n t y p e - c h e c k i n g can be c a t e g o r i z e d
one,
since
most
languaqe
using the same attributes:
separate
programmers.
help even
the
two
c a t e g o r i z a t i o n s results
type-checking
on
to
the
T h e s e s y s t e m s do not o f f e r any more
bottom-up
order
(square
[2,1]),
in
w h i c h t h e n e c e s s a r y information for t y p e - c l l e c k i n g
is a l w a y s
are
available.
compiled
types
,.3. I n d e p e n d e n t t y p e - c h e c k i n g , i.e., the
i n t e r f a c e s of compilation units may be
c h e c k e d in any order.
Combining
offer
if one r e s t r i c t s the d e v e l o p m e n t to an
incremental,
2. I n c r e m e n t a l t y p e - c h e c k i n g , i.e., the
i n t e r f a c e s of t h e compilation units are
c h e c k e d a c c o r d i n g t o some partial
o r d e r i n g , such as b o t t o m - u p ;
today
c o m p i l a t i o n , but pass the responsibility for
Inter-compilation
1. M o n o l i t h i c
type-checking,
i.e., no
t y p e - c h e c k i n g a c r o s s compilations;
systems
before
For e x a m p l e , ALGOL-libraries
t h e y are used, so t h a t the
o f t h e l i b r a r y e n t r i e s are known. However, it
is s t i l l t h e r e s p o n s i b i l i t y of the programmer to make
s u r e h e is using t h e l i b r a r y routines c o r r e c t l y .
in an
a r r a y o f nine possibll=ties, as shown in Fig. 1.
We
,3.2. I n c r e m e n t a l T y p e - C h e c k i n g
h a v e e n t e r e d a f e w e x a m p l e s y s t e m s into the grid.
Let
us
first
look a t s q u a r e [ 2 , 2 ] ,
incremental
c o m p i l a t i o n and t y p e - c l l e c k i n g , which is applied in
31
SIMULA677
module
and
M that,
AlgolOSC 10.
for
Compilation of
(square[3,2]).
a
It
differs
from
the
incremental
c o m p i l a t i o n o r d e r in t h a t a r e s o u r c e may be used
i n s t a n c e , defines a class C,
r e s u l t s in o b j e c t c o d e and symbol table information.
before
The
t h e t y p e o f t h a t r e s o u r c e is d e r i v e d from the usage
symbol
table
information
is
stored
in
an
i t s t y p e is in the a u x i l i a r y file. In that case
a u x i l i a r y file and can be used by tile compiler at a
site
later
auxiliary
time.
contains
When
a module N is compiled wlfich
an e x t e r n a l
( i f p o s s i b l e ) and t e n t a t i v e l y e n t e r e d into the
actual
d e c l a r a t i o n of class C, tile
file.
type
It will l a t e r be matcl]ed with the
(see
Fig. 3).
The PLISS-system 8,
t y p e s p e c i f i c a t i o n s d e s c r i b i n g class C are read into
b a s e d on PL/I, uses t h a t approach. A d i s a d v a n t a g e
t h e s y m b o l t a b l e for module N so that full i n t e r f a c e
is t h a t
checking
m a y b e d e l a y e d until long a f t e r the time the module
c a n b e p e r f o r m e d ( s e e Fig. 2).
bottom-up
Thus, a
the type-checking
of a module's i n t e r f a c e
is c o m p i l e d .
c o m p i l a t i o n o r d e r must be o b s e r v e d . Tile
Algo168C s y s t e m has ~ similar arrangement, e x c e p t
that
it
is
best
processing-order:
used
with
a
There
top-down
independent
The s e p a r a t e l y compilable units
type-cllecking
a r e n e s t e d b l o c k s , w h i c h can be i n s e r t e d at a later
time.
This
symbol-table
is
implemented
by
are
some
systems
compilation,
that
l)ut
allow
perlorn~
for
the
a c r o s s compilation units at link-time.
T h i s is an e x t r e m e c a s e of incremental checking. It
transmitting
has
i n f o r m a t i o n from o u t e r blocks to inner
the
checking
b l o c k s t h r o u g h a u x i l i a r y files.
serious
until
disadvantage
integration
of
time,
delaying
long
after
the
the
p r o g r a m m e r is d o n e w i t l l implenlentation.
~ e ~
derived
-Specs
I
u
IType_Spec s
class C
Type-S.pecs
F i g u r e 2= I n c r e m e n t a l compilation / t y p e - c h e c k i n g
F i g u r e 3= I n d e p e n d e n t compilation, increm, check
R e f i n i n g t i l e i d e a of t h e ~ x t r a c t e d symbol table
information
leads
compilation
in
type-checking
J
J
Module N
to
any
in
a
technique
order,
an
but
that
allows
performs
incremental
the
fashion
32
3,3. Independent Type-Checking
Type-Specs
c ass C
L e t us c o n s i d e r s q u a r e [ 3 , 3 ] , fully i n d e p e n d e n t
compilation
a n d t y p r . - c h e c k i n g . The c h a r a c t e r i s t i c
of independent
t y p e - c h e c k i n g is t h a t t h e i n t e r f a c e s
between
the
modules
designed
in
entered
are
form
of
They
are
type-specifications
explicit.
and
i n t o a d a t a b a s e b e f o r e a n y program code
is w r i t t e n .
at
the
T h a t m a y s e e m like an undue r e s t r i c t i o n
first
sight,
programmers
there
were
no
interfaces,
other's
but
in
fact
precise
they
could
is
tile
only
specifications
not
resources.
machine-readable
matter
it
way
~685f~--~./Tl
declare t
Class C ]
c a n s t a r t w r i t i n g s e p a r a t e modules: If
program
With
form,
the
it
is
of
with
each
interfaces
a
J
the
in
straight-forward
f o r t h e c o m p i l e r to pick up the n e c e s s a r y
information
before
checking
a
module°
In
the
od~, I
M E S A - s y s t e m 9 f o r i n s t a n c e , t h e d a t a - b a s e of t y p e definitions
consists
of a s e t of d e f i n i t i o n s f i l e s .
E a c h o f t h e s e f i l e s c o n t a i n s the r e s o u r c e s p r o v i d e d
by
a
particular
specifications.
module
The
in
the
interface
form
of
a
of
type-
module
described
in t e r m s of d e f i n i t i o n s files: One for t h e
provided
resources,
required
and
resources.
zero
The
or
more
compiler
for
simply
Figure 4: Independent compilation/type-checking
is
(like
the
the
MESA-scheme).
generates
reads
procedures
4).
second
phase
t h e final c o d e . I l o w e v e r , this phase has
to be delayed
t h e s e f i l e s b e f o r e p r o c e s s i n g t h e module ( s e e Fig.
The
until t h e b o d i e s of the n e e d e d inline
are
a v a i l a b l e . This w e
can in]plement
w i t h a n i n c r e m e n t a l s c h e m e similar to t h e SIMULA67
So
far
we
have
only
interface-checking
compilation,
case
actual
procedure
is
type-checking
the
same
is
time
perfornlecl
as
(section
before
We
As an e x a m p l e w h e r e this
An inline
it
has the
modules.
If
the
is
called
header
in
of
several
that
5.4).
They
a r e of l i t t l e i n t e r e s t since t h e y deal
with monolithic compilation.
same
as a r e g u l a r p r o c e d u r e . Suppose t h a t an
procedure
available
yet
shall r e t u r n t o this problem in a more
h a v e n o t c o n s i d e r e d t i l e s q u a r e s [ 1 , 2 ] and
[1,8].
is a r e s t r i c t e d form of a macro in t h a t its
in-line,
We
g e n e r a l f r a m e w o r k w h e n w e discuss v e r s i o n control
represents a
c o n s i d e r inline procechlres.
expanded
semantics
inline
at
system.
cases where
Square [2,3]
code-generation.
is d e s i r a b l e ,
body
occurs
or l a t e r .
where
discussed
4. Interface
Control
different
procedure
In
is
practice,
establish
( f o r e x a m p l e in a d e f i n i t i o n s file), w e can
it t u r n s
out that
it is difficult
to
a n d m a i n t a i n c o n s i s t e n t i n t e r f a c e s among
type-check
all calls t o it, but w e c a n n o t g e n e r a t e
t h e v a r i o u s c o m p o n e n t s of a large, e v o l v i n g system.
code
since
its b o d y m a y not be programmed y e t .
However,
This
compilation
two-phase
translation.
intermediate
inline
code
procedures.
interface
problem
can
be
solved
with
for the correct
a
control
The first phase g e n e r a t e s
It
which contains pseudo-calls to
This
phase
and can be executed
also
checks
such a
the
helps
in a n
33
is a b s o l u t e l y crucial
f u n c t i o n i n g of a s y s t e m .
Interface
is d e s i g n e d t o g u a r a n t e e this c o n s i s t e n c y .
between
fully i n d e p e n d e n t l y
consistency
to
establish
components
correct
interconnections
b y cl~ecking their i n t e r f a c e s
INTERCOL d e s c r i p t i o n of t h e o v e r a l l s y s t e m
structure.
It a l s o e x t r a c t s
description
modules
First,
adhere
resources
that
of
interface
must
provided
interfaces
specifications:
really
are expected
the
specified.
provide
must
be
than
resources
specified.
Fourth,
all
as
discussed
describe
with
in t h e
inter-module
We
followin~l s u b s e c t i o n .
We
we
also
independent
derive
one
would
type-specifications
compilation
require
from
a
the
F i n a l l y , w e d i s c u s s (:he a c t i o n s n e c e s s a r y if
the
interconnections
the
m a r k e d our Choices of mechanisms ill
line. In t h e r e m a i n d e r of this s u b s e c t i o n ,
describe
our i m l } l e m e n t a t i o n of t h e i n d e l ) e n d e n t
type-checking
(The incremental/incremental
parts
Consider
system
based
on
INTERCOL.
mechanism for module
c a n b e i m p l e n l e n t e d in a w a y similar to the
$1MULA67-scheme
l a n g u a g e s can be handled in a t y p e - s a f e
way.
have
inter-module
p r o b l e m o f i n t e r f a c i n g s y s t e m p a r t s w r i t t e n in
components
to
a dashed
type-checking,
between
the
the
Fig. 1 b y e n c l o s i n g t h e c o r r e s p o n d i n g s q u a r e s w i t h
h o w t h e s c o p e for i n t e r f a c e errors can be
different
As for
incremental
derives
u s a g e o f r e s o u r c e s , w b i c l l is in g e n e r a l impossible.
l i m i t e d w i t h i n f o r m a t i o n hiding t e c h n i q u e s , and how
the
an
which
required
The c h e c k i n q of t h e s e four conditions
implemented
the
facility
must be used correctly with respect to
their types.
chose
automatically.
because
from it. Second, t h e
resources
we
mecllanism
m e c h a n i s m , w e c h o s e t h e i n c r e m e n t a l one as well,
the
Third, no module, may use more required
resources
is
to their
module
Therefore,
type-checking
t o e n s u r e t h a t t h e v a r i o u s programmed
each
types
parts.
information from t h a t
describing
and will n o t be d i s c u s s e d here.)
the
following
INTERCOL-program
a f r a g m e n t of an ( u n r e a l i s t i c ) parser.
change.
system PARSER
4.1. Inter-Module
In t h e
Type-Checking
previous section
module IO
provide
function SrcChar : char;
const
lineLn;
type
Line = record { lineNurn : int;
lineBuf : array[1..lineLn] of char; };
procedure ListLine(outLine : 1"Line);
we have characterized
t h e v a r i o u s s e p a r a t e c o m p i l a t i o n and t y p e - c h e c k i n g
mechanisms.
Now
we
specify
and
motivate
our
choices.
end IO
Clearly,
have
the
f o r i n d i v i d u a l modules w e would like to
completely
various
each
p r o g r a m m e r t e a m s n e e d not w a i t for
other.
mechanism
The
requires
interfaces
indel)en(lent
that
we
type-checking
specify
tile
module
in s o m e w a y . We n o t e d a l r e a d y t h a t this
is n o t a s e v e r e
way
modulo LEXAN
provide
type
Lexerne = (Keyword, Operator, Identifier);
function NextLex : Lexerne;
require
SrcChar, lineLn, Line.{lineNum,lineBuf}, ListLine
end LEXAN
i n ( l e p e n d e n t mechanisms, so t h a t
r e s t r i c t i o n - - in f a c t , it is the only
in w h i c h d i f f e r e n t
programs.
end PARSER
t e a m s can use e a c h o t h e r ' s
As f o r t h e c o m p i l a t i o n mechanism, w e do
The
system
PARSER c o n s i s t s of t i l e module I0
n o t w a n t t o e x c l u d e inline p r o c e d u r e s and generics,
(for input/output)
which
analysis).
m e a n s t h a t w e h a v e to use some m i x t u r e of
independent
and
incremental
compilation
function
mechanisms.
I0
and t h e module LE×AN (for l e x i c a l
provides
SrcChar
procedure
for
the
reading
following
resources;
source, c h a r a c t e r s ,
L i s t L i n e for printing a line on t h e listing
m e d i u m , a c o n s t a n t i n d i c a t i n g t h e l e n g t h of a listing
To speed
translate
single
line,
p i e c e s o f m o d u l e s s e p a r a t e l y , for e x a m p l e
routines.
independent
because
Ftowever,
we
type-checking
cannot
mechanism
use
an
delivers
here,
evolving
interfaces
between
the
internal
representation
of
a
line.
the next
l e x e m e . It makes r e p e a t e d calls
t o S r c C h a r . LEXAN is a l s o r e s p o n s i b l e for g e n e r a t i n g
the
in f a c t , it w o u l d be quite a nuisance to
the
and
M o d u l e LEXAN i m p l e m e n t s N e x t L e x , a function t h a t
t h e i n t e r f a c e s b e t w e e n module p i e c e s are
implicit --
specify
up c o m p i l a t i o n s , w e may also w a n t to
listing;
and t h e
module
34
hence
procedure
it n e e d s t h e d e f i n i t i o n s of Line
ListLine.
Note t h a t w e h a v e
omitted
the
require-clause
be specified
they
type-specifications
in
complain
the
Second,
o f LEXAN. (In general, t y p e s n e e d to
required
resources;
i m p l i c i t l y in t h e s t r u c t u r e .
LEXAN
in
other
resources
they
are
be
where
contained
its
noted
as
declaration.
provides
This e n a b l e s us to reuse
systems,
an u n d e f i n e d
forward declaration.
p r o g r a m m e r m a k e s a t y p e - e r r o r in
t h e i m p l e m e n t a t i o n o f o n e of t h e r e s o u r c e s , this will
o n l y o n c e , u s u a l l y in t h e module w h e r e
o r i g i n a t e . ) We h a v e also o m i t t e d t h e origin of
the
about
if t h e
an
inconsistency
with
a
forward
This m a k e s s u r e t h a t a module r e a l l y
the resources
t h a t are e x p e c t e d from it
a n d t h a t t h e i r t y p e s a r e c o r r e c t . ~ Note f u r t h e r t h a t
required
the
m a y c o m e from d i f f e r e n t p l a c e s .
type-definition
for Line has b e e n t r a n s p o r t e d
f r o m IO t o LEXAN.
Note
that
processed
or
LEXAN.
results
the
above
piece
of
text
must
be
If
b e f o r e w e can s t a r t compiling e i t h e r IO
ill
Compiling
a set
of
an
INTERCOL
e n v i r o n m e n t s , one
description
for
the
compilation
of
a module s u c c e e d s ,
the
p r o g r a m m e r has t h e g u a r a n t e e t h a t its i n t e r f a c e will
fit into the rest of the system.
each
This is v e r i f i e d at
m o d u l e . S u c h an e n v i r o n m e n t consists of a pair of
the
s a m e t i m e a s t h e i n t e r n a l t y p e - c o n s i s t e n c y of
preludes,
o n e c o n t a i n i l l { I thP. required, and one t h e
the
module,
resources.
status
provided
For t h e a b o v e e x a m p l e , w e
a n d c o m p l e t e l y i n d e p e n d e n t l y of t h e
of other modules.
obtain the following preludes:
4.2.
Information
Hiding
IO.require:
<empty>
INTERCOL m a k e s it p o s s i b l e to a p p l y t h e principle
IO.provide:
forward function SrcChar : char;
f o r w a r d const
lineLn;
type
Line = record { LineNum : int;
lineBuf : array[J_lineLn] of char; };
forward procedure ListLine(outLine : 1"Line);
o f m i n i m a l p r i v i l e g e a t module i n t e r f a c e s : No module
m u s t b e g i v e n m o r e r e s o u r c e s or a c c e s s rights than
it
actually
needs.
heterogeneous
This
interfaces,
is
achieved
name
control
with
and
write-protection.
Heterogeneous
LEXAN.require:
extern function SrcChar : char;
extern ¢onst IineLn;
type
Line = record { lineNum :int;
lineBuf : array[L.lineLn] of char; };
extern procedure ListLine(outLine : 1"Line);
may access
contains
indicates
its i d e n t i t y :
a compiler d i r e c t i v e
read
LEXAN.require
resources,
in
moduleB1
require a, b
three
to
the
contains
other
in t h e i r
resources
besides
require-clause.
the
ones
This compares
favorably w i t h t h e usual programming environments,
corresponding
where
preludes.
e v e r y m o d u l e has u n r e s t r i c t e d a c c e s s to the
complete
n a m e siSace of t h e s y s t e m .
t h e t y p e s of t h e e x t e r n a l
a n d t h e i r use can n o w b e t y p e - c h e c k e d .
Name
resource
in t h e form of f o r w a r d d e c l a r a t i o n s .
has two effects:
b, c
h o w l a r g e t h e s y s t e m is in which t h e s e
any
L E X A N . p r o v i d e s p e c i f i e s t h e t y p e s of the p r o v i d e d
resources
modules
m o d u l e s a r e e m b e d ( l e d , t h e y will not be able
use
specified
: : m o d u l e LEXAN::
will
provide a, b, c
No m a t t e r
that
As s o o n a s t h e c o m p i l e r e n c o u n t e r s t h a t d i r e c t i v e ,
it
module A
modulo B2 require
N o w l e t us e x a m i n e h o w LEXAN is compiled. Its
text
Different
resources.
LEXAN.provide:
type
Le×eme = (Keyword, Operalor, Identifier);
forward function NextLex : Le×eme;
program
Interfaces:
d i f f e r e n t s u b s e t s of a common module's
This
module
Control=
x
can
with
be
Suppose
module
subresources
given
access
A
provides
xl
and x 2 . Each
to
exactly
those
First, if t h e programmer f o r g e t s to
i m p l e m e n t o n e o f t h e s e r e s o u r c e s , t h e compiler will
=The keywords forward and oxtorn are not essential; their effects
can be achieved with compiler directives as well.
35
subresources
t h a t it n e e ( i s :
module A
provide type x = record { xl : int; x2 : real; };
module B
require x.x2
program
code.
Instead
where
they
are
interconnection
opaque
compiler
can be accessed.
cannot
of B will i n d i c a t e t h a t only x . x 2
be
t~amed
and
therefore
t y p e x = record { int; x2 : real; }
of
Protection=
(variables,
parameters,
This is t o p r o t e c t global v a r i a b l e s from
accidental
modifications,
while
other
still
program
(The
default
parts.
is
that
require i l , i2
has
Module
read-only
B2 h a s
specified
imported
is e x p o r t e d
read-write
originate
access
Let
equivalent
of
the
to i l ,
and i2.
but t h e
facilities
have
us
Although
some
adequate,
we
think
proposed
that
it
mechanisms
is
PASCAL
sense
something
from
information
hiding
at
the
inappropriate
On
the
module
that
global
information
use
a
type-
a n d PASCAL, ALGOL, and a s s e m b l e r
as b e f o r e . For modules w r i t t e n
ALGOL-declarations.
translator
Thus,
or
we
need a
"decoder",
that
other
to
could
special
our
primitive
develop
macros
r~cord
PASCAl.
a
the
etc.
compiler
types,
decoder
defining
offsets,
data
For
that
correct
But now
translates
to
l a n g u a g e . In t h a t c a s e , t h e r e is no n e e d
to write
a s p e c i a l d e c o d e r a t all - - w e can use t h e
existing
compiler itself.
course,
if
a
language
as
low-level
as
is u s e d f o r s o m e modules, t h e r e is little
consistency
that
INTERCOL
can
guarantee.
In p a r t i c u l a r , if t h e r e are no t y p e s in a
language,
no
expected.
hand,
example,
sequences,
interface
On
automatic
the
other
type-checking
hand,
closely
can
be
related
languages, o r l a n g u a g e s b e l o n g i n g to a family c a n
interconnection
hiding
we
assembler
b e i n l ~ e r f a c e d w i t h a high d e g r e e of t y p e s a f e t y .
l e v e l c a n b e u s e d t o i m p r o v e s y s t e m f l e x i b i l i t y 11. It
follows
the
assembler,
Of
are
- w h y should a programmer hide
himself?
we
for
f u n c t i o n s , and v a l u e p a r a m e t e r s ) .
assembly
w i t h t h e m . I n f o r m a t i o n hiding local t o a module does
make
that
(for
calling
burden the languages for programming-in-the-small 3
not
assume
of
procedures,
suppose
been
as programming language features before.
the
programming
constructs
generates
and i2, since t h e y
proposed
of
tile
m a p p i n g m u s t I)e r e s t r i c t e d to c o m p a t i b l e language
t o i2 is in error, since t h a t
above
of
m a p s P A S C A L - d e c l a r a t i o n s to ALGOL. Of course, this
in t h a t m o d u l e an(l p r e s u m a b l y n e e d to be
three
a
E v e n t h e s u b l a n g u a g e for t y p e -
source-to-source
modified there.
All
in
in ALGOL, w e n e e d t o t r a n s l a t e t h e s e preludes into
as r e a d - o n l y . Finally, A has
to botll il
implemented
in PASCAL, w e g e n e r a t e p r e l u d e s w i t h e x t e r n - and
to resources il
access
l)e
a s t h e I~rogramminq l a n g u a g e s . For modules w r i t t e n
- - # means read-write
read/write
write-acce=s
variable
the
in INTERCOI. i t s e l f can be r e p l a c e d .
specifications,
- - read-only
access
can
indepen(lent
customization
With
all
is
used.
examples.)
allowing
provide variable i! : int; - - read-write
readonly i2 : int; - - read-only
module B2 require =dl, ~i2
B1
on
programming languages. How
forward-declarations
module B!
restrictions
( W e h a v e c h o s e n a m o d i f i e d PASCAL in tile previous
and record fields are read-only.)
module A
the
c o n t r o l w o r k in t h o s e c a s e s ?
specification
INTERCOL, t h i s c a n h e c o n t r o l l e d e x p l i c i t l y a t t h e
interfaces.
different
languages
record
fields, etc.).
in
modules
of
INTERCOL
Some programming languages
data-resources
variables
enforce
does interface
p r o t e c t i o n a~ p a r t of tl~e d e c l a r a t i o n
read-access
( N e v e = t h e l e s s , f e a t u r e s like
4,3, Multiple Languages
not
Suppose
write
module
b y t h e l a n g u a g e s t h e m s e l v e s so t h a t a
can
number
specify
the
This can be accomplished with a
referenced:
Write
level
at
required resources.)
r e c o r d d e f i n i t i o n c o n t a i n i n g an opaque field, i.e., one
that
should be s p e c i f i e d
r e c o r d f i e l d s and w r i t e - p r o t e c t i o n must be
supported
The require-prelude
they
neechcd:
principles
s h o u l d n o t b e i m p l e m e n t e d a t t h e d e t a i l e d l e v e l of
36
v e r s i o n , w e n e v e r t h e l ~ : s s end up dealing with it in a
4 . 4 . Propagation of Interface Changes
n u m b e r o f v e r s i o n s i n t e r n a l l y : .1here is last w e e k ' s
An
important
management
these
problem
in large p r o j e c t s
is t h e
v e r s i o n , a s t a b l e v e r , ' ; i O l l , atl exl~erilltental version, a
o f i n t e r f a c e c h a n g e s . With our s y s t e m ,
testing
c a n b e p r o c e s s e d a u t o m a t i c a l l y , b e c a u s e all
the needed
i n f o r m a t i c n is c o . l t a i n e d in t h e INTERCOL
description.
C h a n g e r o f imr~rfaces are r e c o r d e d b y
modifying
t l l a t d e s c r i p t i o n and recompiling it.
in
this
before.
case
is
make
sure
that
This
operating
least,
inconsistent
lay-out
o f r e c o r d s ) , r e c o m p i l a t i o n s can be s t a r t e d .
Before
going
designer
have
prone
through
with
a
modification,
c o u l d a l s o b e i n f o r m e d a b o u t how much will
estimate
More.
the
impact
inH)ortant
still,
the
precise
chanties
way
can
sent
p r o q r a m m e r s of t h e a f f e c t e d modules
functional
hardware
and
the
The
ntltti,.~rol.lS
manaclement
versions
and
creates
V~:rsio=~ ,~ontrol is d e s i g n e d to
o f orqaniTinq sttch a v a s t collection of
More
..H)ecilically,
version
control
the following:
a n d t h e INTI-I}COL. d~...,;cril)tion, v e r s i o n
c o n t r o l d e i e r m i n e s w h i c h v e r s i o n s of
w h i c h component.~ should be combined
t o c r e a t e , a particLdar v e r s i o n of a
p a r t i c u l a r conficlnration.
be
in
groups,
the
-Version S~.q~?ction. With a .';at of rules
a p r o p o s e d cllange.
documented
to the
a
of
to
t h e p r o f l r a m m : : r from t h e t e d i o u s and e r r o r task
automates
t o b e r e c o m p i l e d or rel~rogrammed, so t h a t he
can
repair12.
of
components.
the
pro qramn~eer A's
s y s t e m s , r e o r g a n i z a t i o n , and last, but not
problems.
relieve
( l i k e c h a n g e s to c o n s t a n t s or
user
changes
error
serious
version,
OI.her v e r s i o n s arise dtte to
individual
maintenance
m o d u l e s c a n n o t b e u s e d until t h e y are u p d a t e d . For
minor modifications
to
enhancements,
The minimum a c t i o n to be t a k e n
to
(lelJugqing
version, etc.
tailoring
w i l l u s u a l l y d e s t r o y t h e cllobal i n t e r f a c e c o n s i s t e n c y
established
and
temporary
and a u t o m a t i c a l l y
( b y p u t t i n g m e s s a g e s into m a i l b o x e s , for i n s t a n c e ) .
-Con.~truction. Ver.~ion control oral)adios
After
an
determine
tile
preludes
be
interface
affected
described
implemented
comparison
reveals
exactly
to
take
was
were
modules.
have
to
Given
(letail~--.cl knowleclEle, al)ont t h e various
c o n s t r u c t i o n proce:~sors t h a t n e e d to
b e i n v o k e d t o g e n e r a t e a runable
program.
the
a straiclht-forward
of
the
which
old
manner: A
and n e w
preludes
module-interfaces
-Spaee/Ti/nc~ Trarh:off. Version control
were
m a i n t a i n s a d a t a I)a~,e of s o u r c e t e x t
a n d t h e d e r i v e d ver...;ions like o b j e c t
hie(hales, I ) a r t i ~ l l y linked s u b s y s t e m s ,
etc.
It t r i e s to opLiltfize the .~;I)ace/
time
tradeorf
of
storiticj
derived
versions
or r e g e n e r a t i n g Lhem on
demand.
i n t o a c c o t m t w h e t h e r a required r e s o u r c e
no
u s e d in t h e implementation; c h a n g e s
difference
not used.
isolated,
the
obsolete,
for
required
rosa[trees
that
O n c e t h e it~consistent modules are
version
control
precompiled
recompilations,
modules
first
Of c o u r s e , t h e comparison can be refined
actually
make
we
it~ a pr~:vious section, this can
in
simple
changed.
change,
and
system
versions,
flenerate
change
t h a t n e e d to be r e v i s e d .
simple c h a n g e - r e q u e s t s
can
delete
start
some
notices
-Reconstruction.
If
a new
source
v e r s i o n e n t e r s t h e d a t a b a s e or if
interfaces
c h a n g e , v e r s i o n control
determines
which
pro-constructed
s u b s y s t e m s a r e ob.,=ol¢:te. r h e y will
b e r e c o n s t r u c t e d on (]emand.
for
In this fashion,
as w e l l as major design
r e v i s i o n s c a n b e m a t l a g e d e f f i c i e n t l y and reliably.
in
5 . V e r s i o n Control
order
to
de,scribe
configurations,
System
maintenance
in
complicated
by
projects
is
different
versions
system
is
planned
large
the
proliferation
and c o t ] f i g u r a t i o n s .
to
be
programming
available
accommodate
of
in
Even if a
an
family,
in a single
we
multiple
expanded
versions
INTERCOL
and
to
t h e s e wotiot~:;. [acl~ module or s y s t e m
INTERCOL
whose
The description
37
I'ave
descril~tion is n o w v i e w e d as a
n}eml)ers a r e t h e various versions.
c a n t h e n be e x p l o i t e d to a u t o m a t e
the above
f u n c t i o n s . (For a d i f f e r e n t approach, t h e
interested
r e a d e r is r e f e r r e d t o Cooprider 13.)
t h a t c a n l)e g e n e r a t e d b y d i f f e r e n t
settings
of
c o n d i t i o n a l compilation
s w i t c h e s fall in this c l a s s too.
5 . 1 . Module Families
5 . 2 ° S y s t e m Families
W e d i s t i n g u i s h t l l r e e o r t h o g o n a l kinds of members
A
of a module family.
system
family
compositions.
1. Implementations. Impl(.'mentations of a
m o d u l e f a m i l y a r e t h e a c t u a l source
programs.
T h e y s h a r e the same
i n t e r f a c e and a b s t r a c t s p e c i f i c a t i o n s ,
b u t m a y l)e iml)lemenl.ed d i f f e r e n t l y , in
different
lan(lUa~le.'q or t a i l o r e d to
different
envirol}m(:nts,
el)crating
s y s t e m s , or usher groups, For e x a m p l e ,
a
program
:liar
ruIIS iIn(ler t w o
d i f f e r e n t o p e r a t i n g :;ystelilS may h a v e
t w o d i f f e r e n t w : r s i o n s of the module
t h a t p r o v i d e s t h e i(lealized o p e r a t i n g
system environment.
components
consists
Each
which
of
a
series
of
composition
is
a
of
are
other
list
module or
system
f a m i l i e s . Thus, e a c h c o m p o s i t i o n r e p r e s e n t s not only
o n e , b u t a w h o l e s e t of f a m i l y members, d e p e n d i n g
o n h o w r i c h t h e f a m i l i e s of its c o m p o n e n t s are.
specific
by
A
m e m b e r o f a c o m p o n e n t can be s e l e c t e d
indicating
version
of
implemP.l~tation, revision, and d e r i v e d
a
composition
module
and
family,
components
or
of
by
indicating
a system
family.
T h i s l e a d s t o a r e c u r s i v e d e s c r i p t i o n , which can be
simplified considerahl,l with defaults.
Example.
Suppose
M1
and
M2
are
module
f a m i l i e s , M 1 . 1 a n d M 1 . 2 a r e il]~plementations of M1,
2. Rovi.sions. Each i m p l e m e l l t a t i o n e x i s t s
as a sequence
of r e v i s i o n s t h a t
succeed
each
other
in
the
d e v e l o p m e n t h i s t o r y . Each r~¢vision is
a m o d i f i c a t i o n of t h e p r e v i o u s one. For
e x a m p l e , f i x i n g a hug in t h e l a t e s t
revision
of
an
implementation
g e n e r a t e s a n e w one. All revisions of
an iml)len~entation a r e linearly o r d e r e d
b y t h e i r c r e a t i o n time. Althougl~ the
n u m b e r o f r(~visions can be quite
l a r g e , t h e i d e a is t h a t normally one
d e a l s o n l y w i t h t h e top few, for
e x a m p l e t h e e x p e r i m e n t a l , t h e stable,
a n d t h e b a c k u p revL,;ions.
and
M2.1
S.S1
a n d M 2 . 2 a r e i m p l e m e n t a t i o n s of M2. If
= { M 1 , M 2 } is a composition of a s y s t e m
family
S,
three
then
the
following
examples represent
m e m b e r o f S:
S.S 1(M 1. J.: 7 9 0 G 14:Opt, M2.2:79 04_22:0pt)
S.S 1(MI.2, M2.2)
£.S1
The
first
example
implementations,
versions
(optinHze(I)
example
in t h i s
selected.
Versions. D e r i v e d v e r s i o n s
are
generated
automatically
from
revisions
of
implementations.
For
example,
each
revision
of
an
implementation
written
in p o r t a b l e
Bliss c a n b e c o m p i l e d into a program
t h a t r u n s on a P D P - 1 1 , a PDP-IO, or a
VAX
([liven
that
no
machinedependent
featurf:s
of
Bliss-16,
B l i s s - G 6 , or R l i s s - 3 2 are used). Other
d e r i v e d v e r s i o n s can be p r o d u c e d b y
a c o m p i l e r t h a t g~.nerates optimized or
non-optimized
c o d e , c o d e w i t h or
without
r u n - t i m e c h e c k s of a r r a y b o u n d s , w i t h or w i t h o u t d e b u g g i n g and
i n s t r u m e n t a t i o n hooks.
The v e r s i o n s
exist
The
and
the newest
second
derived
revisions are
they
will
be
used
regardless
of
t h e y a r e o p t i m i z e d or hot; o t h e r w i s e , non-
optimized
third
(leMre(I.
re.visions
case,
which
If p r e c o m p i l e ( I d e r i v e d v e r s i o n s of t h e s e
already,
whether
explicitly
( b y (late), and d e r i v e d
at,:
suppresse.~
versions;
8. Derived
indicates
revisions
d e r i v e d v e r s i o n s will be g e n e r a t e d .
example
The
d o e s n o t mention implementations a t
all; in t h i s c a s e , t h e d e f a u l t i m p l e m e n t a t i o n s o f M1
and M 2 a r e s e l e c t e d .
5.a. A Complete Example
We
now
primitive
38
present
parser
members
that
machines
and
our
as
can
under
a
earlier
system
execute
two
e x a m p l e of
the
family
two
on
two
diffetent
with
different
operating
systems.
activities
fluctuate.
For e x a m p l e , t h e modifications
t o a p a r t i c u l a r s u b s y s t e m m a y go through c y c l e s of
system PARSER
h i g h a n d l o w a c t i v i t y . As t h e s u b s y s t e m a p p r o a c h e s
a
module ]0
provide
function SrcChar : ehar~
¢onst lineLn;
type
Line = record { lineNum :int;
lineBuf : array[L.lineLn] of char; };
procedure ListLine(outLine : ~Line);
the
for
version
they
changes
When
module,
version
because
of
interface
of
machine, w e o b t a i n a
is
that
a
the
By pairing LEXAN
the
cycle
can
optimize the
and
The t y p i c a l w o r k -
p r o g r a m m e r r e p e a t e d l y goes
of
modification,
execution.
compilation,
Assume
that
the
is w o r k i n g in an e x p e r i m e n t a l a r e a (a
f o r i n s t a n c e ) w h i c h contains a c o p y
module
system
controller
t i m e for t h e t e s t s y s t e m in which the
sub-directory
of I0, and compiling for
o f PARSER f o r a PDPIO.
the
is
R e - g e n e r a t i o n occurs on
m o d u l e is e m b e d d e d .
programmer
is c o m p a t i b l e BLISS. By pairing LEXAN with
target
and
It
-Ihe only time t h a t t h e
obsolete
version
integration,
t h e r e is o n l y o n e ; l e t us assume, the d e f a u l t
the
module
a p r o g r a m m e r is t e s t i n g and debugging a
re-integration
the
through
as
each
requested.
or new revisions.
the
T h e i m p l e m e n t a t i o n o f LEXAN n e e d not be mentioned
PDPIO
of
was
demand only.
pattern
the
for a long time, it
c o n t r o l l e r d e l e t e s d e r i v e d v e r s i o n s is w h e n
beco~le
f o r T O P S I O , an o p e r c t i n g s y s t e m for a DEC-PDPIO.
the TOPSlO°implementation
version
that
in o r d e r t o c o n s e r v e s p a c e .
modified
language
partially
p r o g r a m m e r ' s r e s p o n s i b i l i t y t o d e l e t e some of t h e s e
H Y D R A - o p e r a t i n g s y s t e m running on C.mmp, and one
since
to
The v e r s i o n c o n t r o l l e r maintains t h e
derived
(sub-)system
one
appropriate
space.
latest
iml)lementations,
is
is n o t n e e d e d
the following:
composition CMMP = { LEXAN, ]O.HYDRA }:TarBet.PDP[ t
composition PDPJO = { LEXAN, |O.TOPS } :TarBet.PDPJ0
end PARSER
two
it
As a s i m p l e , s e m i - a u t o m a t i c solution w e propose
module LEXAN
provide
type
Lexerne = (Keyword, Operator, Identifier)~
function NextLe× : Lexeme;
require
SrcChar, lineLn, Line.{lineNurn,lineBuf}, ListLine
end LEXAN
has
state,
it a n d s t o r e it for l a t e r use. H o w e v e r , if
subsystem
wastes
implementation HYDRA.bliss
implementation TOPS.bliss
end IO
I0
stable
integrate
M
he
is
updating.
Suppose t h a t
X is t h e t e s t b e d for M. W h e n e v e r he issues
with
IO.HYDRA a n d compiling for a PDP11 t a r g e t , w e
t h e c o m m a n d t o r e - i n t e g r a t e X, he i n d i c a t e s tl]at he
can
generate
wants
a version
multiprocessor
that
runs on C.mmp (a
to substitute
also generates
5.4. System
The
Generation
INTERCOL d e s c r i p t i o n
revisions
stack
versions
are
automatically.
optimization
machine
to
SDC 14
and
SCCS 15.
constructed
and
One
can
either
shortens
integrated
determined
Unfortunately,
statically,
the
optimum c a n n o t
to
of
linked
X
in.
from
This
scratch
saves
for
the
every
above
is
the
a
simple
integration
cache
til~le for
scheme
which
recently
used
C o m b i n e d w i t h t i m e - o u t s for deletions
f r o m t h e c a c h e , it s h o u l d t a k e c a r e of most of t h e
consume
space-management
t i m e b y r e g e n e r a t i n g d e r i v e d versions on
disk.
has
subsystems.
for
program d e v e l o p m e n t and
maintenance.
demand, o r o n e c a n s a v e t h a t time b y storing them
on
be
M
The
Derived
This p o s e s a classical t i m e / s p a c e
problem.
In all s u b s e q u e n t i n t e g r a t i o n s of X,
only
m o d i f i c a t i o n o f M.
o f an i m p l e m e n t a t i o n are maintained in a
similar
a p a r t i a l l y i n t e g r a t e d s y s t e m X with
only M unbound.
re-integration
is used to s e t Ul) a
b a s e t h a t s t o r e s t h e v a r i o u s components. The
data
t h e n e w l y modified M. The first
t i m e h e i s s u e s t h a t command, t h e v e r s i o n controller
c o n s t r u c t e d o u t of 16 DEC-PDP1 l s).
be
In t h e p r e v i o u s s e c t i o n s w e d i s c u s s e d how the
because system generation
various
39
family
members
are
selected.
System
generation
is
integration
scheme.
interleaved
This
performed
wilh
There
the
may
compile/
be
in t h i s t a s k .
several
p h a s e s of compilation and integration.
is d u e t o t h e f a c t
only logical interfaces.
m a c h i n e s c a n handle it e f f i c i e n t l y and reliably.
t h a t INTERCOL describes
A logical i n t e r f a c e contains
6. Status (Juno 1979)
e n o u g h i n f o r m a t i o n to perform the first compilation
p h a s e , n a m e l y s y n t a c t i c and semantic checking and
the
generation
there
code
of
i n t e r m e d i a t e code.
W e h a v e i m p l e m e n t e d a demonstration system to
However,
test
is n o t e n o u g h information to g e n e r a t e final
because
are
missing.
Examples
are
values
constants,
a r r a y hatreds, r e c o r d sizes, field o f f s e t s ,
decide
to
make
the
logical
of
interface
taken
in
the
undesirable
system
specifications
(this
MESA-system).
of
because
this
data
arrays,
r e s t r i c t the w a y s d i f f e r e n t versions
follows:
The
first
related
into
intermediate
interfaces
code
in which
performs
base.
Next,
physical
the
and s t o r e s
integration
interfaces
of
the
opaque
data
is s a f e
in the sense that
it is
address
aritllmetic.
(For
derefereneing,
accessing
records
and
and e v e n t y p e - h r P a c h i n g are all c h e c k e d
languages.
C and TC d i f f e r
We
chose TC as the t y p e -
sublangaJage for INTERCOL. Of course,
guaranteed
for
and w r i t e - p r o t e c t i o n can only
module~ w r i t t e n
in TC.
For
I m p l e m e n t a t i o n of, and e x p e r i m e n t a t i o n with, the
earlier
the physical
version
especially
o f r e q u i r e d r e s o u r c e s are still unbound.
resources
partially
as w r i t e - p r o t e c t i o n for data.
l o g i c a l a n d p h y s i c a l i n t e r f a c e s at the moment.
system
T h i s p h a s e a l s o e x t r a c t s th,~. physical i n t e r f a c e s of
provided
pro(Iramminq languages
s i m p l i f i c a t i o n , w e do not make a distinction b e t w e e n
c o m p l e t e t y p e - c h e c k , n o of ,~ module and t r a n s l a t e s
it
and
well
strong type-checking
problems, w o r k s as
phase
the
through
specification
compilation/integration
compilation
Its
e n o u g h t o s h o w t h e f e a s i b i l i t y of interfacing closely
be
avoids the3e
for
f o r p o t e n t i a l protP.ction violations.)
body.
complicated
iml)lements
p a s s i n f l p a r a m e t e r s , c r e a t i n g or returning
pointers,
Furthermore, this
f a m i l y w o u l d h a v e t o f u n c t i o n w i t h the same inline
which
as
except
example,
i n l i n e p r o c e d u r e s w e r e p r e s c r i l ) e d in the interfaces,
more
curr~:ntly
i m p o s s i b l e t o gain w r i L e - a c c e s s to w r i t e - p r o t e c t e d
is
t h e n all r e v i s i o n s of all implementations of a module
A
and
TC is a s t r o n g l y t y p e d variant of C,
Write-protection
c a n b e c o n s t r u c t e d . For e x a m p l e , if the bodies of
scheme,
and
opaque
structures
struct~=re may I)e aJnal)le to provide enough
would severely
INTERCOL
supporting
and
the d e s i g n e r of tile overall
d e t a i l t o d o t h e i)hysical bin(ling.
[~[)1>11/40
c o n t r o l as d e s c r i b e d in section 4.
C 1 6 a n d TC 17.
approach w a s
However,
a
main c o m p o n e l l t S are compilers for all early version
p h y s i c a l i n t e r f a c e i d e n t i c a l and include them fully in
the
on
interface
b o d i e s o f inline p r o c e d u r e s , and generic definitions.
could
a n d r e f i n e our ideas. The s y s t e m runs Lander
UNIX
p h y s i c a l pr(~perties of the i n t e r l a c e
elements
One
In any reali~flic s o f t w a r e project, it is
t o t a l l y h o p e l e s s to perl'or;, t h a t task by hand; only
with
greatly
respect
improved
INTERCOL,
to the r e p r e s e n t a t i o n of
f a m i l i e s . Fleimplementation i=lcluding version
c o n t r o l is p l a n n e d .
them in the data
phase collects the
module's
required
7. C o n c l u s i o n s
r e s o u r c e s , o n c e f o r e a c h configuration in which the
m o d u l e is u s e d .
resources
Note t h a t the origin of tile required
We
is n e e d e d t o d e t e r m i n e which physical
interfaces
to
interconnections
use.
This
is
derived
from
the
generate
described
and
guarantees
s p e c i f i e d in the INTERCOL program.
the
programmed
F i n a l l y , t h e l a s t p l l a s e uses tile physical i n t e r f a c e s
to
have
development
m a c h i n e c o d e , again once for each
integrated
structural
system
interconnections
an
maintenance
and
software
environment that
consistency
with
respect
version
of
a
to
integration.
,Summarizing, its facilities are as follows:
configuration.
Interface
C l e a r l y , t h e r e is s u b s t a n t i a l bookkeeping involved
Control g u a r a n t e e s the c o n s i s t e n c y of
the interfaces
ensures
40
global
b e t w e e n the s y s t e m components. It
type-correctness
by
performing
inter-module
information
type-checkinfo.
It
implements
I m p a c t of Mesa on System Design, pages ?.
ACM, IEEE, ERO, GI, Sept. 1 9 7 0 .
hiding w i t h d e t a i l e d name control and
write-protection.
It
detects
the
inconsistencies
c a u s e d b y i n t e r f a c e chart,lies and takes appropriate
action.
7.
B i r t w i s t l e , G., En(h:zin, L., Ohlin, M. and
Palme, d. DECsystem-10 Simula Language
t t a n d b o o k Part 7. Rap. C 8 3 9 8 , Swedish
N a t i o n a l D e f e n s e Research Institute, March
1976.
8.
W h i t e , John R. and Anderson, Richard K..
S u p p o r t i n g t h e S t r u c t u r e d Development of
C o m p l e x PL/I S o f t w a r e Systems.
S o f t w a r e - P r a c t i c e and Experience 7
(1977), 270-293.
9.
M i t c h e l l , d a m e s G., Mayl>ury, William, and
S w e e t , Richard. ML~sa Language Manual.
X e r o x Pale Alto Rer;earch Center, Feb.
1978.
10.
C l e v e l a n d , J . C . The Environ and Using
F a c i l i t i e s o f ,41gel G(~C. Computer
S c i e n c e D e p a r t m e n t , UCIA, April 1975.
11.
P a r n a s , David t . On the Criteria To Be Used
in D e c o m p o s i n o Sy;~tems into Modules.
C o m m u n i c a t i o n s of t h e / ] C M 15, 2 (Dec.
1972), 1053-105~.
12.
B e l a d y , L.A. and L~:hman, M.M. A Model for
L a r g e Program D e w : l o p m e n t . IBM Systems
J o u r n a l 1.G. 3 ( 1 9 7 6 ) , 2 2 5 - 2 5 2 .
13.
C o o l ) r i d e r , Lee W. The Representation of
F a m i l i e s of P r o g r a m m e d Systems. Ph.D.
Th,, Carney;lie-Mellon University, Department
o f C o m p u t e r Scienc(:, 1078.
14,
H a b e r m a n n , A. Nice. ,4 Software
Development Control System.
C a r n e g i e - M e l l o n University, Department of
C o m p u t e r S c i e n c e , 1970.
15.
Rochkind, Marc J. The Source Code Control
S y s t e m . IEEE Transactions on Software
E n g i n e e r i n g S E - I , 4 (Dec. 1075),
064-070.
16.
K e r n i g h a n , Brian W. and Ritchie, Dennis M.
The C P r o g r a m m i n g Language.
P r e n t i c e - H a l l , 197{;.
17.
T i c h y , W a l t e r F. The TC-Manual. TC is a
s t r o n g l y t y p u d version of the C-language,
d e v e l o p e d a t the Computer Science
D e p a r t m e n t of Carnegie-Mellon University.
M u l t i p l e l a n g u a g e s can be accommodated.
Version
Control
generation
in
system.
It
selecting
a
performs
ensurE..:
versions
automatic
system
multi-version/multi-configuration
structural
correctly.
consistency
by
It performs f l e x i b l e
v e r s i o n i n t e g r a t i o n b y handling logical and physical
interfaces.
It mana qes a data base of numerous
components
and optindzes tile s p a c e / t i m e t r a d e o f f
of storing/regenerating
changes
by
subsystems.
detecting
inconsistent
It responds to
and
deleting
thank
A. Nice
obsolete versions.
Acknowledgments:
I
wish
to
H a b e r m a n n f o r num~.rous discussions and valuable
s u g g e s t i o n s , and Frank Deremer for his hell) in the
d e s i g n o f an e a r l y v e r s i o n of INTERCOL.
References
7.
B e l a d y , L.A. l arfle Soflware Systems.
Rap. R C - 6 9 0 6 , IBM I boreas J. Watson
R e s e a r c h C e n t e r , dan. 1978.
2.
B e l a d y , L.A. arid Lehman, M,M. The
C h a r a c t e r i s t i c s of I ar(le Systelns In Peter
W a g n e r , I~eso, lrch Directions ili Software
Enginoerin.q, M.I.T. Press, 1979, pp.
106-138.
3.
D e R e m e r , Frank and Kron, Ilans H.
P r o g r a n ] m i n g - i n - t h e - LI a r g e vs.
P r o g r a n m f i n g - i n - t h e - S m a l l . IEEE
Transactions on Software Engineering SE-2,
2 ( J u n e 1 0 7 6 ) , 80-~$G.
4.
5.
6.
T i c h y , W a l t e r F. INTERCOL User Manual.
C a r n e g i e - M a r i o n University, Department of
C o m p u t e r S c i e n c e , 1 0 7 0 . To be published.
Morris,,lan~es. The Sniggering
l y p e - C h e c k e r Fxp~:riment. An e x p e r i m e n t
c o n d u c t e d w i t h the Mesa t y p e - c h e c k e r at
X e r o x Pare, Palo Alto; p r i v a t e
communication.
Lauer, Hugh C., S a t t e r t h w a i t e , Edwin H. The
41