The approach to implementing programming languages has shifted noticeably over the past two decades. The success of Java, with its virtual-machine approach, has paved the way for alternative methods of implementing mainstream languages, diverging from traditional machine-language targeted compilation. Since then, many successful modern programming languages such as JavaScript, Ruby, and Python have offered alternative implementation techniques such as incremental interpreters, virtual machines, and just-in-time compilers.
The rise of domain-specific languages, sometimes called “little languages,” has likewise been influenced and supported by this shift. Domain-specific languages can solve problems in specific problem areas within their specialized domains, unlike general-purpose languages such as Python or C++, which solve problems in a wide spectrum of domains.
In this book we explore the various techniques and perspectives brought about by this shift in programming language implementation. We particularly focus on domain-specific languages, which rarely use full-blown compilers for implementation in favor of an interpretation or virtual-machine approach.
- A “from day one” approach gets students started with implementing programming languages right away.
- Small, realistic languages are used to cover interpretation, virtual machines, and compilers.
- Implementation is “from scratch,” so all steps are transparent and accessible to the student.