Is block structure necessary?

Block structure is traditionally considered an a priori requirement for algorithmic programming languages. Most new languages since Algol‐60 have block structure. Reasons exist, however, to omit the general form of block structure‐nested procedure definitions in which references to identifiers defined in outer procedures are permitted‐from programming languages, especially those intended for systems programming applications. This paper reviews the concept of block structure and considers its advantages and disadvantages. It concludes that, in many cases, a module facility is superior to block structure and should be considered in lieu of block structure in future languages.

[1]  Alfred V. Aho,et al.  Principles of Compiler Design , 1977 .

[2]  Edwin H. Satterthwaite,et al.  Early experience with Mesa , 1977, CACM.

[3]  Per Brinch Hansen,et al.  The programming language Concurrent Pascal , 1975, IEEE Transactions on Software Engineering.

[4]  Craig Schaffert,et al.  Abstraction mechanisms in CLU , 1977, CACM.

[5]  Mary Shaw,et al.  An introduction to the construction and verification of Alphard programs , 1976, ICSE '76.

[6]  David A. Fisher,et al.  A survey of control structures in programming languages , 1972, SIGP.

[7]  Edsger W. Dijkstra,et al.  The humble programmer , 1972, CACM.

[8]  William A. Wulf,et al.  Trends in the Design and Implementation of Programming Languages , 1980, Computer.

[9]  David R. Hanson,et al.  The Y programming language , 1981, SIGP.

[10]  David Gries,et al.  Compiler Construction for Digital Computers , 1971 .

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

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

[13]  Niklaus Wirth,et al.  The design of a pascal compiler , 1971, Softw. Pract. Exp..

[14]  David R. Hanson A simple technique for controlled communication among separately compiled modules , 1979, Softw. Pract. Exp..

[15]  J. J. Horning,et al.  Report on the programming language Euclid , 1977, SIGP.

[16]  Richard G. Hamlet High-level binding with low-level linkers , 1976, CACM.

[17]  Douglas Comer,et al.  MAP: A Pascal macro preprocessor for large program development , 1979, Softw. Pract. Exp..

[18]  Guy L. Steele Debunking the “expensive procedure call” myth or, procedure call implementations considered harmful or, LAMBDA: The Ultimate GOTO , 1977, ACM '77.

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