Department of Computer Science 
CS 250 - Programming Languages

Spring 2004 Syllabus
COURSE OBJECTIVES:   This course is a study of the formal specification, design, and applications of programming languages and paradigms, paying special attention to object-oriented programming (using  Java), functional programming (using Haskell), and logic programming (using Prolog). The design principles include syntax, formal semantics, interpreters, binding, scope, abstraction, control, memory management, and and exception handling.
 
A "programming paradigm" is a distinguished style of problem solving and algorithm design. While you are already familiar with the imperative (or procedural) paradigm, other paradigms are used in various other application domains. For instance, object-oriented programming is widely used in software engineering, event-driven programming is used in Web-based applications, and functional and logic programming are used in artificial intelligence applications.
 
Linux implementations of Java, Haskell, and Prolog are available to support your laboratory work for this course. The course includes lectures, discussions, and occasional student presentations. Two tests, biweekly laboratory and written assignments, and one larger final lab project will comprise the major work for the course.
PRIMARY TEXT (required):  Tucker and Noonan, Programming Languages , McGraw-Hill (2002); and supplementary software and other information linked to the course Web site.
INSTRUCTOR:  Allen Tucker, 220 Searles Hall
E-mail address: allen@bowdoin.edu
Office Hours: TWTh 4:00-5:00 , or by arrangement
Course Web site: http://www.bowdoin.edu/~allen/courses/cs250
MEETING TIMES:  MW  2:30-3:55, Searles 223/Searles 226
COURSE WORK:  There will be six lab assignments, two tests, and a final project (see course outline below).   Each lab assignment will be due on the Monday following the 1- or 2-week period where it appears in the outline.  Assignments will typically include a programming part along with a set of questions. The assignments can be done individually or in teams of two, in which case only one set of answers should be handed in.  The final project will be done individually.

The project will provide an opportunity to either do a substantial programming task or investigate a contemporary topic in programming language design.  The former will provide experience with a significant sotware project, and will include a 1-2 page write-up of your results.  The latter will include a more modest programming part, along with a 4-6 page narrative that uses two or three outside sources beyond the text for the course. Projects will be done individually.  A brief presentation of your project during the final exam period will conclude the course.  Here are some sample project topics:

Implementation of Jay extensions for arrays, structures, and/or methods (see Chapters 4 and 5).
Implementation of Jay syntax and semantics in Haskell (see Chapter 8)
Language support for assertions and correctness proofs
Comparison of Java and Tcl/Tk/Perl for interactive programming
Comparison of Java and SR for parallel programming
Comparison of Eiffel and Java for object-oriented programming
Comparison of Scheme and Haskell for functional programming
A detailed study of Constraint Logic Programming and its uses (see Chapter 9)
COURSE OUTLINE


Week of  Topics  Readings  Work Due
Jan 26 Introduction: programming language design, paradigms, implementation, syntax, formal methods, EBNF Chapter 1, 2  Assignment 1
Feb 2 Concete and abstract syntax; syntax of statements, expressions, and programs Chapter 2 Assignment 2
Feb 9, 16 Type systems and formal semantics Chapter 3 Assignment 3
Feb 23 Syntax and semantics of imperative program elements: elementary types, statements, and method call Chapter 4 Test 1
Mar 1,  8 Memory management for imperative programs: stack, heap, and garbage collection for arrays and other dynamic structures. Chapter 5 Assignment 4
Mar 15, 22 ***Spring Break***

Mar 29, Apr 5 The functional programming paradigm: lambda calculus and Haskell Chapter 8
Apr 12, 19 Logic programming: Horn clauses, relations, facts, and Prolog; resolution, unification, applications in natural language processing. Chapter 9 Assignment 5
Apr 26, May 3 Concurrent programming: Java threads, concurrent control, and applications Chapter 11 Assignment 6
May 10
(1/2 week)
Final project selection and discussion
Test 2
May 17 *** Project presentations ***