Sinopsis
The title of this book contains the words ALGORITHMIC LANGUAGE, in the singular. This is meant to convey the idea that it deals not so much with the diversity of programming languages, but rather with their commonalities. The task of formal program development proved to be the ideal frame for demonstrating this unity. It allows classifying concepts and distinguishing fundamental notions from notational features; and it leads immediately to a systematic disposition. This approach is supported by didactic, practical, and theoretical considerations. The clarity of the structure of a programming language designed according to the principles of program transformation is remarkable.
Of course there are various notations for such a language. The notation used in this book is mainly oriented towards ALGOL 68, but is also strongly influenced by PASCAL - it could equally well have been the other way round. In the appendices there are occasional references to the styles used in ALGOL, PASCAL, LISP, and elsewhere.
The book is divided clearly into three parts: the first four chapters concentrate on the level of "applicative" formulation, which is characterized by function application as the dominant language element, and includes problem specifications. The transition to the level of "procedural" formulation - which is characterized by the appearance of program variables - is motivated in Chap. 4 and carried out in Chaps. 5 and 6. In Chap. 7, further development leads to concepts which are particularly important in systems programming for present-day machines: organized stores, pointers and nexuses; characteristically, on this level program variables and pointers are in some sense considered as independent objects.
The transitions between these levels are described by definitional transformations. More generally, we view the entire process of programming as being a chain of program transformations; the individual classes of transformation rules prove to be an excellent didactic means for structuring the material.
The trichotomy mentioned above is fundamental. It has become customary to distinguish between "applicative" and "procedural"; the relative success of LISP and APL is accounted for by the advantages of applicative programming. Backus argues (1978b): "I now regard all conventional languages (e.g., the FORTRANs, the ALGOLs, their successors and derivatives) as increasingly complex elaborations of the style of programming dictated by the von Neumann computer. These 'von Neumann languages' create enormous, unnecessary intellectual roadblocks in thinking about programs and in creating the higher level combining forms required in a really powerful programming methodology."
Here, however, it cannot be the purpose to take sides with one camp or the other. The experienced programmer must master both styles as well as the transition between them. It is also important to distinguish the third level, the level of independent variables and pointers, from the others. The relatively small size of Chap. 7 indicates on the one hand that the description is restricted to the basics, including many points known from the liter ature on systems programming such as D. E. Knuth's "The Art of Computer Programming" or R. M. Graham's "Principles of Systems Programming". On the other hand, it also indicates that the theoretical foundations of this field still need further development.
Every section of this book has a mathematical background of varying degree of development. Some important basic notions stem from lattice theory. This has been impressively shown by the foundational work of D. Scott. Behind the computation structures of the third chapter stands the modern theory of universal algebra; in particular, works of G. Birkhoff and A. Tarski are important here. Since we were not presenting a mathematical textbook, we must frequently content ourselves with hints and references.
The book has developed from lectures and accompanying exercises that were presented in recent years at the Technical University of Munich. It arose in close interaction with the project CIP ("Computer-aided Intuition-guided Programming") and the subproject "Wide spectrum language and program transformations" in the Sonderforschungsbereich 49, Programming Technology, at the Technical University of Munich. Although it attempts to lay the foundations for a well-rounded, consistent "science of programming", much had to remain fragmentary. In some places it was necessary to take seemingly unconventional positions in order to overcome inflexibility and to correct biased doctrines. In this respect the book addresses not only students but also their academic teachers.
Thus, this is not purely a beginner's text; although, as it is frequently said, "no previous knowledge will be assumed" - a certain kind of previous knowledge can even be an obstacle - nevertheless an understanding of the manifold interconnections requires a certain training of thought. Neither is the book a monograph, since the ordering of the material has been influenced decisively by didactic considerations. Rather, the book is directed towards first-year graduate students, as were the lectures from which it has arisen; however, it may also serve to give a guideline for introductory teaching.
0 komentar:
Posting Komentar