skip to main content
Skip header Section
Essentials of Programming Languages, 3rd EditionApril 2008
Publisher:
  • The MIT Press
ISBN:978-0-262-06279-4
Published:30 April 2008
Pages:
416
Skip Bibliometrics Section
Bibliometrics
Skip Abstract Section
Abstract

This book provides students with a deep, working understanding of the essential concepts of programming languages. Most of these essentials relate to the semantics, or meaning, of program elements, and the text uses interpreters (short programs that directly analyze an abstract representation of the program text) to express the semantics of many essential language elements in a way that is both clear and executable. The approach is both analytical and hands-on. The book provides views of programming languages using widely varying levels of abstraction, maintaining a clear connection between the high-level and low-level views. Exercises are a vital part of the text and are scattered throughout; the text explains the key concepts, and the exercises explore alternative designs and other issues. The complete Scheme code for all the interpreters and analyzers in the book can be found online through The MIT Press Web site. For this new edition, each chapter has been revised and many new exercises have been added. Significant additions have been made to the text, including completely new chapters on modules and continuation-passing style. Essentials of Programming Languages can be used for both graduate and undergraduate courses, and for continuing education courses for programmers.

Cited By

  1. Buszka M and Biernacki D Automating the Functional Correspondence Between Higher-Order Evaluators and Abstract Machines Logic-Based Program Synthesis and Transformation, (38-59)
  2. ACM
    Aloor R and Nandivada V Efficiency and expressiveness in UW-OpenMP Proceedings of the 28th International Conference on Compiler Construction, (182-192)
  3. ACM
    Jeong E, Jeong J, Kim S, Yu G and Chun B Improving the expressiveness of deep learning frameworks with recursion Proceedings of the Thirteenth EuroSys Conference, (1-13)
  4. ACM
    Monteiro F, Januário F, Cordeiro L and de Lima Filho E (2017). BMCLua, ACM SIGSOFT Software Engineering Notes, 42:3, (1-10), Online publication date: 5-Sep-2017.
  5. ACM
    Van Es N, Nicolay J, Stievenart Q, D'Hondt T and De Roover C A performant scheme interpreter in asm.js Proceedings of the 31st Annual ACM Symposium on Applied Computing, (1944-1951)
  6. ACM
    Perugini S and Buck J A language-based model for specifying and staging mixed-initiative dialogs Proceedings of the 8th ACM SIGCHI Symposium on Engineering Interactive Computing Systems, (204-216)
  7. ACM
    Lasseter J The Interpreter In An Undergraduate Compilers Course Proceedings of the 46th ACM Technical Symposium on Computer Science Education, (168-173)
  8. Zhai K, Townsend R, Lairmore L, Kim M and Edwards S Hardware synthesis from a recursive functional language Proceedings of the 10th International Conference on Hardware/Software Codesign and System Synthesis, (83-93)
  9. ACM
    Roth B, Jahn M and Jablonski S On the way of bottom-up designing textual domain-specific modelling languages Proceedings of the 2013 ACM workshop on Domain-specific modeling, (51-56)
  10. Morazán M Beautiful Imperative Code Essays Dedicated to Rinus Plasmeijer on the Occasion of His 61st Birthday on The Beauty of Functional Code - Volume 8106, (273-284)
  11. ACM
    Bainomugisha E, Vallejos J, De Roover C, Carreton A and De Meuter W Interruptible context-dependent executions Proceedings of the ACM international symposium on New ideas, new paradigms, and reflections on programming and software, (67-84)
  12. ACM
    Herzeel C and Costanza P Dynamic parallelization of recursive code Proceedings of the ACM international conference on Object oriented programming systems languages and applications, (377-396)
  13. ACM
    Herzeel C and Costanza P (2010). Dynamic parallelization of recursive code, ACM SIGPLAN Notices, 45:10, (377-396), Online publication date: 17-Oct-2010.
  14. ACM
    Yu W Fault handling and recovery in decentralized services orchestration Proceedings of the 12th International Conference on Information Integration and Web-based Applications & Services, (98-105)
  15. ACM
    Brown R, Shoop E, Adams J, Clifton C, Gardner M, Haupt M and Hinsbeeck P Strategies for preparing computer science students for the multicore world Proceedings of the 2010 ITiCSE working group reports, (97-115)
  16. Fenwick J and Gross L Lazy evaluation of PDE coefficients in the EScript system Proceedings of the Eighth Australasian Symposium on Parallel and Distributed Computing - Volume 107, (71-76)
  17. Anton K and Thiemann P Towards deriving type systems and implementations for coroutines Proceedings of the 8th Asian conference on Programming languages and systems, (63-79)
  18. ACM
    Siek J and Vachharajani M Gradual typing with unification-based inference Proceedings of the 2008 symposium on Dynamic languages, (1-12)
  19. ACM
    Felleisen M (2008). Why teach programming languages in this day and age and how to go about it, ACM SIGPLAN Notices, 43:11, (59-61), Online publication date: 30-Nov-2008.
  20. ACM
    Wand M and Friedman D (2008). Programming languages, ACM SIGPLAN Notices, 43:11, (133-135), Online publication date: 30-Nov-2008.
  21. Danvy O From reduction-based to reduction-free normalization Proceedings of the 6th international conference on Advanced functional programming, (66-164)
Contributors
  • Indiana University Bloomington
  • Northeastern University

Recommendations

Simon John Thompson

What is the best way to talk about the general topic of programming languages__?__ Certainly, the most common approach adopts the pattern of "compare features X, Y, Z in languages A, B, and C," but this often leaves the reader overwhelmed with details, unable to see the fundamentals that lie beneath. A small number of texts break this mold. Tennent's book [1], inspired by the school of semantics started by Christopher Strachey and Dana Scott, presents an analytical overview of language features, and provides the reader with critical tools such as the "principle of correspondence," which allows the reader to view languages in a new way. This book, first published in 1991, with new editions in 2001 and 2008, has been similarly influential. Friedman and Wand present the various features of languages by means of a series of interpreters written in the Scheme dialect of Lisp. The advantage of this approach is that everything is executable; therefore, readers are able to see directly the effect of their semantic choices on the meaning of sample programs. The text begins by covering traditional ground: expression evaluation, parameter mechanisms, and state. Once a direct approach has been presented, this is contrasted with more efficient mechanisms, such as continuation passing (CPS) and trampolining interpreters. To support readers moving to these more sophisticated styles, Friedman and Wand provide "recipes" for making the conversion to CPS. The last third of the book adds a treatment of types, type checking, modules, and objects?much of which is new to this edition. The foreword to the new edition makes a point about the variety of new frameworks for programming, particularly those involving the Web, that have become available since the book was first written, and the role that interpreters can play in supporting these new technologies. Central to many of these new technologies is concurrency, and while this is treated here through a discussion of threads, Friedman and Wand do not take the opportunity to discuss any alternative approaches, such as message passing between communicating processes. However, a comprehensive appendix gives an abundance of suggestions for further reading. This is a text that combines an insightful analysis of the building blocks of programming languages with an excellent practical tutorial on how to write interpreters. Because of this, I highly recommend it to students, academics, and practitioners alike. Online Computing Reviews Service

Access critical reviews of Computing literature here

Become a reviewer for Computing Reviews.