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
© Copyright 2024