Programming Language (CS 550)
Announcments
Lectures
Programs
Course Resources
Assignments and Labs
Grading Policy
 Course Description
Covers basic concepts of the design and implementation of programming languages,
including data representation and types, functions, sequence control,
environments, block structure, subroutines and coroutines, storage management.
Emphasizes language features and implementation, not mastery of any particular
languages.
 Audience

This is a core course for graduate Computer Science students and
is an elective for graduate Software Engineering students.
The course is available to other students with sufficient programming
experience (see prerequisites) who have an interest in programming languages
(e.g. Information Systems, Computer Engineering, etc.).
 Course Themes
 Evaluation and implementation of of programming languages
 Tools for describing and analyzing languages, including syntax,
semantics, and pragmatics
 Programming paradigms (especially functional)
 Proving properties of programs and programming languages
 Formal methods including the use of a proof assistant
 Course Objectives
 Be able to formally specify the syntax and semantics of programming languages.
 Be able to prove properties of programs using both equational reasoning and structural
induction.
 Be able to use a proof assistant to formally verify proofs.
 Be able to implement an interpreter for a simple programming language.
 Be able to formally specify a type system and understand the type inference process.
 Understand how to use a strongly typed language's type system to capture program
invariants.
 Course Benefits
 Better able to formally express concepts and reason about them
 Become a better programmer and write programs with fewer bugs
 Improved ability to select appropriate languages and programming constructs
 Better understand programming languages and their design tradeoffs
 Easier to learn new languages
 Able to design and implement new languages (domain specific languages,
interface specifications, protocols)
 Prerequisites

CS 520 (Foundations of CS), CS 570 (Programming Foundations),
and CS 571 (Programming Tools and Environments).
Assumes familiarity with the basics of logic (predicate calculus),
recursion and induction, data structures, automata, and grammars.
All students should be proficient with at least one objectoriented
programming language (e.g. java, C++)  inheritance, polymorphism,
and should have seen at least two different programming languages.
 Instructor
 Jeremy Johnson
Office: University Crossings 139
phone:
email: jjohnson AT cs DOT drexel DOT edu
office hours: M 89 (online) and R 46 (UC 139 and online) additional hours by appointment.
 TA
 None
 Meeting Time
 Thursday 6:309:30 in Rush 213 and online.
The online and in class sections
of the course will be identical and graded as one class. In class lectures will be recorded
and posted on BBLearn and are available to all students. Online students may view the lecture
live and participate through BBLearn collaborate.
 Course Discussion Groups
 Piazza will be used for class discussion and announcements  check regularly

Textbook
Topics
 Functional Programming and Equational Reasoning (SICP)
 Metacircular Interpreter for Scheme (SICP)
 Streams and Delayed Evaluation (SICP)
 Lambda Calculus (TAPL)
 Types, Polymorphism and Type Inference in Haskell (LYHGG)
 Introduction Coq (SF)
 Operational Semantics (SF,TAPL)
 Proving Program Equivalence (SF,TAPL)
 Hoare Logic (SF,TAPL)
 Type Systems and Type Checking (SF,TAPL)
 Simply Typed Lambda Calculus (SF,TAPL)
Grading
 Homework (5 x 10% = 50%)
 Participation (10 x 2% = 20%)
 Online midterm during week 6 [3 hour block selected by student] (15%)
 Online final during exam week [3 hour block selected by student] (15%)
Grade determined by weighted total in BBLearn. Curve only used if median too low.
Academic Honesty
 Students must abide by the
University Academic Integrity policy
 All work must be your own unless otherwise explicitly stated.
 You may not copy code from any source, including from other students,
nor may you show your code to other students.
Resources

Reference Books
 Alfred V. Aho and Jeffrey D. Ullman,
Foundations of Computer Science  C Edition,
W. H. Freeman and Company, 1995.
 Michael L. Scott, Programming Language Pragmatics, 3rd Ed., Morgan Kaufmann Publishers, 2009.
 Adam Chilapa, Certified Programming with Dependent
Types

Web Pages
 Lambda Calculus Calculator
 PLT Redex
Announcements
See piazza.
Lectures
This list is tentative and may be modified at the instructor's discretion.
 Lecture 1: Functional Programming (SICP Ch. 1)
 Lecture 2: Equational Reasoning and Structural Induction (Notes)
 Lecture 3: Operational Semantics for Scheme (SICP Sections 3.1, 3.2 and 4.1)
 Lecture 4: Streams, Delayed Evaluation and Variants of Scheme (SICP Sections 3.5, 4.2 and 4.3)
 Lecture 5: Lambda Calculus (TAPL Chapters 57)
 Lecture 6: Simply Typed Lambda Calculus (TAPL Chapters 3,5,8,9)
Programs
Assignments and Labs
 Lab1.pdf  in class lab on
functional programming for week 1.
 (Lab2a.pdf,
Lab2b.pdf)  in class lab on
equational reasoning and induction for week 2.
 assign1.rkt  Assignment 1 due Wed. Apr. 19 at 11:59pm
 Lab3.pdf)  in class lab on the metacircular interpreter
 Lab4.pdf)  in class lab on variants of
metacircular interpreter
 assign2.pdf  Assignment 2 due Sat. May. 6 at 11:59pm
 Lab5.pdf)  in class lab on lambda calculus.
Solutions
 Available for the class only through piazza.
Created: 4/3/17 [last updated 4/20/17] by jjohnson AT cs DOT drexel DOT edu