CS 328 Principles of Programming Languages 3 0 0 6 Study of principles and major concepts in various programming paradigms like imperative, functional, object-oriented and logic programming. Imperative programming: Location, reference and expressions, assignment and control, data types, blocks, procedures and modules. Object Oriented programming: Classes and objects, abstraction and encapsulation, inheritance, software reuse. Functional Programming: Functions as first class objects, higher order functions, polymorphic datatypes, type checking and type inferencing, Lambda Calculus. Logic Programming: Programming with Horn clauses, Unification, SLD-resolution, Backtracking, Cuts. Concepts of concurrent programming: Processes, synchronization primitives, safety and liveness properties. Illustration of the above concepts using representative languages like ADA, C++, Java, Haskell, Prolog etc. Texts/References Ravi Sethi, Programming Languages: Concepts and Principles, Addison Wesley, 1996. T.W.Pratt, M.V.Zelkowitz, Programming Languages: Design and Implementation (third edition), Prentice Hall of India, 1990. Bruce J. MacLennan, Principles of Programming Languages: Design, Evaluation and Implementation, 1983. C.Ghezzi, M. Jazayeri, Programming Language Concepts, Wiley, 1982. R.D.Tennent, Principles of programming languages, Prentice Hall of India, New Delhi, 1981. M. Ben Ari, Principles of Concurrent Programming, 1989.