Previous Up


Textbooks and language references

There are two required texts, but you don't need to purchase them; they are available online, and hard copies of assigned reading from them will be provided as handouts (in installments).
  1. Jeremy G. Siek, A Language for Generic Programming. This is the author's Ph.D. thesis, completed in 2005 at Indiana University, in which he describes the design and implementation of a language called G.

  2. Alex Stepanov, Notes on Programming. These notes are being developed by the author for a course he teaches at Adobe Systems, San Jose, CA; he has plans to eventually turn them into a textbook. [Added 10/26: The link is to the latest available version, dated 10/3/2006; the version available at the beginning of the course is here.]
You don't need to print out these files or any portion of them; hard copies of individual chapters will be provided in class as needed for reading assignments. We will not cover all chapters in this course.

You should also have at hand at least one up-to-date and comprehensive C++ language reference. The most authoritative such reference is, of course, the C++ standard itself:
Document#: INCITS/ISO/IEC 14882-2003
Title: Programming languages - C++
Abstract: This International Standard specifies requirements for implementations of the C++ programming language. The first such requirement is that they implement the language, and so this International Standard also defines C++. Other requirements and relaxations of the first requirement appear at various places within this International Standard.
It is available from American National Standards Institute eStandards Store. Note that this is the 2003 revision of the standard (the first official C++ standard was released in 1998). The price for the electronic version is $30, for the print version ...unless you have an Uncle Midas, you'll want to choose the electronic version.

But the standard's legalistic style and lack of tutorial examples make for difficult and sometimes frustrating reading. Instead you might prefer one of the following:
Stanley Lippman, Josée Lajoie, and Barbara Moo, C++ Primer, Fourth Edition, 885 pages, Addison-Wesley, 2005, ISBN 0-201-72184-1;

Bjarne Stroustrup, The C++ Programming Language, 3rd edition, 991 pages, Addison-Wesley Pub Co, 1998, ISBN 0-201-88954-4.
The following book is less thorough and can't take the place of a complete reference, but it has lots of examples and emphasizes the advantages of understanding and using the C++ standard library from the beginning:
Andrew Koenig and Barbara E. Moo, Accelerated C++, 336 pages, Addison Wesley, 2000, ISBN 0-201-70353-X.

C++ Style Guide

In programming assignments and projects for the course, adhere to rules in this C++ Style Guide.

Cygwin Tools (including the GNU C++ compiler, X Windows, and Emacs)

The Cygwin Tools are a set of freeware compilers (including for GNU C/C++), other programming tools (such as debuggers), editors (Emacs in particular), and utility programs (such as the BASH shell and X Windows) for Windows 95/98/NT/2000/XP. They provide many of the same useful tools you would find on a typical Unix or Linux platform.

If you have a Windows box you should install the Cygwin Tools on it. Download the installation file for your OS version from the Cygwin Web page.

GNU C++ compiler and standard library

This is a just a command-line compiler, but in combination with the compilation support commands of Emacs you can have a reasonable edit/compile/execute environment. For this course, version 3.3 or later is required, and version 4.1.1 is preferred. On CSLab's FreeBSD and Solaris machines, use g++4 to invoke version 4.1.1. On the FreeBSD machines either g++3 or simply g++ gets you version 3.4.2. On the Solaris machines, g++3 gets you 3.3.3. (Amazingly, version 2.95.3 is still available on Solaris machines and is what you get with g++; you should definitely not use this version).

On the Solaris installation of 4.1.1, the path to the standard library is


On FreeBSD it is:



From a 10/13/2006 message to the C++ standards committee from Doug Gregor (who got his BS and PhD from Rensselaer and is now doing a postdoc at Indiana University):
We have just released a new version of our prototype compiler for concepts, ConceptGCC. This compiler implements most of the current concepts proposal (N2081) and is a great way to explore concepts.

ConceptGCC source code and binaries for several platforms are available here:

[Added 11/14/2006: A description of the ConceptGCC project is included in Doug's OOPSLA paper on extending C++ with concepts (hardcopies handed out in class on 11/13/2006). There are some reading assignments in this paper.]


GNU Emacs, ``the extensible, customizable, self-documenting real-time display editor,'' is available on most campus computers. For Windows, either install Cygwin's implementation (it's under the Editors category; you'll also need Cygwin's X Windows implementation) or the native Windows version from GNU Emacs Web page.

Emacs has a built-in tutorial (type Esc-x help t) and ``info system'' (type Esc-x info).

You can tailor Emacs to your preferences with a file called .emacs in your home directory. For use in this course, you should use the following .emacs file or add its contents to your existing .emacs file. See the comments (lines that begin with semicolon) in the file for explanation of each part. Some parts are optional.


From the Subversion project home page: ``The goal of the Subversion project is to build a version control system that is a compelling replacement for CVS in the open source community.'' Subversion is fully documented in the Subversion Book, which is available in various electronic formats. The main part of the book needed for use in this course is ``Basic Work Cycle: Chapter 3. Guided Tour'' (a printed copy was handed out in the 9/7/2006 class), but you should also go through enough of the rest of the book to get an overview and to know where to look for answers to questions that come up later.

STL Web resources

  1. Silicon Graphics STL (including a complete online STL reference manual)

  2. The Dinkum C++ Library Reference (including a complete online STL reference manual, but also covering other important parts of the library such as the string class).

Boost Libraries

The Boost Organization provides many useful C++ Libraries. Not all are generic libraries in the full sense of the term; the largest library that is generic is the Boost Graph Library, BGL.

On CSLab machines the Boost libraries (this is not quite the latest version) are installed at
So if you just put the option
on your compilation command line, the compiler will be able to find any of the Boost header files you are using in your source files.


The programming language G, which Jeremy Siek introduces in A Language for Generic Programming, is available on CSLab Solaris machines only. To use it, log onto Solaris and cd to your local copy of the course codebase and do an svn update. This will create a directory called G-code, which contains a few small G programs and a Makefile. To compile and execute the program accumulate.g, for example, cd into G-code and do gmake accumulate.ok (you have to use gmake, the GNU version of make). (Other options, such as compiling but not running, will be discussed in class.) At this time, a couple of the files, copy.g and for_each.g may not compile for you, though they do compile when the compilation is done in the G home directory. Stay tuned, this should be fixed soon.


From LATEX: A Document Preparation System: ``LATEX is a high-quality typesetting system, with features designed for the production of technical and scientific documentation. LaTeX is the de facto standard for the communication and publication of scientific documents.'' If that's not enough motivation, see Word Processors: Stupid and Inefficient, by Allin Cottrell.

LATEX is available on CSLab, RCS, and probably most other campus computers. To apply it to latex source file mydoc.tex, run
  latex mydoc
This produces a DVI file, mydoc.dvi, which can be converted to a Postscript file,, with
  dvips -o mydoc
or to a PDF file, mydoc.pdf, with
  dvipdfm mydoc
Pdflatex is a tool that produces a PDF file directly from a LATEX source file mydoc.tex:
  pdflatex mydoc
produces mydoc.pdf. Using a LATEX package called hyperref, e.g., with
causes cross-references and citations to appear as hyperlinks in the resulting PDF file.

To download a LATEX system (free) for use on a Windows box, visit
The MikTeX distribution includes utilities dvips, dvipdfm, and pdflatex.

If you are not familiar with LATEX, a good place to get started is the brief Introduction to LATEX by A. J. Hildebrand.

A not so short introduction is The Not So Short Introduction to LATEX2e (PDF).

The original LATEX manual, by the system's creator, is
Leslie Lamport, LATEX: A Document Preparation System User's Guide & Reference Manual, Addison-Wesley, 1986, ISBN 0-201-15790.
Another possibility is First Steps in LATEX, by George Gratzer.

Beginning LATEX users (and some veterans) sometimes make errors that cause no complaint from the LATEX processor but do result in poor formatting. The following short note discusses some common problems and how to avoid them:
D. R. Musser, Elements of LATEX Style, November 24, 1998.

Previous Up