# CS 581: Programming Languages I (Fall 2019)

Instructor: | Eric Walkingshaw () |

TA: | Qiaoran Li (liqiao) |

Lectures: | T Th, 4:00–5:20pm, KEC 1003 |

Office Hours: | M 2:00–3:00pm, Johnson 121 (Qiaoran) |

T 1:30–2:30, KEC 3049 (Eric) | |

Th 5:20–6:20pm, KEC 3049 (Eric) | |

Piazza: | CS 581 on Piazza (Use of Piazza) |

## Course Description

CS 581: Programming Languages I, is the 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 5**(I’m traveling)**Nov 22**(Thanksgiving)

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

**Oct 17**– Quiz #1**Oct 29**– Quiz #2**Nov 7**– Midterm**Nov 26**– Quiz #3**Tue Dec 10, 9:30 – 11:20am**– Final Exam

## Slides, Reading Assignments, and Code Examples

Slides and code examples from the lectures will be posted below, usually just before class. I may continue to update the slides 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.

Slides | Reading | Additional files | ||
---|---|---|---|---|

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

Oct 1 | Functional Programming | H 3–6 | Basics.hs, Sugar1.hs, Lists.hs, Refactoring.hs | |

Oct 15 | Syntax | S 1 | StackLang.hs | |

Oct 17 | Inference Rules | P 2–3.1 | ||

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

Oct 31 | Lambda Calculus | S 3 ex. 13 | LambdaCalculus.hs, DeBruijn.hs, Church.hs | |

Nov 21 | Denotational Semantics | S 2.3, 3–6 | Let.hs, RegCalc.hs, While.hs |

## Homework Assignments

Please take a moment to read the **Homework Policy**.

Homework assignments are submitted through TEACH. Log in and click “Submit Assignment” in the navigation bar on the right, located under “Class Tools”. You should see a list of currently open submissions.

Since homework assignments are intended to support the in-class discussion, **late homework may not be accepted.** Please be sure to submit your homework on time.

- Introduce Yourself! — due: Sep 30, 5pm
- Homework #1 — due: Oct 1, 1pm
- Homework #2 — due: Oct 3, 1pm
- Homework #3 — due: Oct 8, 1pm
- Homework #4 — due: Oct 10, 1pm
- Homework #5 — due: Oct 24, 1pm
- Homework #6 — due: Oct 31, 4pm (start of class)
- Homework #7: Exercises on slide 25 — due: Nov 14, 4pm (start of class)
- Homework #8 — due: Nov 21, 1pm
- Homework #9 — due:
~~Nov 26~~Dec 3, 1pm

## 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 weeks)

## Grades

Grades will be computed using the following weights.

- 25% Homework
- 10% Participation
- 15% Quizzes (3 x 5% each)
- 20% Midterm Exam
- 30% 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.