CSCI 312: Programming Language Design (W22)

CSCI 312: Programming Language Design

General Information

 

Professor: Simon D. Levy

Textbook: Miran Lipovača, Learn You a Haskell for Great Good.  If that link isn’t working, you can read a free online copy of the book from the W&L library or  purchase your own copy.

Objectives

By the end of the course you will be able to

    • Write nontrivial programs in Haskell
    • Design your own programming languages and build interpreters for them.
    • Deal with intermittent failure and frustration as unavoidable waypoints on the path to success.

In the process of learning these very practical skills, you will gain familiarity with the some of the most beautiful and elegant ideas in computer science, with profound connections to many other disciplines.

Content

Although I have taught this course many times, this is the first time that I have taught it using Haskell.  For that reason we will borrow heavily from the content of a similar Haskell-based course at Pomona College.

Grading

The written work for the course will consist of

    • Homework assignments, done on your own and due in your github repository by 11:59pm on the due date: 50% of grade
    • Two one-hour exams,  15% each = 30% of grade
    • Comprehensive final exam: 20% of grade

Because of the rapid pace of the course, I will not accept late work without prior notice from the Dean’s Office.

Accommodations

Washington and Lee University makes reasonable academic accommodations for qualified students with disabilities. All undergraduate accommodations must be approved through the Office of the Dean of the College. Students requesting accommodations for this course should present an official accommodation letter within the first two weeks of the (fall or winter) term and schedule a meeting outside of class time to discuss accommodations. It is the student’s responsibility to present this paperwork in a timely fashion and to follow up about accommodation arrangements. Accommodations for test-taking should be arranged with the professor at least a week before the date of the test or exam.

Final Exam Policy

The final exam for this course will be given during the final exam week. The exam will be distributed electronically for you to complete in no more than three hours. You can return the exam to me via github

Honor System

Unless stated otherwise, the exams will be done without books or notes and without assistance from other people.  For the programming assignments you should feel free to discuss approaches with other students, as long as you are not sharing or copying code.

Tentative Schedule

  Monday Tuesday Wednesday Thursday Friday
08 Jan
Week 0
     

Lecture:
Introduction to PLs;
PLs vs. Natural Languages

 

Exercise: Setting up Haskell


Reading: Chapters 1, 2 
 
15 Jan
Week 1
 

Lecture: PL History;

Problems with inheritance

Java example


Exercise: Haskell Warmup

Hw01.hs


Reading: Chapter 3

 

Reading: Chapter 4

Reading: Chapter 5

 
22 Jan
Week 2

 

 

Reading: Chapter 6

Due: Assignment 1

 

Reading: Chapter 6

 
29 Jan
Week 3
 

Discussion: Abstract Syntax Trees

Review for Exam #1

  In-class Exam #1  
05 Feb
Week 4

Due: Assignment 2

Hw02.hs

Discuss Exam #1

 

Reading: Chapter 7

  Reading: Chapter 8  
12 Feb
Week 5
 

Reading: Chapter 8

Discussion: Parsing with Difference Lists

  Reading: Chapter 8  
19 Feb
Week 6

 

Due: Assignment 3

Hw03.hs

Reading: Chapter 11   Reading: Chapter 11  
04 Mar
Week 7
 

Reading: Chapter 11

Review for Exam #2

  In-class Exam #2  
11 Mar
Week 8

Due: Assignment 4

Hw04.hs

Discuss Exam #2  

Finish Chapter 11 

Begin Assignment 5

Applicative Functors

Alternative

 

 
18 Mar
Week 9
 

Chapter 11/12: Monoids 

Monoids!

 

 

Chapter 11/12: Monoids 

 

 
25 Mar
Week 10
  Chapter 12/13: Monads

 

 

 

Due: Assignment 5

Chapter 12/13: Monads

 
01 Apr
Week 11
 
Chapter 12/13: Monads
  Chapter 12/13: Monads  
08 Apr Week 12   Chapter 12/13: Monads   Review for final exam

Due: Assignment 6

Hw06.zip