Principles of Programming Languages

Course
Identifier: 
COM S 342

Offered during Fall and Spring Semesters each year.

  1. Credits and contact hours: 3 credits, 4 contact hours
  2. Instructor’s or course coordinator’s name: Hridesh Rajan, Wei Le
  3. Text book, title, author, and yearAn Experiential Introduction to Principles of Programming Languages, Hridesh Rajan
  4. Other supplemental materialsConcepts of Programming Languages, Robert W. Sebesta, Pearson

Specific course information

  1. Brief description of the content of the course: Study of concepts in programming languages, especially functional programming concepts. Overview of major programming paradigms, their relationship, and tradeoffs among paradigms enabling sound choices of programming language for application-specific development. Programming projects.
  2. Prerequisites or co-requisites: Minimum of C- in COM S 228 and MATH 165; COM S 230 or CPR E 310
  3. Required, elective, or selected elective? Required

Specific goals for the course

  1. Specific outcomes of instruction:
  • Know terminologies of programming languages
  • Write programs in different programming languages
  • Compare and implement programming language design decisions on both syntax and semantics (2, 3)
  • Understand theoretical foundations of programming languages such as grammar, formal semantics and lambda calculus (6)

Brief list of topics to be covered

  • Formal language theory: regular languages, context-free languages,  finite state automata
  • Functional Programming: Write and modify programs in functional style, introduction to languages such as Scheme and Haskell and language implementation techniques such as lazy data structures and monads
  • Make effective use of data abstraction
  • Learn about language constructs by changing or enhance interpreters to have features such as: control flow, variables names and bindings, recursion, static and dynamic scoping, syntactic sugars, arrays, parameter passing mechanisms, continuations, co-routines, objects, and inheritance
  • Write programs using such features and explain their behavior
  • Type System: Learn about concepts such as type, type system, design decisions for types, type inference, type checking and execution errors
  • Learn about language constructs by changing or enhance interpreters to have features such as: types and type checking rules. Write program using such features and explain their behavior
  • Explain the data structures and algorithms used in interpreters
  • Logic programming: Prolog, resolution principles, unification algorithm, search with backtracking, cut operation, negation as failure
  • Compare alternatives in programming language design and implementations
  • Tentative Topics Order