Sunday, March 10, 2019

Dijkstra Paper

(A Look Back at) Go To logical argument Considered ill Edsger Dijkstra wrote a Letter to the editor in chief of Communications in 1968, criticizing the excessive use of the go to dictation in programming languages. Instead, he encouraged his fellow computing device scientists to consider structured programming. The letter, origin in ally entitled A Case Against the Goto Statement, was create in the March 1968 issue under the headline Go To Statement Considered Harmful. It would become the most legendary CACM Letter of all time Considered Harmful would develop into an iconic catch-all.Dijkstras comments sparked an editorial debate that spanned these pages for over 20 years. In honor of the occasion, we republish here the original letter that started it all. Editor For a number of years I develop been familiar with the observance that the quality of coders is a decreasing function of the density of go to tilts in the programs they produce. More recently I discovered why the use of the go to statement has much(prenominal) disastrous effects, and I became convinced that the go to statement should be abolished from all higher level programming languages (i. e. verything except, perhaps, plain gondola code). At that time I did non attach in any character a great deal importance to this discovery I now submit my considerations for publication because in very recent discussions in which the subject turned up, I have been urged to do so. My first mark is that, although the programmers activity ends when he has constructed a correct program, the process taking place under break of his program is the true subject matter of his activity, for it is this process that has to accomplish the sought after effect it is this process that in its changing behavior has to get together the desire specifications.Yet, once the program has been made, the making of the equivalent process is delegated to the machine. My second remark is that our ingenious powers a re rather geared to master static traffic and that our powers to visualize processes evolving in time are relatively poorly developed. For that intellect we should do (as wise programmers aware of our limitations) our utmost to shorten the conceptual wisecrack amidst the static program and the fighting(a) process, to make the correspondence between the program (spread out in text editionual matter space) and the process (spread out in time) as trivial as possible.Let us now consider how we piece of tail characterize the progress of a process. (You may think about this interrogate in a very concrete manner suppose that a process, considered as a time succession of actions, is stopped after an domineering action, what data do we have to fix in order that we put forward redo the process until the very same point? ) If the program text is a pure concatenation of, say, concession statements (for the purpose of this discussion regarded as the descriptions of bingle actions) i t is sufficient to point in the program text to a point between two successive action descriptions. In the absence of go to statements I can permit myself the syntactic ambiguity in the last three words of the previous sentence if we analyse them as successive (action descriptions) we mean successive in text space if we parse as (successive action) descriptions we mean successive in time. ) Let us 7 PAUL WATSON COMMUNICATIONS OF THE ACM January 2008/Vol. 51, No. 1 Forum call such a pointer to a suit equal to(p) place in the text a textual index. When we include conditional clauses (if B past A), pick clauses (if B then A1 else A2), choice clauses as introduced by C.A. R. Hoare (casei of (A1, A2, , An)), or conditional expressions as introduced by J. McCarthy (B1__ E1, B2 __ E2, , Bn __ En), the fact trunk that the progress of the process remains characterized by a single textual index. As soon as we include in our language surgerys we must admit that a single textual inde x is no longer sufficient. In the case that a textual index points to the interior of a procedure body the dynamic progress is only characterized when we also give to which call of the procedure we refer.With the inclusion body of procedures we can characterize the progress of the process via a sequence of textual indices, the length of this sequence being equal to the dynamic depth of procedure calling. Let us now consider repetition clauses (like, while B repeat A or repeat A until B). Logically speaking, such clauses are now superfluous, because we can express repetition with the aid of recursive procedures. For reasons of realism I dont wish to exclude them on the whizz hand, repetition clauses can be implemented quite easily with present day finite equipment on the other hand, the reasoning normal known as induction makes us wholesome quipped to retain our intellectual grasp on the processes generated by repetition clauses. With the inclusion of the repetition clauses 8 te xtual indices are no longer sufficient to advert the dynamic progress of the process. With each entry into a repetition clause, however, we can brother a socalled dynamic index, inexorably listing the ordinal number of the corresponding current repetition. As repetition clauses (just as procedure calls) may be applied nestedly, we find that now the progress of the process can eer be uniquely characterized by a (mixed) sequence of textual and/or dynamic indices.The main point is that the entertains of these indices are outside programmers control they are generated (either by the write-up of his program or by the dynamic evolution of the process) whether he wishes or not. They provide fissiparous coordinates in which to describe the progress of the process. Why do we need such independent coordinates? The reason isand this seems to be inherent to sequential processesthat we can interpret the value of a variable only with respect to the progress of the process.If we wish to coun t the number, n say, of people in an initially empty room, we can strike this by increasing n by matchless whenever we see soulfulness go in the room. In the inbetween moment that we have observed someone entering the room but have not yet performed the subsequent append of n, its value equals the number of people in the room minus one The unbridled use of the go to statement has an immediate consequence that it becomes outrageously difficult to find a meaningful set of coordinates in which to describe he process progress. Usually, people take into account as well the values of some well chosen variables, but this is out of the question because it is relative to the progress that the meaning of these values is to be understood With the go to statement one can, of course, still describe the progress uniquely by a counter counting the number of actions performed since program start (viz. a kind of normalized clock). The difficulty is that such a coordinate, although unique, is utterly unhelpful.In such a coordinate system it becomes an extremely complicated affair to define all those points of progress where, say, n equals the number of persons in the room minus one The go to statement as it stands is just too primitive it is too much an invitation to make a mess of ones program. ane can regard and appreciate the clauses considered as bridling its use. I do not claim that the clauses mentioned are exhaustive in the sense that they will satisfy all needs, but whatever clauses are suggested (e. g. bortion clauses) they should satisfy the requirement that a programmer independent coordinate system can be well-kept to describe the process in a helpful and manageable way. It is hard to end this with a fair acknowledgment. Am I to judge by whom my thinking has been influenced? It is fairly obvious that I am not unmoved(p) by Peter Landin and Christopher Strachey. Finally I should like to record (as I remember it quite distinctly) how Heinz Zemanek at the pre -ALGOL meeting in early 1959 in Copenhagen quite explic- January 2008/Vol. 1, No. 1 COMMUNICATIONS OF THE ACM itly expressed his doubts whether the go to statement should be treated on equal syntactic footing with the assignment statement. To a modest extent I blame myself for not having then drawn the consequences of his remark. The remark about the undesirability of the go to statement is far from new. I remember having read the explicit recommendation to restrict the use of the go to statement to alarm exits, but I have not been able to trace it presumably, it has been made by C. A. R. Hoare. In 1, Sec. 3. . 1. Wirth and Hoare together make a remark in the same direction in motivating the case construction Like the conditional, it mirrors the dynamic structure of a program much clearly than go to statements and switches, and it eliminates the need for introducing a large number of labels in the program. In 2 Guiseppe Jacopini seems to have proved the (logical) superfluousness of the go to statement. The exercise to translate an haughty flow diagram more or less mechanically into a jumpless one, however, is not to be recommended.Then the resulting flow diagram cannot be expected to be more transparent than the original one. REFERENCES 1. Wirth, Niklaus, and Hoare, C. A. R. A contribution to the development of ALGOL. Comm. ACM 9 (June 1966), 413432. 2. Bohn, Corrado, and Jacopini, Guiseppe. Flow Diagrams, Turing machines and languages with only two formation rules. Comm. ACM 9 (May 1966) 366371. Coming succeeding(prenominal) Month in COMMUNICATIONS Alternate Reality Gaming IT public exposure in Developing Countries Are People Biased in their drill of Search Engines?The Factors that Affect Knowledge-Sharing Behavior Alternative Scenarios to the Banner Years municipal Broadband Wireless Networks The Myths and Truths about Wireless Security Managing Large Collections of data Mining Models Women and Men in IT Alike or Different? EDSGER W. DIJKSTRA expert University Eindhoven, The Netherlands Communications of the ACM March 1968, Vol. 11, No. 3, pg 147 COMMUNICATIONS OF THE ACM January 2008/Vol. 51, No. 1 9

No comments:

Post a Comment