Калейдоскоп (язык программирования) - Kaleidoscope (programming language)

Язык программирования Kaleidoscope - это язык программирования ограничений, встраивающий ограничения в императивный объектно-ориентированный язык. Он добавляет ключевые слова always , once и assert .. during (ранее while .. assert ), чтобы делать утверждения о реляционных инвариантах. У объектов есть конструкторы ограничений, которые не являются методами, для обеспечения значения определяемых пользователем типов данных.

Существует три версии Kaleidoscope, которые демонстрируют эволюцию от декларативного стиля к все более императивному стилю. Различия между ними заключаются в следующем.

Калейдоскоп'90 Калейдоскоп'91 Калейдоскоп'93
Оценка ограничений Ленивый Жаждущий Жаждущий
Переменные Удерживать потоки Удерживать потоки Императив
Параллельные ограничения Строгий Строгий Нестрогий
Синтаксис Smalltalk-подобный Алголоподобный Алголоподобный
Модель ограничений Уточнение Уточнение Возмущение
Метод диспетчеризации Одинокий Несколько Несколько
Назначение Как ограничение Как ограничение Разрушительный

Пример

Сравните два сегмента кода, каждый из которых позволяет пользователю перетаскивать уровень ртути в простой графический термометр с помощью мыши.

Без ограничений:

while mouse.button = down do
 old <- mercury.top;
 mercury.top <- mouse.location.y;
 temperature <- mercury.height / scale;
 if old < mercury.top then
  delta_grey( old, mercury.top );
  display_number( temperature );
 elseif old > mercury.top then
  delta_white( mercury.top, old );
  display_number( temperature );
 end if;
end while;

С ограничениями:

always: temperature = mercury.height / scale;
always: white rectangle( thermometer );
always: grey rectangle( mercury );
always: display number( temperature );
while mouse.button = down do
 mercury.top = mouse.location.y;
end while;

использованная литература

  • Лопес, Гас; Бьорн Фриман-Бенсон; Алан Борнинг (1994). «Калейдоскоп: язык программирования с ограничениями». Ограниченное программирование . Springer-Verlag. С. 313–329.
  • Marriott, Ким; Питер Дж. Стаки (1998). Программирование с ограничениями: введение . MIT Press. ISBN  0-262-13341-5