New York University School of Engineering

advertisement
New York University School of Engineering
Department of Computer Science and Engineering
Course Outline CS6373 Design & Implementation of Programming Languages
Fall 2014
Professor John Viega
Tuesday, 6-8:30pm; Location TBD
To contact professor: viega@nyu.edu
Phone: 212-321-0902
Office hours: after class, or by appointment
Course Pre-requisites Data structures, and reasonable programming experience. This
class requires experience in programming. You must feel comfortable programming in at
least one language, such as Java, Python, C++.
Course Description The history of high-level language design will be a thread running
through the course. We will look at design principles, establishing a working set of
principles that will then apply to better-known high-level languages.
Course Objectives The goal of this course is to ensure you are well informed about 1) the
history of programming languages, 2) design issues affecting languages and 3) current
research issues in the design and implementation of programming languages.
Additionally, I hope to: 1) Sharpen your critical thinking and communication skills; 2)
Improve your exposure to software engineering practices; and 3) Give you more tools to
help you learn new languages more quickly.
Course Structure
In addition to lectures, students will have a weekly reading and writing assignment, and
will have several programming assignments throughout the semester.
Readings
There are no required text books. Students will instead be assigned academic papers for
reading.
An optional and recommended text is: R. Sebestia, Concepts of Programming Languages.
Required readings will be made available through the course web site. Recommended
reading is available from the NYU Bookstore.
Course requirements
Your are expected to do all reading and assignments, and both attend and participate in
class. Grading will be as follows:
Writing assignments:
15%
Programming assignments: 30%
Class participation:
10%
Midterm exam:
20%
Final exam:
25%
All writing assignments will have equal weight with each other, as will all programming
assignments.
Sept 2
Introduction + Language Paradigms
• Writing assignment 1 given
Sept 9
Early History of Languages / Imperative Concepts
• Writing assignment 1 due
• Writing assignment 2 given
Sept 16 More Imperative Constructs / Object-Based Constructs
• Writing assignment 2 due
• Programming assignment 1 given
• Writing assignment 3 given
Sept 23 Language Syntax ; BNF
• Writing assignment 3 due
• Writing assignment 4 given
Sept 30 The λ-calculus
• Writing assignment 4 due
• Programming assignment 1 due
Oct 7
Functional Languages
• Programming assignment 2 given
Oct 14 Fall Recess (no class)
Oct 21 Midterm Exam
Oct 28 Object Oriented Languages
• Programming assignment 2 due
• Writing assignment 5 given
Nov 4
OO-ish features (Exceptions, Garbage Collection, Design By Contract)
• Writing assignment 5 due
• Programming assignment 3 given
• Writing assignment 6 given
Nov 11 Type Systems
• Writing assignment 6 due
• Writing assignment 7 given
Nov 18 Type Inferencing; Logic Programming
• Writing assignment 7 due
• Programming assignment 3 due
• Writing assignment 8 given
Nov 25 Concurrency
• Writing assignment 8 due
• Programming assignment 4 given
Dec 2
Formal Semantics
Dec 9
Research Frontiers; Exam Review
• Programming assignment 4 due
Dec 16 Final Exam 
Download