Course Description

CSC 2/454 is an introduction to the design and implementation of programming languages.  From the design point of view, we will study language features as tools for expressing algorithms.  From the implementation point of view, we will study compilers, interpreters, and virtual machines as tools to map those features efficiently onto modern computer hardware.  The course will touch on a wide variety of languages, both past and present, with an emphasis on modern imperative languages, such as C++, Rust, and Java, and, to a lesser extent, on functional languages such as OCaml and Scheme; scripting languages such as Python, Ruby, and Perl; and emerging languages such as Scala and Swift.  Rather than dwell on the features of any particular language, we will focus instead on fundamental concepts, and on the differences between languages, the reasons for those differences, and the implications those differences have for programmers and for language implementators. 

Topics to be covered in CSC 2/454 include: 

Students taking the course for graduate credit may have additional requirements on assignments and exams, and will be graded on a separate curve.

Detailed polices with respect to attandance, class participation, assignments, grading, academic honesty, disabilities, etc. can be found on a separate page.

Prerequisites

CSC 173 and CSC 252 are prerequisites for CSC 2/454.  From 173, we will rely on prior exposure to regular expressions and finite automata; context-free grammars and recursive descent parsing; standard data structures and complexity measures (hash tables, search trees, sorting and searching algorithms); and (to a lesser extent) functional programming and its grounding in lambda calculus.  From 252, we will rely on prior exposure to the characteristics of modern microprocessors: binary arithmetic and logic, assembly language, caches, pipelining, etc.  In turn, CSC 2/454 is recommended for students planning to take CSC 2/456 (Operating Systems), and is a prerequisite for CSC 2/455 (Software Analysis and Improvement) and CSC 2/458 (Parallel and Distributed Systems).  It is also a required course for the B.S. degree. 

Textbook

We will be using as our text the fourth edition of Programming Language Pragmatics.  Earlier editions will not do; you’ll need the new one.  It’s less expensive than many textbooks (approx. $65 in paper; $35 pdf), but if that still seems like too much, there will be copies on reserve at Carlson Library.  Some booksellers also rent the electronic version. 

A fifth edition of the text is currently under development.  I may be providing pre-publication copies of portions of this text to read in place of the corresponding chapters in the fourth edition. 

Credit Hours

This course follows the College credit hour policy for four-credit courses.  Lectures are held twice weekly for a total of 150 minutes.  Formal workshop sessions add another 75 minutes per week.  There are also extensive out-of-class reading and programming assignments, the latter of which may generally be performed in two-person groups, and formal office hours that students are expected to use whenever questions arise. 


Last Change:  20 August 2023 / Michael Scott's email address