An Experiential Introduction to Principles of Programming Languages
A textbook that uses a hands-on approach to teach principles of programming languages, with Java as the implementation language.
This introductory textbook teaches the principles of programming languages by using an experiential learning style, in which students learn about language features by realizing those features in a pedagogical compiler. Students use Java—the most commonly used programming language in the first two years of the computer science curriculum—as the implementation language throughout. The book also discusses a range of emerging topics in programming languages missing from existing textbooks, including concurrency, Big Data, and event-driven programming. The goal is to prepare students to design, implement, analyze, and understand both domain-specific and general-purpose programming languages.
The book first develops basic concepts in languages, including means of computation using primitive values, means of combination such as variable definition and functions, and means of abstraction such as functions and recursive functions. It then examines imperative features such as references, concurrency features such as fork, and reactive features such as event handling. Finally, it looks at language features that express important, and often different, perspectives of thinking about computation, including those of logic programming and flow-based programming. Each chapter is associated with a working implementation of a small programming language, and students are encouraged to obtain the code corresponding to the chapters and follow along. Students should have experience in programming with Java as well as an understanding of object-oriented classes, inheritance, polymorphism, and static classes.