On this page:
CS 442:   Principles of Programming Languages

CS 442: Principles of Programming Languages

This is the home page for CS 442 (Principles of Programming Languages) at the University of Waterloo (Winter 2018). The course will cover most of the topics in the handbook description, though the order will be rearranged. We will not cover object-oriented programming or logic programming. The Winter 2018 offering will most resemble my Winter 2015 offering, though there is also considerable resemblance to other offerings from 2013 on.

The required textbook (Types and Programming Languages, by Benjamin Pierce) largely defines the course, though we will cover only selected chapters, and the book does not cover specific features of the programming languages described below.

We will study three programming languages: Racket, OCaml, and Haskell. Each of these contributes significant concepts which can be rigourously formalized, and we will do so. Our goal is to understand not only the idiomatic use of these languages and their strengths and weaknesses, but also their theoretical underpinnings, and issues that arise in their implementations. If time permits, we will look at the Idris programming language.

The first lecture module will give a few more details on the scope of coverage of topics.

Instructor: Prabhakar Ragde (plragde at uwaterloo dot ca)

Lectures: Tuesdays and Thursdays, 1:00 - 2:20pm, MC 4045.

Office hours: Tuesdays and Thursdays, 2:30 - 3:30pm, DC 1314, or by appointment. (On some days, office hours will be in the period 10:00am - 12:00 pm, watch Piazza.)

Teaching Assistants: Nimesh Ghelani, Ifaz Kabir, Marianna Rapoport.

TA office hours: Ifaz Kabir, Tuesdays 10:30-11:50am in DC 3544 (knock if door closed).

    1 Logistics

      1.1 Textbook

      1.2 Getting Help

      1.3 Lectures

      1.4 Homework

      1.5 Exams

      1.6 Grading

      1.7 Software

    2 Handouts

      2.1 Intellectual Property

    3 Assignments

      3.1 Plagiarism Policy

    4 Marmoset

      4.1 Accessing Marmoset

      4.2 Submitting Assignments

      4.3 Tests on Marmoset

      4.4 After Submitting a Program

      4.5 Interpreting Test Results

      4.6 Common Marmoset Test Messages

      4.7 Assessment

    5 Resources