CS 350: Principles of Programming Languages
Pre-requisites: ESC101, CS210.
- Imperative Languages: block structure, scope rules, parameter passing, constructs like coroutines, tasks, exceptions etc.
- 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.
- 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.
- Declarative Concurrency: Data-driven concurrent model, basic thread programming techniques, Streams, lazy execution, Message passing concurrency models.
- 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:
- Martn Abadi, Luca Cardelli, A Theory of Objects, Springer 1996.
- Luca Cardelli, P Wegner, On Understanding Types, Data Abstraction and Polymorphism, ACM Computing Surveys, 17(4), pp 471, 1985.
- M Hennessey, The Semantics of Programming Languages, John Wiley, 1990.
- J. LLoyd, Foundations of Logic Programming, Springer Verlag, 1984.
- L. C. Paulson, ML for the Working Programmer, 2nd Ed., Cambridge University Press, 1996.
- Benjamin C. Pierce, Types and programming languages, MIT Press, 2002.
- C. Reade, Elements of Functional Programming, Addison Wesley, 1989.
- P. van Roy and S. Haridi, Concepts, Techniques and Models of Computer Programming, MIT Press, 2004.
- Michael L Scott, Programming Language Pregmatics, 3rd Ed., Morgan Kaufmann, 2009