soft-eng@MITRE.ARPA.UUCP (06/05/88)
Soft-Eng Digest Sat, 4 May 88 V: Issue 9 Today's Topics: Fortran follies (3 msgs) Has anybody heard of "SABLE"? More SCCS usage/Has anybody heard of "SABLE"? (2 msgs) Paradigms for source control (6 msgs) requirement specification Source code control and DOS/LAN use ---------------------------------------------------------------------- Date: 13 May 88 03:25:48 GMT From: portal!cup.portal.com!Paul_L_Schauble@uunet.uu.net Subject: Fortran follies I'm presently working on maintaining a Fortran compiler for a mainframe computer manufacturer. I've had a few requests lately that I'd like to throw out for opinions. Flames accepted too. The machine in question is a segmented architecture. Each segment has its own size and read/write permissions. Unfortunately, the hardware only permits 512 segments visible at one time, so they can't be used for individual arrays. The compiler has basic scalar optimization and automatic vectorizing. The first program is this program main real a(10000), b(10000) ... call sub (a, b, 10000) ... end subroutine sub (a, b, n) real a(1), b(1) <-- note dimensions do 1 i = 1,n 1 a(i) = complex expression with a(i) and b(i) .... The vectorizer looked at this and said that the maximum size of the array is 1, therefore the maximum subscript is 1 and the vector temporary needed in the subroutine only needs to be one word long. Of course, the real vector size in n. Second program is this program main ... common /one/ a(1) common /two/ space(100 000) common /tre/ alast ... c calculate sizes of sub arrays il1 = something il2 = something else il3 = yet more c calculate starting points of sub arrays ist1 = 1 ist2 = ist1 + il1 ist3 = ist2 + il2 c call working subroutine call subbr (a(ist1), a(ist2), a(ist3), il1, il2, il3) ... end subroutine subbr(x, y, z, ilx, ily, ilz) real x(1), y(1), z(1) c long calculation using x, y, z as arrays ilx, ily, and ilz long ... end It's an interesting attempt at dynamic storage allocation. This is from the CERN library, which is appearantly popular in Europe. My problem is that the compiler puts each common block in its own segment, so that all of the references to a produce segment protection faults. Now, I know that both of these are non-standard. The last not only assumes that all of common is in one segment but also assumes the order in which the common blocks are laid down in memory. The technique would work if used within a common block. But they become significant issues to me when the customer bugs my management to change the compiler to support these programs! They say that they don't want to change their code. I wonder of other compiler groups have hit these issues, and, if so, what have you decided to do about them? Is there really a significant amount of Fortran code out there that does this type of thing? Is it really possible to do Fortran on a segmented architecture machine or do prevailing coding practices rule it out? My thought is that these practices were ruled out of the standard for very good reasons. But the customer is still always right. ------------------------------ Date: 15 May 88 00:20:48 GMT From: trwrb!desint!geoff@bloom-beacon.MIT.EDU (Geoff Kuenning) Subject: Fortran follies In article <5377@cup.portal.com> Paul_L_Schauble@cup.portal.com writes: > subroutine sub (a, b, n) > real a(1), b(1) <-- note dimensions Since variable dimensions have been part of standard Fortran for over ten years, there is little excuse for using this older technique. However, it used to be very popular, so I suppose the customer has an argument in expecting the compiler to support it. Isn't the vectorizer smart enough to see that the loop overruns the array? > common /one/ a(1) > common /two/ space(100 000) > common /tre/ alast This is totally unacceptable. In particular, I have used Fortran compilers (actually linkers) that created common in order of declaration, and others (e.g., DEC, I think) that sorted it into alphabetical order. This code would not work on a DEC, since "alast" would precede "space". The standard explicitly and loudly prohibits assumptions about the order of common. In this case, I think you should tell your customer to read the standard and stuff his program in a certain dark place. ------------------------------ Date: 17 May 88 14:43:57 GMT From: pyramid!prls!philabs!pwa-b!mmintl!franka@decwrl.dec.com (Frank Adams) Subject: Fortran follies In article <5377@cup.portal.com> Paul_L_Schauble@cup.portal.com writes: > real a(1), b(1) <-- note dimensions At least one Fortran compiler I have used generated faster code with these declarations than with the alternative a(n), b(n). The latter did some initialization, even when it wasn't used. I would recommend that you regard a dimension of 1 for an argument as meaning that the dimension is undefined. It's not pretty, but it works. ------------------------------ Date: 8 May 88 03:04:01 GMT From: vsi!friedl@uunet.uu.net (Stephen J. Friedl) Subject: Has anybody heard of "SABLE"? I wonder if anybody out there has any knowledge of a SABLE, an SCCS-based configuration management system done by the same AT&T group that built nmake. All I know is what I've indicated here, and I'm interested in finding out more about it. Related to this, I have found that naked SCCS is really not suitable for doing even small projects and would like to find something more. I have tried to build tools on top of SCCS and am getting closer, but "The Right Way" has eluded me. Who knows of good configuration management software based on SCCS? Even ideas would be helpful. ------------------------------ Date: 12 May 88 01:34:22 GMT From: mcvax!ace!konijn@uunet.uu.net (Erik van Konijnenburg) Subject: More SCCS usage/Has anybody heard of "SABLE"? In the recent summary of SCCS experiences, the following note touches on one of the most important parts of version control: keeping multiple files consistent. > Charles Lambert <cl@datlog.co.uk>: > > ... Keep a System Description File that > lists all the version-numbered sources needed for a correct build. This > is simply a text document that has to be kept up to date. Since nobody > remembers to keep documents up to date, it is wise to have your shell > scripts do it automatically: every time someone deltas a file, the new > version number gets written into the SDF. And in article <647@vsi.UUCP>: > Stephen J. Friedl <friedl@vsi.UUCP>: > > [ Question about Sable ] > > Related to this, I have found that naked SCCS is really not > suitable for doing even small projects and would like to find > something more. I have tried to build tools on top of SCCS and > am getting closer, but "The Right Way" has eluded me. Who knows > of good configuration management software based on SCCS? Even > ideas would be helpful. > Using System Description Files is definitely the right direction for version control. If these files have a fixed format, they can become the basis of tools for practically all your source control. -- It is possible to create source distributions automatically. -- It is possible to produce a diff listing between two versions, not of a single file, but of a complete product, complete with the SCCS comments for all these changes. -- Since the version of the snapshot file is a complete identification of the product, it is sufficient to put the version of the snapshot file in a product. This means you no longer have to wade through pages of version strings to get the one you are interested in. -- By using SCCS simply as a "backend", much more flexibility is available. For instance recursion: one single version number identifies a complete distribution by giving the version numbers of component parts, which give the version numbers of component parts, and so on. -- The version identification of a System Description File is a great shorthand in communication between developers and distributors: ``Version 6.25 of the C compiler does loop invariant code moving, and could you do a trial UNIX distribution and validation with it?'' Generating the distribution is then a matter of passing that single version number to an extraction tool. We built a system based on System Description Files, and find it indispensable in keeping order in our distribution (several hundred megabytes of kernels, uitilities, compilers, etc.). There is a short paper on these version control tools and how they fit in with validation, distribution generation, and software problem report management. If you're interested in a copy, send mail to: Eric van Konijnenburg, +31 20 646416 konijn@ace.nl or ..!uunet!mcvax!ace!konijn ------------------------------ Date: 13 May 88 18:07:36 GMT From: steinmetz!davidsen@itsgw.rpi.edu (William E. Davidsen Jr) Subject: More SCCS usage/Has anybody heard of "SABLE"? There is a technique I use for keeping things in line with SCCS. Perhaps it's widely know and not used for some reason, but here it is. Assume I'm at a production level, say 1.1, and am ready to make another upgrade. First I pull an initial branch of all the files: for n in s.*; do get -b $n; done Now when I want to change something I do: get -e -t s.whatever which keeps things moving along the branch. When I delta I add comments as always. When I'm ready to update to the next production level (which in this case will be 1.2) I just do: for name in s.* do get -e -t -r1.1 $name delta -y"Production version" $name done This will force all programs to have a version of 1.2, even if they weren't changed. I do the intermediate access with a script which does an extract if there is no writable version, asks if I want to edit, asks if I want to make, etc. Not elegant, but simple, easy to use, and reliable. ------------------------------ Date: 13 May 88 21:06:38 GMT From: amdahl!pyramid!prls!philabs!pwa-b!mmintl!franka@ames.arpa (Frank Adams) Subject: Paradigms for source control In article <5291@cup.portal.com> jxh@cup.portal.com writes: >I have been sort of working on Revise, which is a descendent of UPDATE/MODIFY >from the Cybers, in that it has some of the same basic assumptions, namely >that there are Decks containing Lines (they got rid of the word Card at >this point), and that lines may be Active or Inactive, and that they may b >inserted, and deactivated, but not actually deleted, by a modset. A >modset can also reactivate "deleted" lines. > >There are those in Unix land who use a program called SCCS, and [others]. >They operate by controlling the "checking out" and subsequent "checking >in" of modules. One checks out a module, edits it, and checks it in, >identifying a "version" as the label for this instance of that module. I have considerable familiarity with this latter class of code control systems (including having written one), but I have never before encountered the former kind. I am having some difficulty understanding just how it is supposed to work. Everyone involved in the discussion apparently was quite familiar with them, so the above is the best description of them supplied. It leaves quite a bit unanswered. I will attempt to describe the system based on my understanding of it; I would appreciate it if the original poster or someone equally competant would review this, note any misconceptions, and answer my questions. I will be concentrating on "how to use the system", not "how the system works"; the lines quoted above seem to cover that pretty well. It appears that the main editing done by programmers using such a system is the creation of "modsets". These, in general, specify that certain lines are to be inserted into a particular piece of source code. (I gather some systems allow more than one piece of source (source file or "deck") to be updated with the same modset. Maybe they all do?) In addition, a modset may specify that certain lines of code be deleted (deactivated), or that certain lines which were previously deleted be restored. I don't know how the lines to be inserted or deleted are identified. I would guess that each line has a line number, and that new lines are inserted so that their line numbers remain in order. It appears that traditionally, programmers directly created modsets, and that it is a relatively new and far from universal thing for them to edit the entire source file, and create the modfile mechanically. It appears that the compilation step (in the development cycle) with such a system is preceded by combining the programmer's modsets with the current state of the code control system to produce the actual source to be compiled. When a programmer is satisfied with his changes, he "signs in" his modfile(s). There may(?) be a review by someone before this actually becomes part of the standard. -------- It seems to me that the main problem with this kind of system is sorting out simultaneous changes to the same piece of code. It seems to me that the advocates of this approach have become so used to dealing with this, that they simply accept it as part of the system. (In the comments I saw, there were several suggestions for *mitigating* the problem, but no hint that it was something one might want to *eliminate*. It is a key advantage of the SCCS-style approach that it does avoid the problem.) I should note my own preference (not fully shared by my current co-workers). I prefer an SCCS-style code control system, in conjuction with a convention that there is only one entry point per file. If, as is good for other reasons as well, the functions are all kept relatively small, then all the source files are small. This means that two programmers trying to access the same file at the same time are really trying to change the same code, and one of them should wait for the other to finish. (The inability for two people to modify the same module at the same time is the characteristic problem of this style of code control system, as integrating simultaneous changes is the characteristic problem of the other.) One *must* support this with some kind of include file system, so that declarations can be consistent across modules. The inclusion process need not be regarded as the responsibility of the code control system, however. (The include files themselves are source files to be maintained; but that is another matter.) ------------------------------ Date: 16 May 88 23:56:06 GMT From: amdahl!nsc!woolsey@ames.arpa (Jeff Woolsey) Subject: Paradigms for source control In article <2846@mmintl.UUCP> franka@mmintl.UUCP (Frank Adams) writes: >I have considerable familiarity with this latter class of code control (SCCS/RCS/PVCS et. al. (S/R/P hereinafter)) >systems (including having written one), but I have never before encountered >the former kind. (MODIFY/UPDATE/REVISE et. al. (M/U/R hereinafter)) >I am having some difficulty understanding just how it is supposed to work. >Everyone involved in the discussion apparently was quite familiar with them, >so the above is the best description of them supplied. It leaves quite a >bit unanswered. Let me provide a simple, yet complete run-down of the M/U/R model. The differences between the three are implementation issues, or small variances within the paradigm. There exists a Program Library (PL) consisting of source program modules (decks), include files (common decks), named changes (modsets), and a directory (for random access). The PL is a single file. Its appeal is its integrity. Some effort is required to delete part of a PL. If you have the PL, you have the whole source. When you want to compile a program in a PL, you direct M/U/R to make a compile file. This file is fed to the assembler or compiler as is. Each line in it consists of the source line and a sequence number. The sequence number is the name of the deck or modset followed by the ordinal of that line within the deck or modset. Common decks are the same as source decks except that they have a bit set meaning that they can be included (at compile-file time) in another source deck. Their original purpose was to hold all the COMMON declarations in FORTRAN programs. You cannot generate a compile file from just a common deck. A modset consists of its name, the name of the deck to modify, and insertion or deletion directives each followed by abritrarily long sections of text. The text is inserted at the point the insertion or deletion directives refer to. The insertion points are desginated as modname.seqno or deckname.seqno, or just seqno if an original card in the deck is desired. Deletion points can specify a range of lines. The resemblance to drawers of punched card decks is the obvious ancestry. It's probably obsolete, although lines are still pretty pervasive as the unit of change in source control. Modset creation generally means that you take a nice assembly/compiler listing (made from the compile file with its sequence numbers) and go off into a corner and mark it all up. Then you figure out which lines are the insertion and deletion points, and type up your new text in between directives. Then you reenter the edit-compile-debug loop. Eventually the process was automated with tools analogous to diff -e. If a source deck contained enough modsets such that not more than some arbitrary number of lines were original code, it was said to need resequencing. This is a fairly major event in the life of a deck, and probably only happens twice. It destroys all the modset information while retaining the net changes. The OS vendor would resequence decks occasionally with new releases, and installation-specific modsets would have to be converted because the line numbers changed. Locally- developed programs could suffer resequencing, too. A set of miscellaneous tools rounded things out with the ability to extract everything back into source form and expunge modsets and other mundane operations. >It appears that the main editing done by programmers using such a system is >the creation of "modsets". These, in general, specify that certain lines >are to be inserted into a particular piece of source code. (I gather some >systems allow more than one piece of source (source file or "deck") to be >updated with the same modset. Maybe they all do?) For reference purposes, UPDATE/REVISE treat decks and modsets as the same thing, whereas MODIFY distingushes them. This just dictates whether there are "DECK" directives in your modset, and what the modset sequence numbers are. However, this ability of one named change to alter several related source entities simultaneously and indivisibly is one of several features I miss from the M/R/U paradigm. Another feature is independent, non-monotonic changes, any particular collection of which may be selected to build a particular flavor of product. (analogous to #ifdef FEATURE ) The third is PL integrity (mentioned above). >In addition, a modset >may specify that certain lines of code be deleted (deactivated), or that >certain lines which were previously deleted be restored. Restoring deleted lines, though supported, was a no-no as far as OS support was concerned. A real good way to cause dependencies and other conflicts. You were to accomplish the same net effect by inserting new copies of the orignally-deleted lines. COMPARE (diff -e) would do it this way. Joe User, in complete control of his own PLs, however, is perfectly welcome to create conflicts and dependencies, as long as he can deal with the results. >I don't know how the lines to be inserted or deleted are identified. I >would guess that each line has a line number, and that new lines are >inserted so that their line numbers remain in order. By name.number . "number" is always sequential, and there are no fractions. Each change (modset) has a unique name (modname). The number of a line never changes, but it could be deactivated, and an identical line with a different modname and number could replace it. This is one reason why resequencing is so traumatic. >It appears that traditionally, programmers directly created modsets, and >that it is a relatively new and far from universal thing for them to edit >the entire source file, and create the modfile mechanically. "relatively" is relative here. This basically describes the state of affairs four years ago and more at a large university running mainframes. Eventually each programmer would discover that COMPARE could generate modsets. >It appears that the compilation step (in the development cycle) with such a >system is preceded by combining the programmer's modsets with the current >state of the code control system to produce the actual source to be compiled. Essentially correct. It is a special case. Even in the case of product installation, a compile file is built. The PL is really a list of lines, each of which contains a pointer to each modset that referenced it and how (active or not). When applying a modset, another set of these pointers is built, and making the compile file involves looking at the list of pointers to see the net effect. If the line is now active, it is copied to the compile file. >When a programmer is satisfied with his changes, he "signs in" his >modfile(s). There may(?) be a review by someone before this actually >becomes part of the standard. For the OS with local changes, yes. The system programmers "submit" their modsets to a coordinator, who then figured out which (if any) modsets conflicted or depended upon one another or the same thing. (This process was eventually automated.) The submittors were then asked to reconcile their modsets to resolve these problems. Then the whole mess was printed and circulated for code review. >-------- >It seems to me that the main problem with this kind of system is sorting out >simultaneous changes to the same piece of code. It seems to me that the >advocates of this approach have become so used to dealing with this, that >they simply accept it as part of the system. (In the comments I saw, there >were several suggestions for *mitigating* the problem, but no hint that it >was something one might want to *eliminate*. It is a key advantage of the >SCCS-style approach that it does avoid the problem.) So what does a programmer do while waiting for the code to be available? Go to the listings on the shelf and work out the changes based on that version. Then when the source is free, apply the changes. Surprise, reality has changed. But there are usually many ways to subvert the intentions of a source code control system. >I should note my own preference (not fully shared by my current co-workers). >I prefer an SCCS-style code control system, in conjuction with a convention >that there is only one entry point per file. If, as is good for other >reasons as well, the functions are all kept relatively small, then all the >source files are small. This means that two programmers trying to access >the same file at the same time are really trying to change the same code, >and one of them should wait for the other to finish. (The inability for two >people to modify the same module at the same time is the characteristic >problem of this style of code control system, as integrating simultaneous >changes is the characteristic problem of the other.) Usually the integration is painless, if the two programmers are doing different things and don't bump into each other. >One *must* support this with some kind of include file system, so that >declarations can be consistent across modules. The inclusion process need >not be regarded as the responsibility of the code control system, however. >(The include files themselves are source files to be maintained; but that is >another matter.) Indeed. It just so happend that M/U/R provided the include mechanism because the included portions are part of the program library. They could also be included from another such library, if needed (usually the case for the system common decks). ------------------------------ Date: 16 May 88 22:19:36 GMT From: portal!cup.portal.com!jxh@uunet.uu.net Subject: Paradigms for source control In <2846@mmintl.UUCP>, Frank Adams (franka@mmintl.UUCP) writes: >>...a descendent of UPDATE/MODIFY from the Cybers... >It leaves quite a bit unanswered. Yes, sorry about that. Your observation that the original parties to the discussion were familiar with UPDATE/MODIFY is quite true. I will try to summarize the relevant facts about that universe (or perhaps Dan Germann or Jeff Woolsey, who used it much more than did I); but your "understanding" will stand for the moment. It's pretty good. >I will attempt to describe the system based on my understanding of it. >I don't know how the lines to be inserted or deleted are identified. I >would guess that each line has a line number, and that new lines are >inserted so that their line numbers remain in order. Lines were identified by a deckname or modname, followed by a sequence number, e.g. DECK.1, DECK.2, ..., DECK.999. Sequence numbers were assigned beginning with 1 for each different name. Thus: DECK.1, DECK.2, MODSET.1, DECK.3 ... . The order of these lines in the Program Library (PL) defined the sequence of lines in the actual source. Modsets consisted of directives, such as *DELETE DECK.1,DECK.4 <deletes range of lines, inclusive> *INSERT DECK.2 <inserts following lines after DECK.2, assigning insertion text sequence numbers to each: MODSET.1, MODSET.2 > more insertion text *more directives >It appears that traditionally, programmers directly created modsets, and >that it is a relatively new and far from universal thing for them to edit >the entire source file, and create the modfile mechanically. Just so. A separate text-comparison program was given the ability to express differences as a set of directives suitable for feeding to UPDATE for just this purpose. Actually, this may be more universal than I thought, as more-capable editors become available under NOS. >It appears that the compilation step (in the development cycle) with such a >system is preceded by combining the programmer's modsets with the current >state of the code control system to produce the actual source to be compiled. You're batting 1.000. This step takes the PLs and modsets, and creates the COMPILE file, which is the modified source. COMPILE was typically an alternate default filename on, e.g., the assembler, to eliminate steps from your batch job. (Egad!) >When a programmer is satisfied with his changes, he "signs in" his >modfile(s). There may(?) be a review by someone before this actually >becomes part of the standard. Someone else (Messrs. Woolsey or Germann) should elaborate on the procedural aspects of source control that developed in their shop. For the moment, let me simply say "code review" and "proposed modset" and hope that gives the right impression. I think the fact that modsets were "hard" to introduce into the database permanently had a positive effect on quality, as they were subjected to tremendous scrutiny. -------- >It seems to me that the main problem with this kind of system is sorting out >simultaneous changes to the same piece of code. It seems to me that the >advocates of this approach have become so used to dealing with this, that >they simply accept it as part of the system. (In the comments I saw, there >were several suggestions for *mitigating* the problem, but no hint that it >was something one might want to *eliminate*. It is a key advantage of the >SCCS-style approach that it does avoid the problem.) Well. Here we go. I would settle for *mitigating* if it meant I could get named modsets. *Eliminating* would be nice, but implies the (imho) too- restrictive locking of source files. How about *automating* the process of identifying (and perhaps resolving) conflicts? >I prefer an SCCS-style code control system, in conjuction with a convention >that there is only one entry point per file. If, as is good for other >reasons as well, the functions are all kept relatively small, then all the >source files are small. This means that two programmers trying to access >the same file at the same time are really trying to change the same code, >and one of them should wait for the other to finish. (The inability for two >people to modify the same module at the same time is the characteristic >problem of this style of code control system, as integrating simultaneous >changes is the characteristic problem of the other.) It is true that, on the Cybers, programs tended to be huge and monolithic (not because of bad programming practice but because of institutional biases such as *LOCAL FILE LIMIT*); whereas small-computer programs tend to have lots of small parts. I applaud modularity when it is APPROPRIATE FOR THE PROGRAM, not imposed by outside forces such as making source control easier, or making things compile faster (however worthy those goals certainly are). I detect a bias toward C programs, where all functions are at the same scope level; in this case, putting them into separate files makes sense. However, Modula-2 programs tend to have many routines within a module; and this tends to make single modules rather monolithic themselves. (I have broken a single module into several because of an implementation restriction, when I would have preferred keeping it in one piece to ensure data integrity of private objects.) Making simultaneous changes to one module might easily mean implementing two completely different and, conceptually, independent modifications. A source control program should allow me to modify the top while you're working on the bottom; if there is no real conflict, then file-locking should not preclude my getting some useful work done while you, presumably, do the same. PVCS tries to allow this by "branching," which seems simply to be a cop-out, the program recognizing that a conflict is (potentially) being created that will have to be sorted out later when the two branches "merge." Furthermore, my change might remain unrelated to yours forever. Perhaps I want to apply a temporary change to see what would happen. I could, of course, do this by making a local copy of the source file in question, and do as I please with it, but if my prattlings in my sandbox become worthwhile I would like to be able to put them into the real source for everyone's benefit without having to reconstruct what I did. A modset from the common base source describes my actions succinctly, and can be stored in rather less space. (Flame off. Sorry. I really don't know the first thing about SCCS, so if all this is possible there simply by sleight of hand, please let me know). Oh, this is exciting! I thought this newsgroup would be a good place for this discussion! P.S. My boss just walked into my office brandishing a copy of the glossy for PVCS and, in a moment of candor, I told him that we should get it and use it; that it is, at least, a giant step in the right direction, even if it isn't quite all I hoped for. Of course, we should all get Suns and avoid the PC problems altogether, but he's not prepared to hear that. ------------------------------ Date: 19 May 88 02:32:11 GMT From: garth!smryan@unix.sri.com (Steven Ryan) Subject: Paradigms for source control Gee, I never thought anybody outside of CDC knew of MODIFY (NOS), UPDATE (NOS/BE, NOS, VSOS), and now SCU (NOS/VE). All of the source code is stored in what is called a program (or source) library (called the PL). The program library is divided into decks (as in punched cards) which are divided into individual lines. A deck can be module, data structure, or whatever conceptual chunk you wish to use. Each deck has a unique name. MODIFY maintains last modification date for each deck. A line is a line of source text, an identifier, and a modification history. UPDATE line identifiers are unique across the PL. MODIFY identifiers are only unique within the deck. Lines in the original deck have identifiers like deckname.1, deckname.2, ... Lines subsequently inserted have identifiers like id.1, id.2, ... A line can be deactivated (deleted), activated, deactivated, et cetera, an arbritrary number of times as the result of a series idents (changes). The modification history attached to each line refers to successive activations/deactivations and which ident did it. Only lines which are currently activated are listed. All the deleted lines are still there, though, which is useful in the whoops! mode of programming. Once a group of idents is permanently added to the PL and the system built, if you discover, whoops! ident F7B022 just broke the entire vectoriser, you just do a *YANK F7B022 to magically erase F7B022 from the system. Actually, it goes through the modification history and adds an activation to lines deleted by F7B022 and deactivation to lines inserted. As long as subsequent idents do not refer to the same lines, in principle, F7B022 can be *YANKed and *UNYANKed as many times as necessary to get it right. Programmers have to handcode the changes line by line, not very pleasant, unless SCOOP is working. But having all the line changes in an ident has the advantage of making the changes very visible, simplifying the code reviews. Idents contain both editting commands and comments which have the programmers name, other identification, and explanation of the change and its reason all in one bundle. Far from making collisions in the source more burdensome, it usually makes them less so. Two separate programmers can modify the same deck without error as long as they modify distinct lines. Generally safe. The project leader is suppose to review all idents for interferences but this includes interferences which might be on separate decks. All idents for a PL are collected and applied in mass for each build cycle. At this point, if two idents affect the same line, MODIFY/UPDATE squeals loudly, and the project adjusts for the unexpected overlap. This does happen, but usually like once a year and takes a five-minute change. ------------------------------ Date: 21 May 88 01:00:13 GMT From: necntc!drilex!dricej@ames.arpa (Craig Jackson) Subject: Paradigms for source control This is a discussion that is near and dear to my heart. While the *CS programs have many advantages, there are a few things which I sorely miss from 'mainframe' source code control systems, (of which MODIFY/UPDATE is one). The biggest thing that I miss in the Unix world is the ability to easily have independent development on a common body of source by two sets of programmers in two locations. The most common case of this is a vendor sending out source updates, and a local site making patches. In the Unix world, each time AT&T comes out with a release, all of the System V vendors need to re-do their port. Now Unix is portable, but it isn't so portable that unnecessary ports are to be desired. In a system such as M/U, there is a unique identifier attached to each line of the source file. Two modsets can affect different regions of the file with no change whatsoever. In the unix world, diff -c & patch attempt to provide the same utility. However, if there isn't enough common context, things fall apart. Also, diff -c only comes from Berkeley; you're left to the net to pick up diffc if you're on a USG system. 'patch' only comes from the net in the first place. You may denigrate the need for 'line numbers' or 'line identifiers' in systems such as M/U. Yes, they are extra baggage. Yes, they do go along with such things as fixed-length source lines and source listings. Yes, they do imply occasional resequencing. However, by uniquely identifying each line, it's possible to unabiguously talk about precise regions of code. I only wish I could give each token in the source file a unique identifier, but it isn't really feasible. ------------------------------ Date: 19 May 88 22:37:11 GMT From: portal!cup.portal.com!jxh@uunet.uu.net Subject: Paradigms for source control I just got my copy of Polytron's PVCS (Polytron Version Control System). I will be launching myself into it shortly. When I surface again, I'll bring a full report. ------------------------------ Date: 17 May 88 22:42:23 GMT From: uhccux!cs661s02@humu.nosc.mil (Cs661s02) Subject: requirement specification I looking for references in generating requirement specification document. Thanks in advance. ------------------------------ Date: 13 May 88 20:15:35 GMT From: ucsdhub!hp-sdd!ncr-sd!ncrlnk!fenix!kcby@ucsd.edu (kcby) Subject: Source code control and DOS/LAN use We have recently come up with a source code control problem that perhaps one of you has already tackled. Our development environment consists of networked PC's running DOS with a project file server. (If it makes any difference, the network is a Banyan token-ring LAN.) Our plan was to keep source code on the server, and do compilations and links from the individual PC's. Our development language will be C++... and herin lies the problem. The C++ pre-processor (Advantage) requires all of the 640K of memory beyond a standard DOS load to compile a program of any size - meaning we can not have the network driver resident which would allow connection to the server (and the released source files which might need to be included) while the compile is occurring. Because of the memory requirements, it looks like the source will have to be maintained on each PC. So... does anyone have any suggestions on how we keep the files on multiple PC's up to date? Copying the files from the server each time we are ready to compile seems like it would impact the compile time too severely. Doing nightly distribution of sources would be reasonable, except the file server is just that... not a "central" processor, so there's no "controller" for the network. And, in thinking about this, I started to wonder how many organizations are now doing development with networked PC's (and without a "central" project processor). If you are involved in using a development environment with networked PC's, I'd like to hear from you. Particularly I'm interested in knowing: a) what kind of network/server arrangement you use (including whether you use DOS or XENIX) b) whether you use a "central" or "controlling" processor b) where you maintain your source code (central or distributed) c) how you control access / updates to source code (e.g. what kind of change control do you use) d) whether you've had a similar problem to solve regarding memory use if you're running under DOS and if so how you solved it ------------------------------ End of Soft-Eng Digest ******************************