Concepts in Programming Languages

Instructor: Mooly Sagiv
TA: Yotam Feldman

Lecture: Recitations:

This is a basic which covers some of the main programming languages and also some of the fundamental areas in the programming languages design and implementations. The topics include: operational and denotational program semantics, programming concepts such as higher order functions, lazy and eager evaluation, normal forms such as continuation passing style, polymorphism, type theory, dependent types, and monads. Applications such as domain specific programming languages. The course is inspired by the programming language course in Stanford university

Prerequisites: Computer Models and Software Project.

The grade of the course will be based on 30% homework assignments, and 70% exam.

Reading Material

Course Material

Exercise submission guidelines

Lecture Recitation Exercise
27-28/2 No recitation
04/3 Overview PPTX & Principles of Induction PPTX 6-7/3 Inductive Definitions (revised)
11/3 Natural Operational Semantics PPTX 13-14/3 Natural Operational Semantics Ex. 1 - Syntax, Induction, NOS
Due 01/04/2019
18/3 Structural Operational Semantics PPTX 18/3 Natural & Structural Operational Semantics
semantics implementation
25/3 Lambda Calculus PPTX 27-28/3 Structural Operational Semantics +
Untyped Lambda Calculus
Ex. 2 - NOS & SOS
python files
Due 15/04/2019 23/04/2019
1/4 Simply Typed Lambda Calculus PPTX 3-4/4 Untyped Lambda Calculus 2
Lambda Calculus Evaluation Orders Handout
8/4 An Introduction to ML PPTX 10-11/4 Untyped & Simply Typed Lambda Calculus Ex. 3 - Lambda Calculus
Due 13/05/2019 24/05/2019
29/4 Advanced Issues in ML PPTX 1-2/5 -
6/5 Closure in ML PPTX 8-9/5 - Memorial & Independence days
13/5 Type Inferences for ML PPTX 15-16/5 OCaml 1
Real World OCaml, Chapters 1,2,3,5,6
My Notes
20/5 Javascript PPTX
Storage Management for Programming Languages PPTX
The Kotlin Programming Language PPTX
22&24/5 - OCaml 2
OCaml example: regular expressions library
Additional topics:
List folding and tail recursion
Continuation Passing Style
Tree tail recursive DFS
Ex. 4 - OCaml
ocaml files
Due 06/06/2019
27/5 OCaml Revisited PPTX 29-30/5 - Javascript
Closures in Javascript
Javascript example
3/6 PL Summary 1 PPTX 5-6/6 - Hindley-Milner Type Inference
Hindley-Milner Python implementation
Additional materials:
Hindley-Milner summary (from Cornell)
Let-Polymorhpism (blog post)
Higher-Rank Types (blog post, beyond our course)
Ex. 5 - Javascript, Type Inference
Minesweeper zip file
Due 20/6/2019
10/6 Typed Lambda Calculus PPTX and Type Inference
Exam preparation: slides JS code
12-13/6 - Ask Me Anything!

Course Forum

In the course's Moodle page.

Past Exams

Note: The question about parsing in exams prior to 2018 is replaced by a question about inductive definitions.