CS 3200: Organization of Programming Languages

Fall 2019

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 3:05–4pm, Walter Hall 145
Instructor: Gordon Stewart (gstewart@ohio.edu)
Office Hours: Stocker 355, Time: W 2-2:55pm, F 10:50-11:45am
TAs: Robin Kelby(1x) (rk345613@ohio.edu), Tim Steinberger(0.5x) (ts409415@ohio.edu)
TA Lab Hours: Tu 2-4PM, W 1-2PM in Stocker 307A
Textbook: PAPL
Piazza Page

Pyret QuickStart Links


CS 2650 and 3000, 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 3:05-4pm. Attendance in class is required.

Homework consists of programming assignments and 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 to post quizzes and 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)

Functional Programming
W1: 8/26-8/30
Intro. to programming languages
Intro. to functional programming in Pyret
Reading: PAPL 1, PAPL 2
Th 8/29: Q0 Due
W2: 9/2-9/6
Lists, recursion, higher-order functions
Reading: PAPL 5.3-5.4, PAPL 6
Supplementary Reading: Sections 1-3 of A tutorial on the universality and expressiveness of fold by Graham Hutton
W 9/4: A0 Due: A0: Intro. to Pyret.
M 9/2: Holiday - NO CLASS
W3: 9/9-9/13
Structured data, pattern-matching, recursive and polymorphic types
Reading: PAPL 7-9, PAPL 15
W 9/11: Q1 Due
W4: 9/16-9/20
Lazy evaluation, streams, monads
Reading: PAPL 13
W 9/18: A1 Due: A1: Lists and Trees.
PL Through Interpreters
W5: 9/23-9/27
Syntax, grammars, parsers, and S-expressions
Reading: PAPL 23
W 9/25: Q2 Due
W6: 9/30-10/4
Parsing and parser combinators
Supplementary Reading: Monadic Parser Combinators by Hutton and Meijer
F 10/4: Fall Break (NO CLASS)
W7: 10/7-10/11
Our first interpreter, basic control flow
Reading: PAPL 24 and 25
F 10/11: In-Class Midterm
W8: 10/14-18
Let expressions, scope
F 10/18: A2 Due: A2: Grumpy0.
W9: 10/21-25
Interpreting functions
Reading: PAPL 26
W10: 10/28-11/1
Types and type-checking
Th 10/31: Q3 Due
Reading: PAPL 27
W11: 11/4-11/8
Mutable state, references and reference types
Reading: PAPL 31
M 11/4: A3 Due: A3: Types.
W12: 11/11-15
Programming language semantics
W 11/13: Q4 Due
M 11/11: Holiday - NO CLASS
W13: 11/18-22
Programming language semantics (contd.)
W 11/20: A4 Due: A4: Grumpy1.
W14: 11/25-29
Type safety, preservation and progress
Reading: PAPL 28
W-F 11/27-12/1: Thanksgiving Break - NO CLASSES
W15: 12/2-12/6
Slack week
W 12/4: Q5 Due
Sunday 12/8: A5 Due: A5: Typed Grumpy Extended.
Wed 12/11: Final Exam (12:20pm in Walter 145)

Student Outcomes vs. Course Learning Outcomes

1. An ability to analyze a complex computing problem and to apply principles of computing and other relevant disciplines to identify solutions. Students will be able to:

6. An ability to apply computer science theory and software development fundamentals to produce computing-based solutions. Students will be able to:

Homework and Lateness Policy

Homework will usually be due Wednesdays by 11:59pm. Late homework assignments will be penalized according to the following formula:

Academic Honesty Policy

Acceptable Collaboration Matrix

Instructor/TANoninstructor (e.g., Another Student)
Youall collaboration allowedhigh-level discussion (of the problems, not your code!) allowed but only after you've started the assignment; must be documented in README as described below
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:

Name: Gordon Stewart
Assignment: A0
Collaboration: I spoke 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. If I discover that you've cheated on an assignment, you'll get an automatic 0, an immediate F for the course, and a direct 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. If you haven't ever read these documents, please do so.

Grading Rubric

I grade programming assignments on a 4-point scale, as follows:
GradeMeaningCorresponding Letter Grade
4Excellent in all respects (demonstrating mastery)A
3Good in most respects (demonstrating understanding)B
2Adequate but lacking in some respects (demonstrating some lack of understanding)C
1Lacking in many respects (demonstrating severe lack of understanding)D
0No assignment submittedF

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.