Esterel

редактировать

Esterel - это язык синхронного программирования для разработки сложных реактивных систем. стиль императивного программирования в Esterel позволяет простое выражение параллелизма и вытеснения. Как следствие, он хорошо подходит для разработки моделей с преобладанием элементов управления.

Разработка языка началась в начале 1980-х годов и в основном осуществлялась командой Ecole des Mines de Paris и INRIA во главе с Жерар Берри во Франции. Текущие компиляторы берут программы Esterel и генерируют код C или аппаратные (RTL) реализации (VHDL или Verilog ).

Язык все еще находится в стадии разработки, несколько компиляторов уже выпущены. Коммерческая версия Esterel - это среда разработки. Компания, которая занимается его коммерциализацией (Synfora ), инициировала процесс нормализации с помощью IEEE в апреле 2007 года, однако рабочая группа (P1778) распалась в марте 2011 года. Версия справочного руководства Esterel v7 v7 30 - первоначальное предложение по стандартизации IEEE общедоступно.

Содержание
  • 1 Множественное понятие времени
  • 2 Сигналы
    • 2.1 Правила когерентности сигналов
  • 3 Конструкции языка
    • 3.1 Примитивные операторы Эстереля
    • 3.2 Производные операторы Эстереля
    • 3.3 Другие утверждения Esterel
    • 3.4 Пример (ABRO)
  • 4 Преимущества Esterel
  • 5 Недостатки Esterel
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки
Многообразное понятие времени

Понятие времени, используемое в Эстерель, отличается от понятия времени в несинхронных языках следующим образом: понятие физического времени заменяется понятием порядка. Учитываются только одновременность и приоритет событий. Это означает, что физическое время не играет особой роли. Это называется разнообразным представлением о времени. Программа Esterel описывает полностью упорядоченную последовательность логических мгновений. В каждый момент происходит произвольное количество событий (включая 0). События, происходящие в один и тот же логический момент, считаются одновременными. Другие события упорядочены по экземплярам их возникновения. Есть два типа операторов: те, которые занимают нулевое время (выполняются и завершаются в один и тот же момент), и те, которые задерживаются на заданное количество циклов.

Сигналы

Сигналы - единственное средство связи. Есть оценочные и неоцененные сигналы. Далее они подразделяются на входные, выходные или локальные сигналы. Сигнал имеет свойство мгновенно присутствовать или отсутствовать. Ценные сигналы также содержат значение. Сигналы передаются по программе, а это означает, что любой процесс может читать или записывать сигнал. Значение оценочного сигнала можно определить в любой момент, даже если сигнал отсутствует. Статус сигнала по умолчанию отсутствует. Сигналы остаются отсутствующими до тех пор, пока они не будут явно представлены с помощью оператора emit. Связь происходит мгновенно, это означает, что сигнал, излучаемый в цикле, виден немедленно. Обратите внимание, что можно общаться в одном и том же цикле.

Правила когерентности сигналов

  • Каждый сигнал присутствует или отсутствует в цикле, но не оба одновременно.
  • Все писатели запускаются раньше, чем какие-либо считыватели.

Таким образом,

присутствует A else emit A end

- это ошибочная программа : средство записи "emit A" должно выполняться до того, как средство чтения "представляет A", но семантика языка требует "настоящего A" "должно выполняться первым, что приводит к конфликту в семантике программы.

Конструкции языка

Примитивные операторы Esterel

Pure Esterel имеет одиннадцать примитивных операторов.

ничегоНемедленное прекращение без каких-либо других последствий.
паузаБлокирует поток управления в текущем цикле для возобновления в следующем цикле.
p ;qЗапускает p, пока не завершится, а затем, в той же реакции, запускает q.
p ||qВыполняет p и q параллельно
loopp endПерезапускает тело p, как только оно завершается. Каждый путь через тело цикла должен содержать хотя бы один оператор pause, чтобы избежать неограниченного цикла в рамках одной реакции.
signalS inp endОбъявляет локальный сигнал.
emitSСделать сигнал S присутствующим в текущий момент. Сигнал отсутствует, если он не излучается.
presentS thenp elseq endЕсли сигнал S присутствует в текущий момент, немедленно запустить p, иначе запустить q.
suspendp whenSПриостанавливает выполнение тела в моменты, когда присутствует S.
trapT inp endОбъявить помеченный escape-блок.
exitTПерейти к концу самого внутреннего блока перехода с T-меткой.

Производные операторы Esterel

Esterel имеют несколько производных конструкций:

Производные операторыExpansion
haltloop pause end
ustainsloop emits ; пауза конец
присутствуетs затемp endприсутствуетs затемp еще ничегоконец
ожиданиеsпрерывание T в паузе цикла; присутствуетs затем выйти T конец конец цикла конец
ждать немедленногоsпрерывание T в цикле присутствуетs затем выйти T end; приостановить конец цикла конец
приостановитьp когда немедленноsприостановить настоящееs затем приостановить конец;p когдаs
прерватьp когда (немедленно)sловушка T в приостановкеp когда (немедленно)s ; выход T || ждать (немедленно)s ; выход T; конец
слабое прерываниеp когда (немедленно)sловушка T вp ; выход T || ждать (немедленно)s ; выход T; конец
цикла pкаждыйsцикл прерываниеp ; останавливаться, когдаs конец цикла
каждый (немедленно)s dop конец каждыеожидание (немедленно)s ; loopp eachs

Другие операторы Esterel

Полный язык Esterel также имеет операторы для объявления и создания экземпляров модулей, для переменных, для вызова внешних процедур и для оцененных сигналов.

Пример (ABRO)

Следующая программа генерирует выход O, как только будут получены оба входа A и B. Сбросьте поведение всякий раз, когда принимается вход R.

модуль ABRO: вход A, B, R; выход O; цикл [ожидание A || ждать B]; emit O each R end module
Преимущества Esterel
  • Модель времени дает программисту точное управление
  • Параллелизм, удобный для определения систем управления
  • Полностью детерминированный
  • Язык с конечным числом состояний
    • Время выполнения предсказуемо
    • Намного легче проверить формально
  • Может быть реализовано как аппаратно, так и программно
Недостатки Esterel
  • Конечное состояние характер языка ограничивает гибкость (но выразительности достаточно для выбранной области приложения)
  • Семантические проблемы
    • Часто трудно избежать нарушений причинной связи
    • Сложно скомпилировать в общем случае, но существуют простые критерии правильности
См. также
Ссылки
Внешние ссылки
Последняя правка сделана 2021-05-19 04:57:03
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте