Programming Language (CS 550)
Assignments and Labs
- 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
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
- 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
- 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)
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 object-oriented
programming language (e.g. java, C++) - inheritance, polymorphism,
and should have seen at least two different programming languages.
- Jeremy Johnson
Office: University Crossings 139
e-mail: jjohnson AT cs DOT drexel DOT edu
office hours: M 8-9 (online) and R 4-6 (UC 139 and online) additional hours by appointment.
- Meeting Time
- Thursday 6:30-9: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
- 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)
Grade determined by weighted total in BBLearn. Curve only used if median too low.
- 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%)
- 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.
- 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
- Lambda Calculus Calculator
- PLT Redex
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 5-7)
- Lecture 6: Simply Typed Lambda Calculus (TAPL Chapters 3,5,8,9)
Assignments and Labs
- Lab1.pdf - in class lab on
functional programming for week 1.
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
- assign2.pdf - Assignment 2 due Sat. May. 6 at 11:59pm
- Lab5.pdf) - in class lab on lambda calculus.
Created: 4/3/17 [last updated 4/20/17] by jjohnson AT cs DOT drexel DOT edu
- Available for the class only through piazza.