Эстерель - Esterel
Эстерель это синхронный язык программирования для разработки сложных реактивных систем. В императивное программирование стиль Эстерель позволяет простое выражение параллелизм и упреждение. Как следствие, он хорошо подходит для разработки моделей с преобладанием элементов управления.
Разработка языка началась в начале 1980-х годов и в основном осуществлялась командой Ecole des Mines de Paris и INRIA во главе с Жерар Берри во Франции. Текущие компиляторы берут программы Esterel и генерируют Код C или аппаратные (RTL) реализации (VHDL или Verilog ).
Язык все еще находится в стадии разработки, и несколько компиляторов уже выпущены. Коммерческая версия Эстерель среда разработки Студия Эстерель. Компания, занимающаяся его коммерциализацией (Synfora ) инициировал процесс нормализации с IEEE однако в апреле 2007 г. рабочая группа (P1778) распалась в марте 2011 г. Esterel v7 Reference Manual Version v7 30 - первоначальное предложение по стандартизации IEEE общедоступно.
Многообразное понятие времени
Понятие времени, используемое в Эстерель, отличается от понятия времени в несинхронных языках следующим образом: понятие физического времени заменяется понятием порядка. Учитываются только одновременность и приоритет событий. Это означает, что физическое время не играет особой роли. Это называется разнообразным представлением о времени. Программа Esterel описывает полностью упорядоченную последовательность логических мгновений. В каждый момент происходит произвольное количество событий (включая 0). События, происходящие в один и тот же логический момент, считаются одновременными. Другие события упорядочены по экземплярам их возникновения. Есть два типа операторов: те, которые занимают нулевое время (выполняются и завершаются в один и тот же момент), и те, которые задерживаются на заданное количество циклов.
Сигналы
Сигналы - единственное средство связи. Есть оценочные и неоцененные сигналы. Далее они подразделяются на входные, выходные или локальные сигналы. Сигнал имеет свойство мгновенно присутствовать или отсутствовать. Ценные сигналы также содержат значение. Сигналы передаются по программе, а это означает, что любой процесс может читать или записывать сигнал. Значение оценочного сигнала можно определить в любой момент, даже если сигнал отсутствует. Статус сигнала по умолчанию отсутствует. Сигналы остаются отсутствующими до тех пор, пока они явно не настроены для представления с помощью оператора emit. Связь происходит мгновенно, это означает, что сигнал, излучаемый в цикле, становится видимым немедленно. Обратите внимание, что можно общаться в одном и том же цикле.
Правила когерентности сигнала
- Каждый сигнал присутствует или отсутствует в цикле, но не в обоих одновременно.
- Все писатели бегут раньше читателей.
Таким образом
представить A еще испустить Aend
является ошибочная программа: писатель "emit A" должен запускаться до того, как читатель "представляет A", но семантика языка требует, чтобы сначала было выполнено "present A", что приводит к конфликту в семантике программы.[требуется разъяснение ]
Конструкции языка
Примитивные высказывания Эстереля
Чистая Эстерель имеет одиннадцать примитивных утверждений.[1]
ничего | Немедленно прекращается без каких-либо других эффектов. |
Пауза | Блокирует поток управления в текущем цикле для возобновления в следующем цикле. |
п ; q | Работает п пока он не прекратится, а затем, в той же реакции, начните q. |
п || q | Работает п и q в параллели |
петля п конец | Перезагрузить тело п как только он закончится. Каждый путь через тело цикла должен содержать хотя бы один Пауза заявление, чтобы избежать неограниченного зацикливания в рамках одной реакции. |
сигнал S в п конец | Объявляет местный сигнал. |
испускают S | Сделать сигнал S присутствует в текущий момент. Сигнал отсутствует, если он не излучается. |
подарок S тогда п еще q конец | Если сигнал S присутствует в текущий момент, немедленно запустить п, иначе запустите q. |
приостановить п когда S | Приостанавливает выполнение тела в моменты, когда S настоящее. |
ловушка Т в п конец | Объявите помеченный escape-блок. |
выход Т | Перейти к концу самого сокровенного Т-помеченный блок побега. |
Производные заявления Esterel
Эстерель имеет несколько производных конструкций:[2][3]
Производное заявление | Расширение |
---|---|
остановка | конец паузы цикла |
выдерживать s | цикл испускать s; пауза конец |
подарок s тогда п конец | подарок s тогда п еще ничего конец |
Ждите s | ловушка T в паузе цикла; подарок s затем выйдите из T конец конец цикла конец |
ждать немедленно s | ловушка T в петле присутствует s затем выйдите из T end; пауза конец конец цикла |
приостановить п когда немедленно s | приостановить настоящее s затем пауза в конце; п когда s |
прервать п когда (немедленно) s | ловушка T в приостановке п когда (немедленно) s; выход T || ждать (немедленно) s; выход T; конец |
слабый аборт п когда (немедленно) s | ловушка T в п; выход T || ждать (немедленно) s; выход T; конец |
петля s | прерывание цикла п ; остановиться, когда s конец цикла |
каждые (немедленно) s делать п заканчивать каждый | ждать (немедленно) s; петля п каждый s |
Другие заявления Эстерель
В полном языке Esterel также есть операторы для объявления и создания экземпляров модулей, для переменных, для вызова внешних процедур и для оцененных сигналов.
Пример (ABRO)
Следующая программа генерирует выход O, как только будут получены оба входа A и B. Сбросьте поведение всякий раз, когда принимается вход R.
модуль ABRO: вход A, B, R; выход O; цикл [await A || ждать B]; испустить модуль Oeach Rend
Преимущества Эстерель
- Модель времени дает программисту точный контроль
- Параллелизм удобен для задания систем управления
- Полностью детерминированный
- Конечный язык
- Время выполнения предсказуемо
- Намного легче проверить формально
- Может быть реализован как аппаратно, так и программно
Недостатки Эстерель
- Конечностный характер языка ограничивает гибкость (но выразительности достаточно для выбранной области применения)
- Семантические задачи
- Часто бывает сложно избежать нарушений причинно-следственной связи
- Сложно компилировать в общем случае, но существуют простые критерии корректности
Смотрите также
- Блеск, родной язык программирования
- СИГНАЛ, синхронный язык, ориентированный на поток данных, обеспечивающий многочастотные спецификации
- Эстерель Технологии, разработчик Esterel Studio и других инструментов
- Модель параллельного программирования
использованная литература
- ^ Берри, Жерар (1999). «Конструктивная семантика чистого Эстерель». CiteSeerX 10.1.1.46.2076. Цитировать журнал требует
| журнал =
(Помогите) - ^ Берри, Жерар (июнь 2000 г.). "Учебник по языку Esterel v5". Ecole des Mines и INRIA. CiteSeerX 10.1.1.3.1177. Цитировать журнал требует
| журнал =
(Помогите) - ^ Берри, Жерар; Гонтье, Жорж (Ноябрь 1992 г.). «Синхронный язык программирования Esterel: дизайн, семантика, реализация». Наука компьютерного программирования. 19 (2): 87–152. CiteSeerX 10.1.1.17.5606. Дои:10.1016 / 0167-6423 (92) 90005-В.
внешние ссылки
- Язык Эстерель в Inria
- Esterel Web на esterel.org
- Компилятор Columbia Esterel компилятор с открытым исходным кодом