Programming Languages
| Program start date | Application deadline |
| 2013-03-01 | - |
Program Overview
Course Overview
The CSCI.4430/6969 Programming Languages course is designed to enable students to understand essential aspects of programming languages, including theoretical foundations, syntax, semantics, types, scope of variables, data abstraction, control abstraction, parameter passing, and expression evaluation mechanisms.
Course Description
This course will expose students to different programming paradigms, including logic programming, functional programming, and concurrent and distributed object-oriented programming. Students will write programming assignments in Prolog, Oz, and SALSA.
Pre-requisites
- CSCI.2400 Models of Computation
Course Themes
- Programming Language Essentials
- Logic, Functional, Concurrent Object-Oriented Programming Paradigms
Learning Outcomes
When students have successfully completed this course, they will be able to:
- understand the essential aspects of programming languages, including theoretical foundations such as the lambda calculus, predicate calculus, and the actor model
- compare and apply multiple programming paradigms
- design and develop logic, functional, and concurrent (distributed and mobile) programs
Course Contents
- Introduction
- Brief history of programming languages
- Syntax
- Semantics
- Essentials
- Paradigms
- Logic Programming
- Horn clauses
- Resolution and unification
- Search and backtracking
- Functional and Imperative Programming
- Lambda calculus
- Scope of variables
- Data abstraction/control abstraction
- Static/dynamic scoping
- Parameter passing mechanisms
- Expression evaluation orders
- Types
- Recursion
- Higher-order programming
- Lazy evaluation
- State (Imperative programming)
- Concurrent and Distributed Object-Oriented Programming
- Actors
- Synchronous vs asynchronous communication, message passing
- Token-passing continuations, join blocks, first-class continuations
- Universal naming, remote message passing, migration (Distributed programming)
Tentative Course Syllabus
| Date | Topic | Handouts | Grade |
|---|---|---|---|
| 01/24 | Introduction to programming languages: history, syntax, semantics, essentials, paradigms. Logic programming: introduction, Horn clauses | Intro, PLP11A.pdf, rainy.pl | |
| 01/28 | Logic programming: predicate calculus--Programming Assignment 1 Due 02/12 | PLP11B.pdf, family.pl | 20% |
| 01/31 | Prolog: resolution, unification, search, backtracking, cut, lists | PLP11C.pdf, append.pl, crossword.pl, cut.pl, cut2.pl, cut3.pl, cut4.pl, cut5.pl, family2.pl, loop.pl, not2.pl | |
| 02/04 | Prolog: arithmetic, equalities, I/O, meta-interpreters, natural language parsing | PLP11D.pdf, browse.pl, nestedloop.pl, sentences.pl, sentences2.pl | |
| 02/07 | Logic programming: accumulators | PLP11E, Sections3.4.3-3.4.4.pdf, appenddl.pl, dlists.oz, accumulators.oz | |
| 02/11 | Logic programming: difference lists | flatten.pl, sentences3.pl | |
| 02/14 | Lambda calculus: alpha-renaming, beta conversion, applicative and normal evaluation orders, Church-Rosser theorem, combinators | LambdaCalculus.pdf | |
| 02/19 | Higher order programming, Oz -- Programming Assignment 2 Due 03/01 | LambdaCalculus2.pdf, combinators.oz, eta.oz, hop.oz, lambda-booleans.oz, lambda-numbers.oz, rec.oz, seq.oz | 20% |
| 02/21 | Introduction to programming concepts: lists, pattern matching, correctness, complexity | Chapter1.pdf, comb.oz, concepts.oz, lists.oz, pascal.oz, scope.oz, store.oz | |
| 02/25 | Declarative programming, grammars, syntax and semantics | Section2.1.pdf, rainy.oz, recursion.oz | |
| 02/28 | Single-assignment store, kernel language syntax | Sections2.2-2.3.pdf, single-assignment.oz | |
| 03/04 | Kernel language semantics: concepts, abstract machine | Sections2.4.1-2.4.2.pdf, kernel.oz, scope2.oz | |
| 03/07 | Kernel language semantics: non-suspendable, suspendable statements, closures | Sections2.4.3-2.4.4.pdf, dataflow.oz | |
| 03/18 | From kernel to practical language, exceptions | Sections2.4.5, 2.6, 2.7.pdf, case-semantics.oz, semantics.oz | |
| 03/21 | Review for Exam I | ||
| 03/25 | Exam I | 20% | |
| 03/28 | Memory management, tail-form optimization, garbage collection | Section2.5.pdf, memleak.oz | |
| 04/01 | Exam I analysis | ||
| 04/04 | Iterative computation, higher order programming, abstract data types | Sections3.1-3.2, 3.6-3.7.pdf, fold.oz, sqrt.oz, stackADT.oz | |
| 04/08 | State, object-oriented programming, inheritance, polymorphism | Sections6.1-6.4, 7.1-7.2.pdf, oop.oz, c.java, c1.java, c2.java, c3.java | |
| 04/11 | Actors: a model of concurrent computation -- Programming Assignment 3 Due 04/26 | actors.pdf | 20% |
| 04/15 | SALSA concurrency: actor creation, asynchronous message passing, state encapsulation, token-passing continuations, named tokens, join blocks, first-class continuations | SALSA-Concurrency.pdf, HelloWorld.salsa, Cell.salsa, CellTester.salsa, NDCellTester.salsa, DCellTester.salsa, Fibonacci.salsa, Calculator.salsa | |
| 04/18 | SALSA distribution and mobility: universal naming, location-transparent communication, actor migration | SALSA-Distributed.pdf, AddressBook.salsa, AddUser.salsa, Cell.salsa, GetCellValue.salsa, GetEmail.salsa, Migrate.salsa, MigrateBook.salsa, MigrateCell.salsa, MovingCellTester.salsa, TokenCellTester.salsa | |
| 04/22 | Concurrent and distributed programming patterns | SALSA-Patterns.pdf | |
| 04/25 | Declarative concurrency | Chapter4.pdf, dconcurrency.oz | |
| 04/29 | Dynamic and static typing, parameter passing mechanisms, lazy evaluation | Sections2.8.3, 4.5, 6.1-6.4.pdf, callbyneed.oz, lazy-eval.oz | |
| 05/02 | Review for Exam II | ||
| 05/06 | Exam II | 20% | |
| Class Participation Extra-Credit | 10% |
Reading Material
- Concepts, Techniques, and Models of Computer Programming by Van Roy and Haridi, 1st Edition, MIT Press, 2004 (Required Textbook)
- Programming Distributed Computing Systems: A Foundational Approach by Carlos A. Varela, Chapters 2, 4, and 9
- Programming Language Pragmatics by Scott, 2nd Edition, Morgan Kaufmann Publishers (Recommended Textbook)
- Essentials of Programming Languages by Friedman, Wand, and Haynes, 2nd Edition, MIT Press (Recommended Textbook)
Software
- Prolog
- Oz
- SALSA
Academic Integrity
The Rensselaer Handbook of Student Rights and Responsibilities defines several types of academic dishonesty, all of which are applicable to this class. Students found in violation of academic dishonesty policies will receive a failing grade for this course. Please contact the instructor if there is any question about academic (dis)honesty.
