A Case Against the GOT' O William a . Wulf, Carnegie-Mellon Universit Y

A Case Against the GOT' O William a . Wulf, Carnegie-Mellon Universit Y

A Case Against the GOT' O William A . Wulf, Carnegie-Mellon Universit y ABSTRAC T suggestion to ban the goto appears to have been a part of the computing folklore for several years , It has been proposed, by E . W . Dijkstra and others , to this author's knowledge the suggestion wa s that the goto statement in programming language i s first made in print by Professor E . W . Dijkstra i n a principal culprit in programs which are diffi- a letter to the editor of the _Communications o f cult to understand, modify, and debug . More cor- the ACM in 1968 (1) . rectly, the argument is that it is possible t o In this paper we shall examine the rational e use the goto to synthesize program structures wit h for the elimination of the Soto in programin g these undesirable properties . Not all uses of th e languages, and some of the theoretical and practi- goto are to be considered harmful ; however, it i s cal implications of its (total) elimination . further argued that the "good" uses of the got o fall into one of a small number of specific case s RATIONAL E which may be handled by specific language con- structs . This paper summarizes the arguments i n At one level, the rationale for eliminatin g favor of eliminating the goto statement and som e the poto has already been given in the introduc- of the theoretical and practical implications o f tion . Namely, it is possible to use the goto in a the proposal . manner which obscures the logical structure of a program to a point where it becomes virtually im- KEY WORDS AND PHRASES : programming, programmin g possible to understand (1,3,4), It is not claimed languages, goto-less programming, structured pro- that every use of the goto obscures the logica l grammin g structure of a program ; it is only claimed that i t CR CATEGORIES : 4 .2, 4 .22, 5 .2 4 is possible to use the Soto to fabricate a "rat' s nest" of control flow which has the undesirabl e INTRODUCTION properties mentioned above . Hence this argumen t addresses the use of the goto rather than the got o It has been suggested that the use of th e itself . goto construct is undesirable, is bad programmin g As the basis for a proposal to totally elimi- practice, and that at least one measure of th e nate the poto this argument is somewhat weak . I t ' quality ' of a program is inversely related t o might reasonably be argued that the undesirabl e the number of goto statements contained in it . consequences of unrestricted branching may b e The rationale behind this suggestion is that i t eliminated by enforcing restrictions on the use o f is possible to use the goto in ways which obscur e the poto rather than eliminating the construct . the logical structure of a program, thus making However, it will be seen that any rational set o f it difficult to understand, modify, debug, and/o r restrictions is equivalent to eliminating the con- prove its correctness . It is quite clear that no t struct if an adequate set of other control primi- all uses of the &oto are obscure, but the hypoth- tives is provided . The strong reasons for elim- esis is that these situations fall into one of a inating the goto arise in the context of more posi- small number of cases and therefore explicit an d tive proposals for a programming methodology whic h inherently well-structured language construct s makes the goto unnecessary . It is not the purpos e may be introduced to handle them . Although th e of this paper to explicate these methodologie s (variously called "structured programming " , "con- structive programming", "stepwise refinement" , This work was supported by the Advanced Research etc .) ; however, since the major justification fo r Projects Agency of the Office of the Secretary o f eliminating the goto lies in this work, a fe w Defense (F44620-70-C-0107) and is monitored b y words are in order . the Air Force Office of Scientific Research . 63 It is, perhaps, pedantic to observe that th e Step 1 : PRINTKWI C present practice of building large programming systems is a mess . Most, if not all, of the majo r We may think of this as being an instruction in a operating systems, compilers, information systems , language (or machine) in which the notion of gen- etc, developed in the last decade have been de - erating a KWIC index is primitive . Since thi s livered late, have performed below expectatio n operation is not primitive in most practical lan- (at least initially), and have been filled wit h guages, we proceed to define it : 'bugs' . This situation is intolerable, and ha s prompted several researchers ((2,3,4), (5,6), (7), Step 2 : PRINTKWIC : generate and save al l (8), (9)) to consider whether a programming meth- interesting circula r odology might be developed to correct this situa- shift s tion . This work has proceeded from two premises : alphabetize the save d 1 Dijkstra speaks of our "human inability t o line s do much" (at one time) to point up th e necessity of decomposing large system s print alphabetized line s into smaller, more "human size" chunks . This observation is hardly startling, an d Again, we may think of each of these lines as be- in fact, most programming languages in- ing an instruction in an appropriate language ; an d clude features (modules, subroutines, an d again, since they are not primitive in most exist - macros, for example) to aid in the mechan- ing languages, we must define them ; for example : ical aspects of this decomposition . How - ever, the further observation that th e Step 3a : generate and save all interestin g particular decomposition chosen makes a circular shifts : significant difference to the understand - ability, modifiability, etc ., of a pro - for each line in the input d o gram and that there is an a priori meth- begi n odology for choosing a "good" decomposi- generate and save all inter - tion is less expected . esting shifts of ' thi s line ' 2 Dijkstra has also said that debugging ca n en d show the presence of errors, but neve r etc . their absence . Thus ultimately we wil l have to be able to prove the correctnes s The construction of the program proceeds by smal l of the programs we construct (rather tha n steps ' in this way until ultimately each operatio n "debug" them) since their sheer size pro- is expressed in the available primitive operation s hibits exhaustive testing . Although som e of the target language . We shall not carry out th e progress has been made on the automati c details since the objective of this paper is not to proof of the correctness of programs (c .f . , be a tutorial on this methodology . However, not e (10), (11), (12), (23), (24)), this ap- that the methodology achieves the goals set out fo r proach appears to be far from a practica l it . Since the context is small at each step it i s reality . The methodology proposed b y relatively easy to understand what is going on ; in - Dijkstra (and others) proceeds so that th e deed, it is easy to prove that the program wil l construction of a program guides a (com- work correctly if the primitives from which it i s paratively) simple and intuitive proof o f constructed are correct . Moreover, proving th e its correctness . correctness of the primitives used at step z is a small set of proofs (of the same kind) at step L+l . The methodology of "constructive programming " (In the terminology of this methodology, step p i s is quite simple and, in this context, best de - an abstraction from its implementation in ste p scribed by an (partial) example . Let us conside r L+1 .) the problem of producing a KWIC' index . Construc- Now, the constructive programming methodolog y tion of the program proceeds in a series of step s relates to eliminating the goto in the followin g in which each step is a refinement of some portio n way . It is crucial to the constructive philosoph y of a previous step . We start with a single state - that it should be possible to define the behavio r ment of the function to be performed : of each primitive action at the ath step indepen- dent of the context in which it occurs . If thi s were not so, it would not be possible to prove th e *For those who may not be familiar with a KWI C correctness of these primitives at the b+lst ste p (key word in context) index, the following de- without reference to their context in the Lath step . scription is adequate for this paper . In particular, this suggests (using flow char t A KWIC system accepts a set of lines . Eac h terminology) that it should be possible to repre- line is an ordered set of words and each word i s sent each primitive at the Lth step by a (sub) flow an ordered set of characters . A word may be on e chart with a single entry and a single exit path . of a set of uninteresting words ("a", "the", "of" , Since this must be true at each step of th e etc .), otherwise it is a key word, Any line ma y be circularly shifted by removing its first wor d and placing it at the end of the line .

View Full Text

Details

  • File Type
    pdf
  • Upload Time
    -
  • Content Languages
    English
  • Upload User
    Anonymous/Not logged-in
  • File Pages
    7 Page
  • File Size
    -

Download

Channel Download Status
Express Download Enable

Copyright

We respect the copyrights and intellectual property rights of all users. All uploaded documents are either original works of the uploader or authorized works of the rightful owners.

  • Not to be reproduced or distributed without explicit permission.
  • Not used for commercial purposes outside of approved use cases.
  • Not used to infringe on the rights of the original creators.
  • If you believe any content infringes your copyright, please contact us immediately.

Support

For help with questions, suggestions, or problems, please contact us