CSE590dg Language-Based Techniques for Improving C-Level Software Quality

Winter 2004

Meetings: TTh 12:00-1:20, MEB 245
Instructor: Dan Grossman
(careful: grossman@cs goes to a different person)
Allen Center 556

This course surveys recent language-based approaches for finding software defects that are endemic to programs written in C. Emphasis is on techniques leveraging language implementations and type-checking that (a) prove the absence of certain errors and (b) do not (necessarily) treat C as though it were a higher level language. Students design and complete projects aimed at finding errors in C programs automatically. The course should have plenty to offer programming-language students and students who write C-level systems (operating systems, networking code, embedded systems, etc.), so the latter are particularly encouraged to attend.

Evolving Schedule:

  1. January 6: The C level of abstraction and approaches to safety
  2. January 8: Catalog of "implementation defined" behavior in C and tools for analyzing C-level code
  3. January 20: Type casts, approaches to implementing parametric polymorphism
  4. January 22: C-level parametric polymorphism, memory kinds
  5. January 27: Existential types, order-of-evaluation
  6. January 29: More order-of-evaluation, dangling pointers
  7. February 3: Conservative garbage collection
  8. February 5: Michael Hicks guest lecture (Cyclone memory management)
  9. February 10: Lexically scoped regions
  10. February 12: C-level LIFO regions; avoiding explicit effects
  11. February 17: Subtyping (layout, nullability, and const)
  12. February 19: Daniel Weise guest lecture (How to Get Annotations and Specifications into Industrial Code: Three easy lessons)
  13. February 26: Software fault isolation, program shepherding, and type homogeneity
  14. March 2: Static bug-finding
  15. March 4: CSSV (static string checking)
  16. March 9: Limiting aliasing: restrict and uniqueness
  17. March 11: Project presentations and wrap-up

Here is some useful information for course participants. (Access restricted to UWCSE for the time being.)

Probable topics (subject to modification based on participants' interests):
  1. Introduction: Why is the C-level important? Why is it so hard to write safe programs? How do hacks work? What automatic techniques can detect errors? How should we judge techniques?
  2. Type casts, unions, and polymorphism
  3. Memory management
  4. NULL Pointers
  5. Uninitialized Memory
  6. Aliases
  7. Under-specified evaluation order
  8. Out-of-bound array indexing
  9. Nul-terminated strings
  10. Multithreading
  11. User-defined properties
Notice the topics are organized by error (problem) rather than by automated approach (solution). For each problem, there may be solutions based on: We can judge approaches by what they guarantee (what errors they detect and how programs behave), when they provide a guarantee, how much effort they require from programmers, what assumptions they make, and how they interact with other solutions.

Last updated: 10 February 2003