Язык программирования Kaleidoscope — это язык программирования ограничений, встраивающий ограничения в императивный объектно-ориентированный язык. Он добавляет ключевые слова always , once и assert .. during (ранее while .. assert ) для создания утверждений об инвариантах отношений. Объекты имеют конструкторы ограничений, которые не являются методами, для обеспечения значений пользовательских типов данных.
Существует три версии Калейдоскопа, которые показывают эволюцию от декларативного к все более императивному стилю. Различия между ними следующие. [1]
Сравните два фрагмента кода, оба из которых позволяют пользователю перетаскивать уровень ртути в простом графическом термометре с помощью мыши.
Без ограничений:
пока мышь.кнопка = вниз делать старый <- mercury.top; mercury.top <- mouse.location.y; температура <- ртутный столб.высота / шкала; display_number( температура ); если старый < mercury.top тогда delta_grey( старый, mercury.top ); elseif старый > mercury.top тогда delta_white( mercury.top, old ); конец, если;конец пока;
С ограничениями:
всегда: температура = высота ртутного столба / шкала;всегда: белый прямоугольник (термометр);всегда: серый прямоугольник ( ртуть );всегда: отображать число (температура);пока мышь.кнопка = вниз делать mercury.top = мышь.location.y;конец пока;