Design is an essential topic for all computer science students regardless of whether or not they will ever have to create a programming language. The user who understands the motivation for various language facilities will be able to use them more intelligently; the compiler writer to implement them more reasonably. This new edition of Principles of Programming Languages covers both design and implementation issues important for computer users and compiler writers. It goes beyond these basic topics to cover descriptive tools as well as historical precedents so that design issues can be communicated and viewed in their historical context. Principles of programming languages are emphasized, not the details of language syntax. Methods of implementation are emphasized over the specific techniques. A horizontal organization, analysing individual languages in their entirety makes this book unique.;This third edition is a complete and thorough revision of the last edition including the following: Discussions have been added in the "phenomenology" of programming languages and the rolse od conceptual models in language design; also, a discussion of system implementation languages, with an emphasis on C, has been added. Programming environments are discussed, as illustrated by the Interlisp system. This is in the context of a discussion of language characteristics conducive to rich programming environments. Furthermore, since Window-oriented interfaces are now more widely known, their description has been eliminated from the discussion of SmallTalk, except for a few historical remarks. This permits some new discussion of recent developments in object oriented programming (including C++, Ada 95, CLOS, Java, and the like), to the extent that they support the overall objectives of the book. Also, the discussion of multiple inheritance has been expanded. The purpose of this book is to teach the skills required to design programming languages.;These skills are summarized in a number of principles, which are illustrated by case studies of several programming languages representing the five major generations of programming language design. This text is designed for a graduate course in Computer Science; the course is commonly called Programming Languages, Comparitive Languages, or Theory of Programming Languages. It could be used for any course in programming languages, even if the emphasis is not on design. In such cases it might have to be supplemented with another book containing detailed language descriptions. In addition, it might also be an auxillary text in a course on human interfeace design or software engineering.