CS 3200: Organization of Programming Languages

Fall 2017

Programming Languages

There are thousands of programming languages, from A#.NET to ZPL and everything in between. Do you need to know all of them to be a good programmer/engineer/computer scientist?

The goal of this course is to convince you that the answer to this question is no. In fact, many programming languages — while superficially distinct at the level of syntax — are actually quite similar once you take a closer look.

This semester, we'll explore by boiling a number of programming languages down to a small set of more fundamental language features, including structured data, control, mutable state, (higher-order) functions, types, polymorphism, and objects. Once you understand how these features work in isolation, you'll start seeing them (or not!) in all your favorite programming languages. This, in turn, will make it easy to pick up new languages with minimal fuss.

To learn many of these features, you'll be implementing them yourselves within a series of increasingly complex interpreters for small programming languages. The meta-language for programming and discussion is Pyret, a new PL developed primarily by Shriram Krishnamurthi at Brown University. Try it out right now at code.pyret.org/editor.
Pyret logo

Meeting: MWF 2:00–2:55 p.m., location to be determined
Instructor: Gordon Stewart (gstewart@ohio.edu)
Office Hours: Stocker 355, time to be determined
Textbook: PAPL
Student Outcomes


CS 2650 and 300, but also: Some mathematical maturity (at the level of "I've seen and done a few proofs before") and (most importantly) a desire to learn!

Course Structure

We'll meet MWF from 2-2:55pm. Attendance in class is required.

Homework will include a mix of programming and written assignments, as well as some Blackboard quizzes. We'll have both a traditional in-class midterm and a final.

The grading breakdown is roughly as follows:

Attendance and Quizzes10%

Blackboard will be used only to report grades. Up-to-date information on other aspects of the course (assignment due dates, etc.) will be posted on this website so check back frequently!

Assignments Key:
Programming Assignment DUE
Blackboard Quiz DUE
Unless otherwise noted, assignments and quizzes are due at 11:59pm.

Schedule (Tentative)

Intro. to Course, Functional Programming in Pyret
W1: 8/28-9/1
Intro. to programming languages
Intro. to functional programming in Pyret
Reading: PAPL 2 ,
W2: 9/4-8
Lists, recursion, higher-order functions
Reading: PAPL 6
W 9/6: Q0 Due
W 9/6: A0 Due: A0: Intro. to Pyret.
M 9/4: Holiday - NO CLASS
W 9/6: Pyret QuickStart Lab, Stocker 307, time TBD
W3: 9/11-15
Structured data, pattern-matching
Recursive and polymorphic datatypes
Reading: PAPL 7, 8, and 9
W 9/13: Q1 Due
W 9/13: A1 Due: A1: Lists.
W4: 9/18-22
Functions as data
Lazy evaluation, streams
Reading: PAPL 13
W 9/20: Q2 Due
W5: 9/25-29
Sharing and equality
Programming with state
Reading: PAPL 18 and 20
W 9/27: A2 Due: A2: More Functional Programming.
PL Through Interpreters
W6: 10/2-6
Representing programs: concrete vs. abstract syntax
S-expressions and our first interpreter
Reading: PAPL 23 and 24
W 10/4: Q3 Due
W7: 10/9-13
Desugaring, basic control flow
Reading: PAPL 25
T 10/10: Fall Semester Reading Day
F 10/13: In-Class Midterm
W8: 10/16-20
Interpreting functions
Reading: PAPL 26
W 10/18: A3 Due: A3: Grumpy0.
W9: 10/23-27
Types and type-checking
Reading: PAPL 27
W10: 10/30-11/3
More types, type safety
Reading: PAPL 28
W 11/2: Q4 Due
W11: 11/6-10
Parametric polymorphism, type inference
Reading: PAPL 29 and 30
W 11/8: A4 Due: A4: Grumpy1.
F 11/10: Holiday - NO CLASS
W12: 11/13-17
Mutable state, references and reference types
Reading: PAPL 31
W13: 11/20-24
Reading: PAPL 32
W 11/15: Q5 Due
W-F 11/22-24: Thanksgiving - NO CLASSES
Interlude: Logic Programming
W14: 11/27-12/1
An introduction to Datalog
Reading: TBD
W 11/29: A5 Due: A5: Grumpy2.
Looking Ahead
W15: 12/4-8
Advanced programming languages
Reading: TBD
12/11-15: Final Exam Period

Homework and Lateness Policy

Homework will usually be due Tuesdays, by the start of class (1:30 p.m.). Late homework assignments will be penalized according to the following formula:

Academic Honesty Policy

You may discuss the homework with other students in the class, but only after you've attempted the problems on your own first. If you do discuss the homework problems with others, write the names of the students you spoke with, along with a brief summary of what you discussed, in a README comment at the top of each submission. Example:

(* README Gordon Stewart, A0
I worked with X and Y. We swapped tips regarding the use of lists in Pyret. *)

However, under no circumstances are you permitted to share or directly copy code or other written homework material, except with course instructors. The code and proofs you turn in must be your own. If I discover that you've cheated on an assignment, you'll get an automatic 0 along with an immediate referral to the Office of Community Standards, which will likely take disciplinary action against you. Remember: homework is there to give *you* practice in the new ideas and techniques covered by the course; it does you no good if you don't engage!

In general, students in EECS courses such as this one must adhere to the Russ College of Engineering and Technology Honor Code, and to the OU Student Code of Conduct.

Students with Disabilities

If you suspect you may need an accommodation based on the impact of a disability, please contact me privately to discuss your specific needs. If you're not yet registered as a student with a disability, contact the Office of Student Accessibility Services first.

Student Outcomes

(a) An ability to apply knowledge of computing and mathematics appropriate to the program's student outcomes and to the discipline. Students will be able to:

(b) An ability to analyze a problem, and identify and define the computing requirements appropriate to its solution. Students will be able to:

(c) An ability to design, implement, and evaluate a computer-based system, process, component, or program to meet desired needs. Students will be able to:

(j) An ability to apply mathematical foundations, algorithmic principles, and computer science theory in the modeling and design of computer-based systems in a way that demonstrates comprehension of the tradeoffs involved in design choices. Students will be able to: