Programming Distributed Computing Systems

A Foundational Approach

ISBN: 9780262313353 | Copyright 2013

Instructor Requests


Starting from the premise that understanding the foundations of concurrent programming is key to developing distributed computing systems, this book first presents the fundamental theories of concurrent computing and then introduces the programming languages that help develop distributed computing systems at a high level of abstraction. The major theories of concurrent computation—including the π-calculus, the actor model, the join calculus, and mobile ambients—are explained with a focus on how they help design and reason about distributed and mobile computing systems. The book then presents programming languages that follow the theoretical models already described, including Pict, SALSA, and JoCaml. The parallel structure of the chapters in both part one (theory) and part two (practice) enable the reader not only to compare the different theories but also to see clearly how a programming language supports a theoretical model.

The book is unique in bridging the gap between the theory and the practice of programming distributed computing systems. It can be used as a textbook for graduate and advanced undergraduate students in computer science or as a reference for researchers in the area of programming technology for distributed computing. By presenting theory first, the book allows readers to focus on the essential components of concurrency, distribution, and mobility without getting bogged down in syntactic details of specific programming languages. Once the theory is understood, the practical part of implementing a system in an actual programming language becomes much easier.

Programming Distributed Computing Systems fills the long-standing need for a self-contained account of distributed programming that combines presentation of underlying formal semantic models along with the design and use of distributed languages and frameworks based upon them. The book's primary focus on actor models makes it an especially useful resource for those studying the foundations of an increasing number of actor-based frameworks, languages, and platforms. Additional coverage of alternative models and languages provides a basis for those pursuing different ways of programming distributed systems.

Doug Lea Computer Science Department, State University of New York at Oswego

This book deals with one of the most important topics in computer science”it explains what a concurrent programming model is and what it's good for. While most books focus on a specific programming language or technology, this book really shows the power of the mathematical ideas at the basis of popular languages like Java or C#.

Paolo Ciancarini Professor of Computer Science, Department of Informatics, University of Bologna

With the explosive growth of the Internet in the twenty-first century, distributed programming is at the very heart of today's digital society. But it remains a difficult skill to master, both conceptually and practically. Carlos Varela's book makes a big step toward remedying this situation. It uses three languages to cover a full spectrum of distributed abstractions. I highly recommend Varela's book to all developers and researchers who are looking for better ways to express their distributed thoughts!

Peter Van Roy Professor at Université catholique de Louvain, Louvain-la-Neuve, Belgium
Expand/Collapse All
Contents (pg. 7)
Foreword (pg. 9)
Preface (pg. 11)
Acknowledgments (pg. 15)
1 Introduction (pg. 1)
1.1 Motivation (pg. 1)
1.2 Models of Computation (pg. 4)
1.3 Programming Languages (pg. 5)
1.4 Common Concurrent Programming Examples (pg. 8)
2 λ Calculus (pg. 11)
2.1 Syntax and Semantics (pg. 11)
2.2 Free and Bound Variables in the λ Calculus (pg. 15)
2.3 Order of Evaluation (pg. 17)
2.4 Combinators (pg. 19)
2.5 Currying (pg. 20)
2.6 η-Conversion (pg. 21)
2.7 Sequencing Combinator (pg. 23)
2.8 Recursion Combinator (pg. 24)
2.9 Higher-Order Programming (pg. 26)
2.10 Discussion and Further Reading (pg. 30)
2.11 Exercises (pg. 31)
I Theoretical Models of Concurrency, Distribution, and Mobility (pg. 33)
I.1 Models of Concurrent Computing (pg. 33)
I.2 Other Approaches to Modeling Concurrency (pg. 35)
3 π Calculus (pg. 37)
3.1 Syntax (pg. 37)
3.2 Operational Semantics (pg. 44)
3.3 Equivalence of Processes (pg. 49)
3.4 Common Examples (pg. 53)
3.5 Discussion and Further Reading (pg. 56)
3.6 Exercises (pg. 56)
4 Actors (pg. 59)
4.1 Actor Language Syntax (pg. 60)
4.2 Operational Semantics (pg. 64)
4.3 Equivalence of Actor Programs (pg. 67)
4.4 Common Examples (pg. 71)
4.5 Discussion and Further Reading (pg. 74)
4.6 Exercises (pg. 77)
5 Join Calculus (pg. 79)
5.1 Syntax (pg. 79)
5.2 Operational Semantics (pg. 82)
5.3 Equivalence of Join Calculus Expressions (pg. 86)
5.4 Common Examples (pg. 90)
5.5 Discussion and Further Reading (pg. 91)
5.6 Exercises (pg. 92)
6 Ambient Calculus (pg. 95)
6.1 Syntax (pg. 95)
6.2 Operational Semantics (pg. 98)
6.3 Equivalence of Ambient Calculus Expressions (pg. 103)
6.4 Common Examples (pg. 105)
6.5 Discussion and Further Reading (pg. 107)
6.6 Exercises (pg. 108)
7 Formalizing Concurrency, Distribution, and Mobility (pg. 111)
7.1 Ontological Commitments (pg. 111)
7.2 Expressive Power (pg. 120)
7.3 Semantic Properties (pg. 125)
7.4 Reasoning about Programs (pg. 132)
7.5 Discussion and Further Reading (pg. 135)
7.6 Exercises (pg. 136)
II Programming Languages for Distributed and Mobile Computing (pg. 139)
II.1 Languages for Distributed Computing (pg. 139)
II.2 Other Approaches to Concurrent Programming (pg. 140)
II.3 Distribution and Mobility Aspects (pg. 143)
8 Programming with Processes (pg. 145)
8.1 Pict Programming Language Syntax (pg. 146)
8.2 Pict Programming Language Operational Semantics (pg. 152)
8.3 Pict Programming Patterns (pg. 155)
8.4 Common Examples (pg. 158)
8.5 Discussion and Further Reading (pg. 162)
8.6 Exercises (pg. 162)
9 Programming with Actors (pg. 165)
9.1 SALSA Programming Language Syntax (pg. 167)
9.2 SALSA Programming Language Operational Semantics (pg. 173)
9.3 SALSA Programming Patterns (pg. 192)
9.4 Common Examples (pg. 197)
9.5 Discussion and Further Reading (pg. 202)
9.6 Exercises (pg. 203)
10 Programming with Join Patterns (pg. 205)
10.1 JoCaml Programming Language Syntax (pg. 206)
10.2 JoCaml Programming Language Operational Semantics (pg. 212)
10.3 JoCaml Programming Patterns (pg. 215)
10.4 Common Examples (pg. 219)
10.5 Discussion and Further Reading (pg. 221)
10.6 Exercises (pg. 222)
11 Social Networking Example (pg. 223)
11.1 Specification (pg. 223)
11.2 Design (pg. 224)
11.3 Implementation in the Pict Programming Language (pg. 225)
11.4 Implementation in the SALSA Programming Language (pg. 235)
11.5 Implementation in the JoCaml Programming Language (pg. 242)
11.6 Testing (pg. 252)
11.7 Discussion and Further Reading (pg. 253)
11.8 Exercises (pg. 257)
References (pg. 259)
Index (pg. 267)