Academics
  /  
Courses
  /  
Descriptions
COMP_SCI 321: Programming Languages


VIEW ALL COURSE TIMES AND SESSIONS

Prerequisites

Prerequisites: COMP_SCI 111, COMP_SCI 211, and COMP_SCI 214 or CS Graduate standing or Instructor permission

Description

This course introduces students to the key features of programming languages. Students implement a series of interpreters that nail down the precise details of how various aspects of programming languages behave.  Students are assumed to understand trees and (mathematical) functions that process them; the course builds up to the features of real programming languages from there.


REQUIRED TEXT: Programming Languages: Application and Interpretation by Shriram Krishnamurthi

COURSE INSTRUCTOR: Prof. Robby Findler (Winter), Prof. Christos Dimoulas (Fall) & Lukas Lazarek (Summer)

COURSE COORDINATOR: Prof. Robby Findler

COURSE TOPICS: The course explores these aspects of a programming language (in this order):

  • Modeling programming languages
  • Arithmetic expressions & variables
  • Functions
  • Deferring substitution
  • First class functions
  • (implementing) Recursion
  • State
  • Control
  • Garbage collection
  • Types

GRADES: Grades are based on weekly homework assignments. 

EXAM: There is no exam in this course.

COURSE OBJECTIVES: Students that complete this course should:

  • understand the basic features that underlie most programming languages
  • understand the basic semantic features of all call-by-value programming languages (which includes nearly all programming languages they will encounter),
  • understand the pragmatics behind those features (when to use them and why),
  • understand some of the more advanced features, when they are applicable, and when they are desireable,
  • be able to maintain and extend an interpreter-based implementation of a programming language containing those features