Computer Organization and Architecture
Major parts of my past research work are outlined in a monograph on Abstract Computing Machines which has been published in the Springer EATCS series (ISBN 3-540-21146-2).
This monograph is on the relationship between basic programming paradigms as they derive from Lambda calculus and the abstract machines featuring the runtime structures and mechanisms that are essential for program execution. It sets out with a brief discussion of an expression-oriented style of programming, addresses the problem of correctly dealing with free variables as a prerequisite for symbolic computations, and gives a brief introduction to Lambda calculus as the underlying theory.
In its main part, the book is primarily concerned with the description of what are called fully normalizing Lambda-calculus machines. They support the runtime structures and mechanisms necessary to correctly perform substitutions that may involve free variables, and to do symbolic self-optimizations under functions (abstractions), thus treating both functions and variables truly as first class objects.
These machines are related to various weakly normalizing counterparts which are the work horses for the implementation of conventional functional languages. They rule out substitution and evaluation under abstractions to avoid problems with free variables, which considerably simplifies the machinery but at the same time also sacrifices many of the amenities of symbolic computations.
Abstract machines for imperative languages are shown to be direct descendants of weakly normalizing Lambda-calculus machines. They permit side-effecting substitutions on an otherwise nearly identical runtime environment which, however, destroy the Church-Rosser property of the Lambda calculus, merely keeping its scoping rules intact.
I used the material contained in this book in various graduate courses on basic concepts of computer organization/architecture; some of the material of the first five chapters I also used in undergraduate courses on function-based programming.
As it so happens when publication deadlines have to be met, the book contains a few errors, many of which are just typos. But it also includes a serious mistake concerning the definition in chapter 5 of the SE(M)CD machine, which I run across while preparing course material for a summer school. A correction of this blunder and also of the typos that have been detected so far can be found under errata
A more recent paper on Abstract Lambda Calculus Machines that is based on material contained in this monograph appeared in the proceedings of the