Parallel machines are now affordable and available to many users in the form of small symmetric shared-memory multiprocessors (SMPs). Unfortunately, programming practices have not kept pace with this hardware advance. The vast majority of developers still write applications in sequential programming languages that do not exploit multiple processors. The traditional approaches for adding parallelism to
applications are prone to introducing new, strange, and difficult-to-eliminate bugs. In this important new text, the authors offer a completely different vision of the future, where parallel programming is the default and sequential programming is a special case. The foundation of this vision is an implicitly
parallel programming language, pH, which is the result of two decades of research by the authors. A dialect
and extension of the standard nonstrict and purely functional language Haskell, pH is essentially Haskell
with implicitly parallel semantics. PH's extensions to Haskell comprise a disciplined approach to shared parallel state so that a pH program - even a beginner's program - is implicitly parallel. The authors have developed this text over ten years while teaching implicit parallel programming to graduate students at MIT and specialized short courses to undergraduates and software professionals in the U.S., Japan, and India.