This paper describes the extension of a concurrent constraint programming (CCP) language with an interface to define new finite
domain constraints efficiently. While the extension is implemented
for the CCP language Oz, the described interface is well-suited to be
also applied to other CCP languages and even to Prolog-based
implementations with coroutining. The interface is easily extendable
to other constraint systems as done for set constraints.
Constraints are implemented as instances of C++ classes, so-called
propagators. Propagators are completely separated from the
runtime system. The supplied abstractions are as high-level as to hide
away issues like suspension handling but provide an expressiveness
adequate to implement global constraints employing
advanced algorithmic techniques. This allows to solve demanding
combinatorial problems, as for instance scheduling problems.
The presented interface exploits specific features of Oz, like equality
constraints and local computation spaces, but avoids to bother the
programmer with implementation details of these features.