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