Instructor: Assistant Professor Raffi Khatchadourian
This course is intended to be a survey on the fundamental concepts and principles that underlie current and emerging methods, tools, and techniques for the design and implementation of modern programming languages. This includes the understanding and appreciation of topics in designing and implementing modern programming languages such as attribute grammars, operational, axiomatic, and denotational semantics, (static and dynamic) type systems, and functional programming and its relationship with mainstream Object-Oriented languages, frameworks, and libraries (APIs).
- Attribute grammars
- Operational semantics for Lisp
- Operational semantics for an imperative language
- Axiomatic semantics
- Type systems
- Concurrency and data structures for concurrent and distributed computing
- MapReduce and Streaming APIs for mainstream Object-Oriented languages
Textbooks and Materials
While there are no required texts, there are readings from the books listed below. The books will be placed on reserve at the library or are available online:
|Formal Specification of Programming Languages: A Panoramic Primer
|Formal Syntax and Semantics of Programming Languages
||Slonneger and Kurtz
|The Formal Semantics of Programming Languages: An Introduction
|The Study of Programming Languages
|Types and Programming Languages
|Lisp 1.5 Programmer’s Manual
||McCarthy et al.
|Semantics with Applications: A Formal Introduction
||Nielson and Nielson
|Java SE8 for the Really Impatient
|Structure and Interpretation of Computer Programs
||Sussman and Abelson
- Be able to write attribute grammars and derivations of simple programs.
- Be able to understand and define basic operational semantics.
- Be able to understand and define basic axiomatic semantics.
- Be able to formulate and prove type safety theorems.
- Be able to formulate and reason about key object oriented programming features.
- Be able to formulate and reason about key concurrency programming features.