CS 350: Principles of Programming Languages

Units: 3-0-0-9
Pre-requisites: ESC101, CS210.

Course Contents:

  1. Imperative Languages: block structure, scope rules, parameter passing, constructs like coroutines, tasks, exceptions etc.
  2. Functional programming: functions, recursion, macros, user-defined control constructs, higher order constructs, types, data abstraction, lazy evaluation, polymorphism, semantics, type inference, and implementation issues.

Two of the following three topics may be covered in detail.

  1. Declarative programming: declarative programming, Horn clauses, procedural interpretation of Horn clauses, SLD-resolution including unification, the logical variable, implementation issues: abstract machines and compiling to abstract machines.
  2. Declarative Concurrency: Data-driven concurrent model, basic thread programming techniques, Streams, lazy execution, Message passing concurrency models.
  3. Object-oriented programming: objects and programming with objects, classes and instances, hierarchies and inheritance, encapsulation, semantics of OO languages and implementation issues.

Books and References:

  1. Martn Abadi, Luca Cardelli, A Theory of Objects, Springer 1996.
  2. Luca Cardelli, P Wegner, On Understanding Types, Data Abstraction and Polymorphism, ACM Computing Surveys, 17(4), pp 471, 1985.
  3. M Hennessey, The Semantics of Programming Languages, John Wiley, 1990.
  4. J. LLoyd, Foundations of Logic Programming, Springer Verlag, 1984.
  5. L. C. Paulson, ML for the Working Programmer, 2nd Ed., Cambridge University Press, 1996.
  6. Benjamin C. Pierce, Types and programming languages, MIT Press, 2002.
  7. C. Reade, Elements of Functional Programming, Addison Wesley, 1989.
  8. P. van Roy and S. Haridi, Concepts, Techniques and Models of Computer Programming, MIT Press, 2004.
  9. Michael L Scott, Programming Language Pregmatics, 3rd Ed., Morgan Kaufmann, 2009