# CS 581: Programming Languages I (Fall 2020)

Instructor: | Eric Walkingshaw () |

TA: | Parisa Ataei (ataeip) |

Lectures: | T Th, 4:00–5:20pm, Zoom (all Zoom links available via Canvas) |

Office Hours: | M, 2:00-3:00pm (Eric), Zoom (about office hours) |

W, 1:00-2:00pm (Parisa), Zoom | |

Canvas: | CS 581 on Canvas |

## Course Description

CS 581: Programming Languages I, is a graduate-level introductory course in programming languages. The class has no prerequisites. A primary goal is to provide a common foundation for all students wishing to do research in programming languages or take further graduate-level programming languages courses.

Topics include: functional programming in Haskell, abstract and concrete syntax, denotational semantics, operational semantics, lambda calculus, Church encodings, and more!

**Community Statement**– This course is intended to be interactive, so it is vitally important that every student feels safe and welcome to contribute. Please read this statement and let’s work together to make this a great environment for everyone.**Textbooks and Other Resources**– This page contains links to our (online and freely available) textbooks/readings, instructions for working with Haskell, and other resources.

This webpage is a “living syllabus”. All information you need for the class is provided or linked here, and every effort will be made to keep that information up-to-date.

## Important Dates

There will be no class on the following days:

**Nov 26**(Thanksgiving)

The following days are currently scheduled for quizzes and exams. I will announce any changes to this schedule both in-class and on Canvas.

**Oct 21**– Quiz #1**Oct 28**– Quiz #2**Nov 5**– Midterm**Nov 18**– Quiz #3**Dec 9**– Final Exam

## Slides, Reading Assignments, and Code Examples

Slides and code examples from the lectures will be posted below, usually just before or after class. I may continue to update slides and code for each stage of the course until we are done with that stage, so always make sure you have the latest version.

Reading assignments for each stage are also listed below. Here are links to the textbooks, which are freely available.

Week | Topic and Slides | Reading | Additional files |
---|---|---|---|

0 | Course Introduction | M 1–2; H 1–2 | Doctest.hs |

1–3 | Functional Programming | H 3–6 | Basics.hs, Lists.hs, Refactor.hs, RefactorDataPre.hs, RefactorDataPost.hs |

3–4 | Syntax | S 1 | StackLang.hs |

4 | Inference Rules | P 2–3.1 | |

5 | Operational Semantics | P 5 | Bool.hs, StackLang.hs |

6–8 | Lambda Calculus | S 3 ex. 13 | LambdaPractice.txt, LambdaCalculus.hs, HaskellToChurch.hs, DeBruijn.hs |

8–10 | Denotational Semantics | S 2.3, 3–6 | IntBool.hs, Let.hs, RegCalc.hs, StackLang.hs, Imp.hs |

## Homework Assignments

Please take a moment to read the **Homework Policy**, which also contains brief instructions on how to submit your assignments through Canvas.

Unless otherwise stated, all homework deadlines are “end of day” on the due date, that is, 11:59pm Pacific time.

- Introduce Yourself! — due: Sep 25
- Homework #1 — due: Sep 30
- Homework #2 — due: Oct 5
- Homework #3 — due: Oct 12
- Homework #4 — due: Oct 26
- Homework #5: Exercises on slide 25 — due: Nov 12, 4pm (start of class)
- Homework #6 — due: Nov 24

## Course Learning Objectives and Course Content

At the end of the course, students should be able to:

**Describe**the role of metalanguages in defining programming languages**Infer**the type of an expression given the types of its components**Implement**a recursive function over an algebraic data type**Implement**an interpreter for a language given a formal definition**Design**an abstract syntax for a simple programming language**Evaluate**the suitability of a semantic domain for a particular language**Design**a semantics for a simple programming language**Apply**a given reduction strategy to evaluate a lambda calculus expression**Translate**between encodings of a language in different metalanguages

With these objectives in mind, the course will cover the following topics:

- Functional programming in Haskell (~2 weeks)
- Abstract and concrete syntax (~1 week)
- Inference rules and operational semantics (~1.5 weeks)
- Lambda calculus (~2.5 weeks)
- Denotational semantics (~2.5 weeks)

## Grades

Grades will be computed using the following weights.

- 20% Homework
- 20% Participation
- 20% Quizzes (4 x 5% each)
- 15% Midterm Exam
- 25% Final Exam

Grades are assigned using the following standard ranges, after rounding.

≥ 93% = A | 90–92% = A- | |

87–89% = B+ | 83–86% = B | 80–82% = B- |

77–79% = C+ | 73–76% = C | 70–72% = C- |

60–69% = D | ||

≤ 59% = F |

Overall grades will not be curved. However, scores on individual components (e.g. the midterm exam) may occasionally be adjusted upward by a constant factor for the entire class.

### Accommodations for Students with Disabilities

Accommodations for students with disabilities are determined and approved by Disability Access Services (DAS). If you, as a student, believe you are eligible for accommodations but have not obtained approval please contact DAS immediately at 541-737-4098 or at http://ds.oregonstate.edu. DAS notifies students and faculty members of approved academic accommodations and coordinates implementation of those accommodations. While not required, students and faculty members are encouraged to discuss details of the implementation of individual accommodations.