Kaleidoscope: mixing objects, constraints, and imperative programming

Kaleidoscope is an object-oriented language being designed to integrate the traditional imperative object-oriented paradigm with the less traditional declarative constraint paradigm. Imperative state changes provide sequencing while declarative constraints provide object relations. A variables as streams semantics enables the declarative-imperative integration. A running example is used to illustrate the language concepts—a reimplementation of the MacDraw II dashed-lines dialog box. The example is in three parts: the input channel, using imperative code to sequence through modes; the output channel, using constraints to update the display; and the internal relations, using constraints to maintain the data objects' consistency requirements. The last sections of the paper discuss views as a natural result of combining objects with constraints, as well as related and future work.

[1]  William W. Wadge,et al.  Lucid, the dataflow programming language , 1985 .

[2]  William Leler,et al.  Constraint programming languages: their specification and generation , 1988 .

[3]  Alan K. Mackworth Consistency in Networks of Relations , 1977, Artif. Intell..

[4]  William H. Harrison,et al.  Good News, Bad News: Experience Building a Software Development Environment Using the Object-Oriented Paradigm , 1989, OOPSLA.

[5]  Dana S. Scott,et al.  Concurrent constraint programming languages , 1989 .

[6]  Craig Chambers,et al.  Iterative type analysis and extended message splitting; optimizing dynamically-typed object-oriented programs , 1990, PLDI '90.

[7]  Bjørn N. Freeman-Benson,et al.  Constraint Hierarchies , 1992, LISP Symb. Comput..

[8]  Robert Adamy Duisberg Constraint-based animation: temporal constraints in the animus system , 1986 .

[9]  Justin O. Graver,et al.  Type checking and type inference for object-oriented programming languages , 1989 .

[10]  Craig Chambers,et al.  An efficient implementation of SELF a dynamically-typed object-oriented language based on prototypes , 1989, OOPSLA 1989.

[11]  William Harrison,et al.  Good news, bad news: experience building software development environment using the object-oriented paradigm , 1989, OOPSLA 1989.

[12]  David Maier,et al.  The Filter Browser Defining Interfaces Graphically , 1987, ECOOP.

[13]  Uday S. Reddy,et al.  Narrowing as the Operational Semantics of Functional Languages , 1985, SLP.

[14]  Scott Wallace,et al.  Fabrik: a visual programming environment , 1988, OOPSLA '88.

[15]  Philip Wadler,et al.  Views: a way for pattern matching to cohabit with data abstraction , 1987, POPL '87.

[16]  Peter F. Sweeney,et al.  Three steps to views: extending the object-oriented paradigm , 1989, OOPSLA '89.

[17]  Peter F. Sweeney,et al.  Three steps to views: extending the object-oriented paradigm , 1989, OOPSLA 1989.

[18]  A. Borning,et al.  Constraint technology for user-interface construction in ThingLab II , 1989, OOPSLA 1989.

[19]  Joxan Jaffar,et al.  Constraint logic programming , 1987, POPL '87.

[20]  簡聰富,et al.  物件導向軟體之架構(Object-Oriented Software Construction)探討 , 1989 .

[21]  Andrew P. Black,et al.  Object structure in the Emerald system , 1986, OOPLSA '86.

[22]  Michael J. Maher,et al.  Constraint Hierarchies and Logic Programming , 1989, ICLP.

[23]  Andrew P. Black,et al.  Object structure in the Emerald system , 1986, OOPSLA 1986.

[24]  Bjørn N. Freeman-Benson,et al.  An incremental constraint solver , 1990, CACM.