A constraint represents a relation that should be satisfied: for example, that p1+p2=p3 for points p1, p2, and p3; that a text box be centered at the bottom of a window; or that a resistor in a circuit simulation obey Ohm's Law. Constraints are typically multi-directional (i.e., we can solve for any or all of p1, p2, or p3), and solved and maintained automatically. A constraint programming language embeds constraints at the language level. In this special topics course, we'll study, work with, and perhaps develop constraint languages. The work will include a course project, which can be either individual or done in groups of 2-3. The project might be developing a non-trivial application in a constraint language, extending or even developing a new language, or presenting and analyzing a set of papers from the literature. The first part of the course will consist of lectures, some exercises including writing some small programs in various languages, and helping identify course projects and groups. We will then move to a combination of discussing current and historical papers, and project discussions. Students will be expected to present (or help present) 2 or so papers -- the exact number will depend on enrollment.
The prerequisites are CSE 341 or equivalent, being comfortable reading programming language papers that include a certain amount of formalism, picking up new languages, and (recommended but not required) CSE 505. To help keep the class as participatory as possible, no auditors please.