ECLiPSe — это программная система для разработки и внедрения приложений программирования логики ограничений , например, в областях оптимизации , планирования , составления графиков , распределения ресурсов , расписания, транспорта и т. д. Она также подходит для обучения большинству аспектов комбинаторного решения задач, например, моделирование проблем , программирование в ограничениях , математическое программирование и методы поиска . [1] Он содержит библиотеки решателей ограничений , высокоуровневый язык моделирования и управления (расширение Пролога ), интерфейсы для сторонних решателей, интегрированную среду разработки и интерфейсы для встраивания в хост-среды.
ECLiPSe разрабатывался до 1995 года в Европейском исследовательском центре компьютерной индустрии (ECRC) в Мюнхене , а затем до 2005 года в Центре планирования и управления ресурсами Имперского колледжа Лондона (IC-Parc). Его приобрела компания Cisco Systems . В сентябре 2006 года оно было выпущено как программное обеспечение с открытым исходным кодом под эквивалентом общественной лицензии Mozilla и теперь размещено на SourceForge .
Язык ECLiPSe [2] в значительной степени обратно совместим с Прологом и поддерживает различные диалекты, включая ISO Prolog . Благодаря своей декларативности его можно использовать как в качестве языка моделирования для описания проблем, так и в качестве языка программирования общего назначения .
Помимо основных типов данных Пролога, доступны следующие: строки , целые и рациональные числа неограниченной точности , а также интервалы с плавающей запятой . Синтаксис массивов и структуры с именами полей также поддерживаются и особенно полезны при моделировании ограничений.
Логическая итерационная конструкция [3] устраняет необходимость в большинстве простых шаблонов рекурсии .
ECLiPSe предоставляет комплексные возможности [2] для реализации управления , управляемого данными . К ним относятся декларативные условия задержки, а также примитивы метапрограммного управления, такие как явная приостановка достижения цели, гибкие средства запуска и приоритеты выполнения. Вместе с атрибутивным переменным типом данных это ключ ко многим расширениям базового языка логического программирования , включая все функциональные возможности, основанные на ограничениях. Система вызывает определяемые пользователем обработчики событий, когда она встречает атрибутированные переменные в определенных контекстах, например при унификации.
Система модулей контролирует видимость предикатов, нелогических хранилищ, преобразований источника и настроек синтаксиса. Интерфейсы модулей можно расширять и ограничивать, а модули, написанные на разных диалектах языков, можно смешивать в одном приложении.
Программы могут содержать структурированные комментарии, на основе которых можно создавать справочную документацию.
ECLiPSe предоставляет несколько библиотек решателей ограничений , которые можно использовать в прикладных программах:
Арифметические ограничения для конечных областей, ограничения конечного множества, обобщенное распространение, интервальные рассуждения над нелинейными ограничениями, интерфейсы для внешних симплексных решателей, правила обработки ограничений (CHR) и многое другое.
Другие библиотеки реализуют такие методы поиска, как поиск по ветвям и границам , поиск на основе восстановления, поиск с ограниченным несоответствием.
ECLiPSe взаимодействует с внешними решателями, в частности с решателями COIN-OR , CPLEX , Gurobi и Xpress-MP для линейного и смешанно-целочисленного программирования [4] и библиотекой решателей Gecode .
Библиотеки совместимости для ISO Prolog [5] и других диалектов Пролога (C-Prolog, Quintus , SICStus , SWI-Prolog ) позволяют повторно использовать библиотеки, написанные на этих диалектах.
В дистрибутив включены и другие служебные библиотеки, в том числе ряд популярных общедоступных .
Система включает в себя инкрементный компилятор, который преобразует исходный код в код виртуальной машины . Компилятор оптимизирует выбор индекса, порядок унификации, встраивание управляющих конструкций и может учитывать информацию о режиме.
Система времени выполнения реализует виртуальную машину , автоматическое управление памятью со сборкой мусора стеков и словаря, обработку событий и выполнение, управляемое данными. Версии ECLiPSe реализуют ИЛИ- параллелизм .
Компоненты ECLiPSe можно интегрировать в программное обеспечение через низкоуровневый интерфейс C или C++ или через высокоуровневые интерфейсы для Java и Tcl .
{{cite book}}
: CS1 maint: местоположение ( ссылка ){{cite book}}
: CS1 maint: местоположение ( ссылка )