Debunking the “expensive procedure call” myth or, procedure call implementations considered harmful or, LAMBDA: The Ultimate GOTO

Folklore states that GOTO statements are “cheap”, while procedure calls are “expensive”. This myth is largely a result of poorly designed language implementations. The historical growth of this myth is considered. Both theoretical ideas and an existing implementation are discussed which debunk this myth. It is shown that the unrestricted use of procedure calls permits great stylistic freedom. In particular, any flowchart can be written as a “structured” program without introducing extra variables. The difficulty with the GOTO statement and the procedure call is characterized as a conflict between abstract programming concepts and concrete language constructs.

[1]  Joel Moses The function of FUNCTION in LISP or why the FUNARG problem should be called the environment problem , 1970, SIGS.

[2]  Daniel G. Bobrow,et al.  A model and stack implementation of multiple environments , 1973, CACM.

[3]  Ben Wegbreit The ECL programming system , 1972, AFIPS '71 (Fall).

[4]  John Darlington,et al.  A system which automatically improves programs , 1973, Acta Informatica.

[5]  William A. Wulf,et al.  The Design of an Optimizing Compiler , 1975 .

[6]  Mary Shaw,et al.  Global variable considered harmful , 1973, SIGP.

[7]  Gerald Jay Sussman,et al.  Lambda: The Ultimate Imperative , 1976 .

[8]  Leon Presser Structured languages , 1975, AFIPS National Computer Conference.

[9]  David Y. Y. Yun,et al.  A FORMAT statement in SCRATCHPAD , 1975, SIGS.

[10]  W. M. McKeeman,et al.  Peephole optimization , 1965, CACM.

[11]  Guy L. Steele,et al.  LAMBDA: The Ultimate Declarative , 1976 .

[12]  Corrado Böhm,et al.  Flow diagrams, turing machines and languages with only two formation rules , 1966, CACM.

[13]  R. J. Fateman Reply to an editorial , 1973, SIGS.

[14]  William A. Wulf,et al.  BLISS: a language for systems programming , 1971, CACM.

[15]  Frank Engel Draft proposed ANS FORTRAN BSR X3.9 X3J3/76 , 1976, SIGP.

[16]  Guy L. Steele,et al.  Fast arithmetic in MacLISP , 1977 .

[17]  Leon Presser,et al.  Structured languages , 1975, SIGP.

[18]  John McCarthy,et al.  Recursive functions of symbolic expressions and their computation by machine, Part I , 1960, Commun. ACM.

[19]  Gerald Jay Sussman,et al.  An Interpreter for Extended Lambda Calculus , 1975 .

[20]  Edward Yourdon,et al.  Techniques of Program Structure and Design , 1976 .

[21]  H. R. Strong Translating Recursion Equations into Flow Charts , 1971, J. Comput. Syst. Sci..

[22]  Edsger W. Dijkstra,et al.  A Discipline of Programming , 1976 .

[23]  Marc A. Auslander,et al.  Systematic recursion removal , 1978, CACM.