Generic Programming

The Essentials

Course CPSC-622 : Generic Programming, MWF 11:30AM-12:20PM HRBB 104
Instructor Jaakko Järvi
Course pages http://courses.cs.tamu.edu/jarvi/2008/CPSC-622
Contact jarvi@cs.tamu.edu
Office hours By appointment (my office is 416)

News

Nov 4th
Assignment 4 is out
Oct 10th
Assignment 3 is out
Sep 14th
Assignment 2 is out
Aug 31st
Assignment 1 is out

In a nutshell

Study of the generic programming approach to design and systematic classification of software components. Techniques for achieving correctness, efficiency, and generality of algorithms, data structures, and memory management. Methods of structuring a library of generic software components for maximum usability are practiced in a significant design and implementation project, or analyzed in a research project.

The main programming tool used in the course is C++, but we take a close look of language constructs for generic programming in several other programming languages, including Generics in Java (or C#), and Haskell, We will also get acquainted with concepts and other language features that provide support for constrained generics in C++. These features are likely to be adopted into the next major revision of C++.

Note to a prospective student:

If you are thinking of a research career in programming languages, or certain areas of software engineering, such as topics related to of reusable software libraries, generic or generative programming etc., you are well advised to take the course. Research in this area is very active: generics in several mainstream languages are evolving constantly, as well as the mechanisms to exploit genericity to change and improve programming practices. After Generic Programming, Programming Language Design (604) in the spring is the next natural choice if you are serious in pursuing research in this field.

Administrativia

Course work

The course will have (about) five programming assignments and one final project. The final project is either a large design and implementation project done in a group, or a research project, that can be individual.

Assignments will be managed and turned in electronically (preferably via CSNET). You may be required to demonstrate your programs to the instructor. Some assignments, as well as the final project, will be done in groups of two or three students. You may form groups on your own, but you will be in the same group for the entire semester. For the problem sets, each group will turn in one copy of the assignment, with the names of all group members on it.

Each programming assignment will cover a major course topic and may (will) involve a significant amount of programming. Do not wait until the night before an assignment is due to start working on it!

Late work will be accepted, but a penalty of 20% per calendar day late will be assessed. Assignments are due at 11:59PM on their due date, unless otherwise instructed.

Grading

Your course grade will be based on assignments (50%), and term projects (50%). Class presentations affect the grading of term projects. After assigning the grade based on the above criteria, not participating in classes can reduce your grade by up to 10 percent points. A perfect attendance is not required, but expect this clause to be in effect if I rarely see you in class.

A grade of 90% or above guarantees an A, 80% or above a B, 70% or above a C, and 60% or above a D.

This grading formula implies that there is no curve; your grade will depend only on how well you do, and not on how well everyone else does. (If everyone does exceptionally badly on some assignment, I may decide the assignment was at fault rather than the students, in which case I'll adjust the grade cutoffs as I deem appropriate. But I won't adjust in the other direction; if everyone gets an A, that's great).

All grade assignments are final—unless there was a mistake made in recording your semester grades or in computing your final grade. If all numbers are correctly recorded and computed, I will not discuss changing the resulting letter grades.

There are situations that may warrant regrading a particular assignment. For example, making addition errors in computing your score, not seeing or an answer that you gave, or not understanding an answer that you gave. Requests for regrading of assignments must be made within one week after the graded work has been handed back.

Policies

Academic Integrity Policy: An Aggie does not lie, cheat, or steal or tolerate those who do. The Honor Council Rules and Procedures are available on the web http://www.tamu.edu/aggiehonor.

Americans with Disabilities Act (ADA) Policy: The Americans with Disabilities Act (ADA) is a federal anti-discrimination statute that provides comprehensive civil rights protection for persons with disabilities. Among other things, this legislation requires that all students with disabilities be guaranteed a learning environment that provides for reasonable accommodation of their disabilities. If you believe you have a disability requiring an accommodation, please contact the Department of Student Life, Services for Students with Disabilities, in Room 126 of the Koldus Building or call 845-1637.

Topics

The following is a tentative list of topics discussed during the course:

Schedule and material

Note that the schedule is tentative, and there will be changes. Slides are downloadable in two formats, pdf with 1 slide per page, and 4up.pdf with four slides per page. Some of the slides are based on earlier presentations, or other material, contributed by numerous people, in particular, Andrew Lumsdaine, Jeremiah Willcock, Jeremy Siek, Dave Musser, Alex Stepanov, Dave Abrahams, and Doug Gregor.

Mon, Aug 25 Introduction Slides 1 Slides 1 (4up)
Wed, Aug 27 Introduction, C++ templates Slides 2 Slides 2 (4up)
Fri, Aug 29 C++ templates
Mon, Sep 1 C++ templates
Wed, Sep 3 C++ templates, Tour of STL Slides 3 Slides 3 (4up)
Fri, Sep 5 Generic programming principles/STL
Mon, Sep 8 Generic programming principles/STL
Wed, Sep 10 Generic programming principles/STL
Fri, Sep 12 Class cancelled
Mon, Sep 15 Generic programming principles/STL
Wed, Sep 17 Generic programming principles/STL
Fri, Sep 19 Function objects Slides 4 Slides 4 (4up)
Mon, Sep 22 Function objects continue, Adaptors, allocators
Wed, Sep 24 Associated types and traits classes, algorithm specialization
Fri, Sep 26 Algorithm specialization
Mon, Sep 29 Boost Graph Library Slides 5 (numbered as 13) Slides 5 (4up)
Wed, Oct 1 Boost Graph Library
Fri, Oct 3 Discussion on Projects Project slides Project slides (4up)
Mon, Oct 6 BGL wrapup, approaches to constrained generics Slides 6 (numbered as 5) Slides 6 (4up)
Wed, Oct 8 approaches to constrained generics
Fri, Oct 10 approaches to constrained generics
Mon, Oct 13 approaches to constrained generics
Wed, Oct 15 approaches to constrained generics
Fri, Oct 17 C++ concepts Slides 7 (numbered as 6) Slides 7 (4up)
Mon, Oct 20 Guest lecture, Bjarne Stroustrup
Wed, Oct 22 Guest lecture, Jacob Smith: "Library Composition and Adapation with ConceptC++"
Fri, Oct 24 C++ Concepts
Mon, Oct 27 C++ Concepts
Wed, Oct 29 C++ Concepts
Fri, Oct 31 C++ Concepts
Mon, Nov 3 C++ Concepts
Wed, Nov 5 Guest Lecture (time announced in class)
Fri, Nov 7 Generative Programming Slides 8 (numbered as 20) Slides 8 (4up)
Mon, Nov 10 Generative Programming
Wed, Nov 12 Generative Programming
Fri, Nov 14 MPL
Mon, Nov 17 MPL
Wed, Nov 19 Expression Templates, enable_if Slides 9 (numbered as 24) Slides 9 (4up)
Fri, Nov 21 Project Presentations
Mon, Nov 24 Project Presentations
Wed, Nov 26 Project Presentations
Fri, Nov 28 No class — thanksgiving
Mon, Dec 1 Project Presentations

Assignments

Projects

The projects instruction page.

Resources

Software

The main tool you will be needing in this course is a C++ compiler. Get your hands on one by whatever means you wish. One option is explained here. I will also ask your returned assignments to come equipped with Makefiles that build your programs; familiarize yourself with make. Also, be prepared to create pdf files by some means; pdf is the format that you are required to return your write-ups in. A handy tool for this is LaTeX (in fact, pdfLaTeX).

Instructions on other software tools we may possibly need will be given later.

Books

There's no mandatory textbook. The following books augment the material we cover in class.

Libraries

The Boost Library Collection http://www.boost.org
SGI STL pages (complete online STL reference manual) http://www.sgi.com/tech/stl/