The fields of parallel and distributed computing have attracted a lot of attention for a few decades now, in both theoretical and practical aspects. Programming languages have been a burning issue in this area. Many theoretical models that extend existing (and primarily sequential) programming models can be found in the literature. A number of programming languages and abstractions have also been proposed. These include libraries and overlays on existing languages, extensions of existing languages, and approaches derived from alternate computing paradigms such as functional programming. A challenge for those working in the field is to relate all these approaches, particularly connecting the theoretical models and practical systems. That is where this book fits in.
The introduction sets the overall direction for the book, introducing the lambda calculus framework as the basis for all the theoretical models. The discussion on the lambda calculus includes free and bound variables, combinators, and higher-order programming. The remainder of the book is divided between two major sections covering theoretical models and practical programming languages. The theoretical models section covers the pi calculus, the actor model, the join calculus, and the ambient calculus. The practical languages section covers Nomadic Pict, SALSA, and JoCaml. Each of these seven topics is given one chapter. The discussion is not exhaustive for any of them, but focuses on issues of relevance from the perspective of distributed computing. The two sections are closely related in that Pict uses the pi calculus, SALSA is based on the actor model, and JoCaml implements the join calculus. The author also briefly mentions other languages and models to provide an overall picture. Interested readers can explore them elsewhere, following the references.
In the models section, the join calculus and the ambient calculus are relatively recent models, with better support for mobility and distribution. The actor model is unique in the list for disallowing shared memory completely. The pi calculus is among the most studied models and has its roots in two well-known models, the calculus of communicating systems (CCS) and communicating sequential processes (CSP). The join calculus and the ambient calculus are in some ways variants of the pi calculus. Apart from a brief overview of syntax and notation, the discussion covers equivalence, fairness, and so on, as part of operational semantics. Mutual exclusion, dining philosophers, and reference cells are discussed as examples in each of the models. The last chapter of this section weighs all four models against issues of ontological commitments, expressive power, and support for concurrency, fairness, mobility, and distribution. For example, both the pi calculus and the join calculus use synchronous communication, while actors and the ambient calculus use asynchronous communication. In expressive power, all models are shown to be Turing-complete by demonstrating the ability to mechanically emulate another language that is known to be Turing-complete.
In the language section, following a brief general introduction to each language, the author discusses the operational semantics of the language in detail, relating it to the operational semantics of the model on which it is based. This helps to link the theory with the practice. Mutual exclusion, dining philosophers, and reference cells are used as demo problems here as well, enabling readers to get a feel of how these systems differ. Distribution and mobility are the key concerns; for every system, these aspects are discussed.
The book ends with a chapter on one application using all three languages. The application involves social networking, something that would interest most people. All components of the application are worked out, and adequate code is given for someone to try the system. On the negative side, the chosen application, as defined in the book, does not have enough distributedness or mobility to give a feel for the strengths of the languages in this respect. Social networking is easy to visualize in a single server model, with multiple users accessing it from different places. If the system were distributed across different geographic regions, perhaps with some mobility added, then the topic would have been a better example.
The presentation is good. Each chapter ends with a summary and cites resources for exploring the respective topic in more detail. Given the vast scope of models and languages addressed, this is important, since none of the topics can be discussed sufficiently in such a book. There are also exercises at the end of each chapter. The book has a strong bias to formal notations and treatments, and readers will need a mathematical inclination to follow the book well. I would have liked a little more explanation of the concepts and a few more examples to make the matter digestible for a wider audience, given the importance of the task the author has undertaken.
More reviews about this item: Amazon, Goodreads