Эстерель - Esterel
Esterel - это синхронный язык программирования для разработки сложных реактивных систем. Императивное программирование стиль Эстереля позволяет простое выражение параллельности и упреждения . Как следствие, он хорошо подходит для разработки моделей с преобладанием элементов управления.
Разработка языка началась в начале 1980-х годов и в основном осуществлялась командой Ecole des Mines de Paris и INRIA под руководством Жерара Берри во Франции. Современные компиляторы берут программы Esterel и генерируют реализации кода C или аппаратного обеспечения (RTL) ( VHDL или Verilog ).
Язык все еще находится в стадии разработки, и несколько компиляторов уже выпущены. Коммерческая версия Esterel - это среда разработки Esterel Studio . Компания, которая занимается его коммерциализацией ( Synfora ), инициировала процесс нормализации с IEEE в апреле 2007 года, однако рабочая группа (P1778) распалась в марте 2011 года. Справочное руководство Esterel v7 Version v7 30 - первоначальное предложение стандартизации IEEE общедоступно.
Многообразное понятие времени
Понятие времени, используемое в Эстерель, отличается от понятия времени в несинхронных языках следующим образом: понятие физического времени заменяется понятием порядка. Учитываются только одновременность и приоритет событий. Это означает, что физическое время не играет особой роли. Это называется разнообразным представлением о времени. Программа Esterel описывает полностью упорядоченную последовательность логических мгновений. В каждый момент происходит произвольное количество событий (включая 0). События, произошедшие в один и тот же логический момент, считаются одновременными. Другие события упорядочены по экземплярам их возникновения. Есть два типа операторов: те, которые занимают нулевое время (выполняются и завершаются в один и тот же момент), и те, которые задерживаются на заданное количество циклов.
Сигналы
Сигналы - единственное средство связи. Есть оценочные и неоцененные сигналы. Далее они подразделяются на входные, выходные или локальные сигналы. Сигнал имеет свойство мгновенно присутствовать или отсутствовать. Ценные сигналы также содержат значение. Сигналы транслируются по программе, а это означает, что любой процесс может читать или записывать сигнал. Значение оценочного сигнала можно определить в любой момент, даже если сигнал отсутствует. Состояние сигнала по умолчанию отсутствует. Сигналы остаются отсутствующими до тех пор, пока они не будут явно представлены с помощью оператора emit. Связь происходит мгновенно, это означает, что сигнал, излучаемый в цикле, виден сразу. Обратите внимание, что можно общаться в одном и том же цикле.
Правила когерентности сигнала
- Каждый сигнал присутствует или отсутствует в цикле, но не в обоих одновременно.
- Все писатели бегут раньше читателей.
Таким образом
present A else emit A end
является ошибочной программой : писатель «испускает А» должен выполняться до того, как считыватель «представляет А», но эта программа запрашивает выполнение «настоящего А» в первую очередь.
Конструкции языка
Примитивные высказывания Эстереля
Чистая Эстерель имеет одиннадцать примитивных утверждений.
nothing |
Немедленно прекращается без каких-либо других эффектов. |
pause |
Блокирует поток управления в текущем цикле для возобновления в следующем цикле. |
p ; q
|
Запускает p, пока не завершится, а затем в той же реакции запускает q . |
p || q
|
Запускает p и q параллельно |
loop п end
|
Перезагрузите тело p, как только оно завершится. Каждый путь через тело цикла должен содержать хотя бы один pause оператор, чтобы избежать неограниченного зацикливания в рамках одной реакции.
|
signal S in p end
|
Объявляет местный сигнал. |
emit S
|
Сделайте сигнал S присутствующим в текущий момент. Сигнал отсутствует, если он не излучается. |
present S then p else q end
|
Если в текущий момент присутствует сигнал S , немедленно запустите p , в противном случае запустите q . |
suspend p when S
|
Приостанавливает выполнение тела в моменты, когда присутствует S. |
trap Т in п end
|
Объявите помеченный escape-блок. |
exit Т
|
Перейти к концу самого внутреннего Т меченным побег блок. |
Производные заявления Esterel
Эстерель имеет несколько производных конструкций:
Производное заявление | Расширение |
---|---|
halt |
loop pause end
|
sustain s
|
loop emit s; pause end
|
present s then p end
|
present s then p else nothing end
|
await s
|
trap T in loop pause; present s then exit T end end loop end
|
await immediate s
|
trap T in loop present s then exit T end; pause end loop end
|
suspend p when immediate s
|
suspend present s then pause end; p when s
|
abort p when (immediate) s
|
trap T in suspend п when (immediate) с ; exit T || await (immediate) с; exit T; end
|
weak abort p when (immediate) s
|
trap T in p ; exit T || await (immediate) s; exit T; end
|
loop s
|
loop abort p ; halt when s end loop
|
every (immediate) s do p end every
|
await (immediate) s ; loop p each s
|
Другие заявления Эстерель
В полном языке Esterel также есть операторы для объявления и создания экземпляров модулей, для переменных, для вызова внешних процедур и для оцененных сигналов.
Пример (ABRO)
Следующая программа генерирует выход O, как только будут получены оба входа A и B. Сбросьте поведение при получении входа R.
module ABRO: input A, B, R; output O; loop [ await A || await B ]; emit O each R end module
Преимущества Эстерель
- Модель времени дает программисту точный контроль
- Параллелизм удобен для задания систем управления
- Полностью детерминированный
- Конечногосударственный язык
- Время выполнения предсказуемо
- Намного проще проверить формально
- Может быть реализован как аппаратно, так и программно
Недостатки Эстерель
- Конечностный характер языка ограничивает гибкость (но выразительности достаточно для выбранной области применения)
- Семантические вызовы
- Часто трудно избежать нарушений причинно-следственной связи.
- Трудно компилировать в общем случае, но существуют простые критерии корректности
Смотрите также
- Lustre , родной язык программирования
- SIGNAL , синхронный язык, ориентированный на поток данных, обеспечивающий многочастотные спецификации
- Esterel Technologies , разработчик Esterel Studio и других инструментов
- Модель параллельного программирования
использованная литература
внешние ссылки
- Язык Эстерель в Инриа
- Columbia Esterel Compiler - компилятор с открытым исходным кодом.