Эстерель - 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

Преимущества Эстерель

  • Модель времени дает программисту точный контроль
  • Параллелизм удобен для задания систем управления
  • Полностью детерминированный
  • Конечный язык
    • Время выполнения предсказуемо
    • Намного легче проверить формально
  • Может быть реализован как аппаратно, так и программно

Недостатки Эстерель

  • Конечностный характер языка ограничивает гибкость (но выразительности достаточно для выбранной области применения)
  • Семантические задачи
    • Часто бывает сложно избежать нарушений причинно-следственной связи
    • Сложно компилировать в общем случае, но существуют простые критерии корректности

Смотрите также

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

  1. ^ Берри, Жерар (1999). «Конструктивная семантика чистого Эстерель». CiteSeerX  10.1.1.46.2076. Цитировать журнал требует | журнал = (Помогите)
  2. ^ Берри, Жерар (июнь 2000 г.). "Учебник по языку Esterel v5". Ecole des Mines и INRIA. CiteSeerX  10.1.1.3.1177. Цитировать журнал требует | журнал = (Помогите)
  3. ^ Берри, Жерар; Гонтье, Жорж (Ноябрь 1992 г.). «Синхронный язык программирования Esterel: дизайн, семантика, реализация». Наука компьютерного программирования. 19 (2): 87–152. CiteSeerX  10.1.1.17.5606. Дои:10.1016 / 0167-6423 (92) 90005-В.

внешние ссылки