CS 655 - Programming Languages

Bulletin Description

This course is an advanced investigation of the design of programming languages. It looks at features, not complete languages, touching on such languages as Ada, CLU, FP, Haskell, Icon, Lisp, ML, Modula-2, Modula-3, Pascal, Post, Prolog, Russell, and Smalltalk-80.  Students will not become proficient in any of these languages, but rather will learn what contributions each has made to the state of the art in language design. Compiler-construction issues will be touched on only in passing. Main topics will be control structures, type mechanisms, functional programming, object-oriented programming, logic programming, dataflow, strings, and concurrency. The class will also discuss formal semantics of programming languages, particularly denotational semantics. There will be several written and programming assignments.


CS 575 or CS 580.

Expected Preparation

CS 553 is intended as a graduate-level course in programming languages. Students should be capable of programming in C and C++ and have a general knowledge of computer organization, data structures, and compiler construction. Students should also have had an undergraduate course that covers styles of programming languages.

Student Learning Outcomes

Students will learn about modern programming language design. They will learn about a variety of paradigms and be able to evaluate language features within those paradigms.

Syllabus Information

Week by Week Course Outline:

This is a sample outline. Exact outline will be determined by the instructor offering this course.

Weeks Topics
1 Review of imperative languages
2 Control Structures
3 Types, first-class functions and labels
4 Higher-order functions, the ML language
5 Lisp
6 Haskell
7 Simula 67 and Smalltalk
8 C++ and Java
9 Concurrent programming concepts
10 Logic programming: Prolog, Datalog, CLPR
11 Simulation: CSim, Simula-67
12 APL, DBASE, MatLab
13 Perl, Python, Tcl
14-15 Dataflow


Exact details about examinations in this course will be determined by the instructor offering the course. Typically there will be one take-home final examination. Specific details will be made available in the syllabus at the start of each semester in which the course is offered.


A student's grade will be determined by a weighted average of homework assignments, about 4 programming exercises, a written project, class participation, and the final examination. The faculty offering the course will make the details available at the start of the course. A typical weighting is:

Homework 10%
Participation 10%
Project 20%
Programming assignments 40%
Final Examination 20%

Possible Textbooks:

Raphael Finkel
Advanced Programming Language Design,
Addison-Wesley, 1996.