Principles of Programming Languages

Course
Identifier: 
COM S 3420

Last Updated: Fall 2024

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: Ashwin Kallingal Joshy, Clay Stevens
  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: A variety of programming languages and paradigms exist today and more are being invented as we speak. Although theoretically every task can be accomplished in any Turing-complete programming language, in practice, there is a tight correlation between selected programming language, software development task, programmer productivity, and overall software efficiency and quality. A judicious choice of programming language is thus of utmost importance. COMS 3420 provides undergraduate students with a scientific basis for this selection.
  2. Prerequisites or co-requisites: Minimum of C- in COM S 2280 and MATH 1650; COM S 2300 or CPR E 3100
  3. Required, elective, or selected elective? Required

Specific goals for the course

  1. Specific outcomes of instruction:
  • Write and modify programs in a functional style.
  • Make effective use of data abstraction.
  • Change or enhance interpreters to have features such as: control flow, variables, recursion, scoping, syntactic sugars, arrays, parameter passing mechanisms, type checking, objects, and inheritance.
  • Write programs using such features and explain their behavior.
  • Explain the data structures and algorithms used in interpreters.
  • Compare alternatives in programming languages design and implementation.

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