Калейдоскоп (язык программирования) - 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