This self-contained textbook assumes that the reader has some familiarity with one programming language, and adopts a simple yet rigorous approach.
The author explains the main programming paradigms (imperative, object-oriented, functional, and logic), and makes clear separation between the design, implementation and pragmatic aspects of programming languages.
As well as an excellent guide for undergraduates the content will also be useful for software practitioners who want to consolidate and update their knowledge of programming languages.
With great pleasure, I accepted the invitation extended to me to write these few lines of Foreword. I accepted for at least two reasons. The first is that the request came to me from two colleagues for whom I have always had the greatest regard, starting from the time when I first knew and appreciated them as students and as young researchers.
The second reason is that the text by Gabbrielli and Martini is very near to the book that I would have liked to have written but, for various reasons, never have. In particular, the approach adopted in this book is the one which I myself have followed when organising the various courses on programming languages I have taught for almost thirty years at different levels under various titles.