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)|
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.
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.
|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|
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 26Dec 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 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.