Concepts and structures governing the design and implementation of modern programming languages. Introduction to concepts of compilers and run-time representations of programming languages. Features of programming languages supporting abstraction. Programming language paradigms including procedural, functional programming, object-oriented programming, polymorphism, concurrency, etc. Illustrative programs will be required in languages illustrating each of these paradigms, in particular ML and GJ. Prerequisite: Computer Science 136.