Scope and Topics Covered
The course will teach essential aspects of the design and
implementation of programming languages. Some general topics to be
covered in the course (not necessarily in this order):
- Abstraction, encapsulation, information
hiding, modularity.
- Evaluation strategies, parameter-passing
mechanisms.
- Functional vs. imperative vs. declarative,
side-effects, state.
- Notions of formal specifications,
semantics, typing.
- Programming techniques: continuation, memoization.
The course will be a brief introduction to
each, rather than an
in-depth study. Several of these topics are encountered or examined in
more depth in several later courses in the CS curriculum.
In the Fall 2008 term, we choose one programming language, Haskell,
as a means to present the forementioned topics. Why Haskell? This is
one of the modern functional languages, which generally make the semantics (i.e.
the meaning) of programs easier to understand. Moreover, Haskell
is designed on principles of strong static typing, a trend
which has been followed in the design of other (not only functional)
modern programming languages, such as Java.
Some distinctive elements of Haskell:
- Lists, tuples, trees.
- Recursive definitions,
higher-order functions, functions as first-class values.
- Pattern matching.
- Monomorphic type-checking, polymorphic type-checking.
- Input and output, monads.
The course requires a substantial amount of programming, all in Haskell. If this is
your first encounter with functional programming, it may seem unnatural or
counter-intuitive at the beginning. If you complete programming assignments
by their deadlines, you should be able to make the transition from earlier
imperative languages (C, C++, Java, etc.) to Haskell smoothly. And
you will quickly appreciate many advantages of functional programming.
Lectures
Tue, Thu 11:00 am - 12:30 pm, in Room MCS B33.
Laboratory Sections
-
Mon 11:00 am - 12:00 pm, in Room PRB 150
(Physics Research Building).
-
Mon 12:00 pm - 1:00 pm, in Room MCS B29.
Prerequisites
According to the BU catalog and
the BU CS course map (click here),
CS 112 and CS 113 (or equivalent) will be sufficient preparation
for this course. CS 112 gives you the necessary programming background
and CS 113 the necessary theoretical background. Although these two courses
are the formal requirement, students are normally expected to have completed
200-level courses in the BU CS curriculum successfully. If you think you miss
some of this background, please consult with the teaching staff.
Exams
Midterm Exam: Tuesday, October 21, 11:00 am - 12:30 pm.
Solutions
Final Exam: Tuesday, December 16,
9:00 am - 11:00 am.
Solutions
The exams are closed book. You may, however,
bring
one 8.5 by 11 sheet of paper (i.e. one regular-size sheet of paper) as
a crib sheet. Preparing a crib sheet can be a useful study aid, so take
time in selecting material for it. You may use both sides of the paper
and write as small as you like, but in any case, you are allowed only
one
sheet. No mechanical or electronic reproductions are allowed; the crib
sheet must be hand written. If you hand in your crib sheet with your
exam,
you will get credit for it in your total grade for the exam.
Teaching Staff
Instructor --
Assaf Kfoury
Office
Hours:
Tue, Thu 12:30 - 2:30 pm
Location:
MCS 176, e-mail: kfoury@cs.bu.edu
Teaching Assistant --
Andrei Lapets
Office Hours: Mon 1:00 - 2:00 pm,
Wed 12:30 - 2:30 pm
Location: MCS 183, e-mail:
lapets@bu.edu
Mailing List
The course mailing list is named cs320 and
is managed by IT's majordomo engine. All students registered for the
course should add themselves to the mailing list. To join the course mailing
list, type "csmail -a cs320" at the Unix prompt. To inspect who else
is on the mailing list, type "csmail -p cs320". To remove
yourself from the mailing list, type "csmail -r cs320".
Students are welcome to post messages and
questions to the mailing list. All messages to cs320@cs.bu.edu
are archived (click here).
Book and Reading Material
Required:
-
Simon Thompson,
Haskell, The Craft of Functional Programming.
Second Edition, Addison Wesley, 1999.
In all handouts for this course, we refer to this book by the acronym "[HCFP]".
Some useful supporting materials for [HCFP] are available from the WWW
(click here).
-
Various handouts posted on the course
webpages.
Maintained by Assaf Kfoury
Created: 2008.07.15 Last modified:
2008.09.03