Note that the information below applies to the CIS500 course. The syllabus
for the Software Foundations area of the WPE-I can be found here.
|
This course introduces basic concepts and techniques in the foundational
study of programming languages. The central theme is the view of
individual programs and whole languages as mathematical objects about
which precise claims may be made and proved. Particular topics include
operational techniques for formal definition of language features, type
systems and type safety properties, polymorphism and subtyping,
foundations of object-oriented programming, and mechanisms supporting
information hiding and programming in the large.
Grading
Breakdown for the course grade is as follows:
- Homework: 20%
- Midterm 1: 20%
- Midterm 2: 20%
- Final Exam: 40%
Prerequisites:
An undergraduate-level course in programming languages or
compilers; significant programming experience.
Syllabus:
Part O Background
A taste of OCaml
Functional programming style
Part I Basics
Operational semantics
Inductive proof techniques
The lambda-calculus
Evaluator implementation
Syntactic sugar; fully abstract translations
Part II Type systems
Simple types
Type safety
References
Subtyping
Part III Object-oriented features
A simple imperative object model
An analysis of core Java
Part IV Modularity [time permitting]
Polymorphism
Abstraction and representation independence
Existential types
Objects vs. ADTs
Advanced module systems
Textbook:
Types and Programming Languages Benjamin C. Pierce
MIT Press, 2002
|