Course
Course Catalog URL:
Identifier:
COM S 3420
Professor(s):
Last Updated: Fall 2024
Offered during Fall and Spring Semesters each year.
- Credits and contact hours: 3 credits, 4 contact hours
- Instructor’s or course coordinator’s name: Ashwin Kallingal Joshy, Clay Stevens
- Text book, title, author, and year: An Experiential Introduction to Principles of Programming Languages, Hridesh Rajan
- Other supplemental materials: Concepts of Programming Languages, Robert W. Sebesta, Pearson
Specific course information
- 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.
- Prerequisites or co-requisites: Minimum of C- in COM S 2280 and MATH 1650; COM S 2300 or CPR E 3100
- Required, elective, or selected elective? Required
Specific goals for the course
- 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