Course Websites

CS 422 - Programming Language Design

Last offered Fall 2024

Official Description

Exploration of major language design paradigms using imperative and functional programming as unifying themes. Tools include both practical language processor construction and theoretical models. Course Information: 3 undergraduate hours. 3 or 4 graduate hours. Prerequisite: CS 421.

Related Faculty

Course Director

Learning Goals

Learn and apply a novel programming language design framework to define a series of languages covering all major paradigms (1), (2)
Design SIMPLE, a C-like imperative programming language with recursive functions, multi-dimensional, arrays, dynamic threads. (1), (2), (6)
Design KOOL, a Java-like object-oriented programming language with dynamic method dispatch, subtype polymorphism, exceptions, threads. (1), (2), (6)
Design FUN, an ML-like functional programming language with higher-order functions, lists, let and letrec binders, parametric polymorphism, callcc. Learn and apply substitution. (1), (2), (6)
Design a parametric polymorphic type system for FUN, which extends the classic Damas-Milner-Clement type system. (1), (2)
Design LOGIK, a Prolog-like logic programming language. Learn and apply unification. (1), (2), (6)

Topic List

Basic PL semantic approaches
K PL Design Framework
Imperative Programming
Object-Oriented Programming
Functional Programming
Logic Programming
Concurrency Concepts in Languages
Types and Polymorphism

Assessment and Revisions

Revisions in last 6 years Approximately when revision was done Reason for revision Data or documentation available? Documentation provided?
Provided Maude library for K technique, used to define languages fall 2007 Too much low-level and PL-irrelevant work for students to use plain Maude informal discussions and comments in library commented library
Switched to K-Maude tool (Maude extension); time saved used to cover new topic: Damas-Milner-Clement type inferencer) fall 2010 Students spent too much time learning how to use Maude, instead of on defining languages. Examples of languages defined in K-Maude commented examples
Switched to the K tool for defining languages. Students see no Maude anymore. K is designed specifically for defining programming languages, and is used in several places to teach languages and in research on PL. fall 2011 K is specifically designed as a framework for programming language design. Little to no time is spent on learning the framework. Gave me more time to discuss PL topics in more depth. Lots of examples come with the K tool distribution. Yes, plenty of examples of documented K language definitions.
Included logic programming as studied topic, and LOGIK as logic programming language defined in class. fall 2012

Required, Elective, or Selected Elective

Selected Elective.

Programming Language DesignCSP79931PKG31230 - 1345 R  ARR Illini Center Grigore Rosu
Programming Language DesignCSP79931PKG31230 - 1345 T    Grigore Rosu
Programming Language DesignMC479932PKG41230 - 1345 R  ARR Illini Center Grigore Rosu
Programming Language DesignMC479932PKG41230 - 1345 T    Grigore Rosu
Programming Language DesignT330132LCD31230 - 1345 T R  1214 Siebel Center for Comp Sci Grigore Rosu
Programming Language DesignT440088LCD31230 - 1345 T R  1214 Siebel Center for Comp Sci Grigore Rosu