# CS 581: Programming Languages I (Fall 2017)

Instructor: | Eric Walkingshaw () |

TA: | Mike McGirr (mcgirrm) |

Lectures: | T Th, 4:00–5:20pm, Withycombe 217 (map) |

Office Hours: | M 1:00–2:00pm, KEC Atrium (Mike) |

W 10:30am–11:30am, KEC Atrium (Mike) | |

Th 5:20–6:30pm, 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 to be covered include: functional programming in Haskell, abstract and concrete syntax, lambda calculus, Church encodings, denotational semantics, domain theory, interpreters, and more!

**Course Syllabus**– All of the information in the syllabus is also contained on this web page. Note that if the schedule changes during the quarter, the web page will reflect the revised schedule but*the syllabus will not be updated*.**Community Statement**– This course is highly 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.

## Important Dates

There will be no class on the following days:

**Nov 23**(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 12**– Quiz #1 (and short class)**Oct 26**– Quiz #2**Nov 9**– Midterm**Nov 28**– Quiz #3**Thurs Dec 7, 6:00 – 7:50pm**– 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 21 | Course Introduction | M 1–2; H 1 | Basics.hs, Doctest.hs |

Sep 26 | Functional Programming | H 2–6 | Refactor.hs, Functor.hs |

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

Oct 19 | Inference Rules | P 2–3 | |

Oct 24 | Operational Semantics | P 5 | |

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

Nov 16 | Denotational Semantics | S 2.3, 3–6 | Let.hs, RegCalc.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 25, 5pm
- Homework #1 — due: Oct 2, 11pm
- Homework #2 — due: Oct 4, 11pm
- Homework #3 — due: Oct 17, 4pm
- Homework #4 — due: Oct 30, 11pm
- Homework #5 — due: Nov 30, 11pm

## Grades

Grades will be computed using the following weights.

- 20% Homework
- 15% 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.