Эстерель
Esterel — синхронный язык программирования для разработки сложных реактивных систем. Императивный программирования стиль Esterel позволяет просто реализовать параллелизм и приоритетное вытеснение . Как следствие, он хорошо подходит для проектирования моделей, в которых преобладает контроль.
Разработка языка началась в начале 1980-х годов и в основном осуществлялась командой Парижской горной школы и INRIA под руководством Жерара Берри во Франции. Современные компиляторы берут программы Esterel и генерируют код C или аппаратные (RTL) реализации ( VHDL или Verilog ).
Язык все еще находится в стадии разработки, выпущено несколько компиляторов. Коммерческой версией Esterel является среда разработки Esterel Studio . Компания, которая его коммерциализировала ( Synfora ), инициировала процесс нормализации с IEEE в апреле 2007 года, однако рабочая группа (P1778) распалась в марте 2011 года. Справочное руководство находится в открытом доступе. [1]
понятие Многообразное времени
Понятие времени, используемое в Эстереле, отличается от понятия несинхронных языков следующим образом: понятие физического времени заменено понятием порядка. Учитываются только одновременность и старшинство событий. Это означает, что физическое время не играет особой роли. Это называется многоформным понятием времени. Программа Esterel описывает полностью упорядоченную последовательность логических моментов. В каждый момент времени происходит произвольное количество событий (включая 0). События, происходящие в один и тот же логический момент, считаются одновременными. Другие события упорядочены по мере их возникновения. Существует два типа операторов: те, которые занимают нулевое время (выполняются и завершаются в один и тот же момент), и те, которые задерживаются на заданное количество циклов.
Сигналы [ править ]
Сигналы являются единственным средством связи. Существуют ценные и неоцененные сигналы. Далее они подразделяются на входные, выходные или локальные сигналы. Сигнал имеет свойство присутствовать или отсутствовать в одно мгновение. Значимые сигналы также содержат значение. Сигналы передаются по всей программе, а это означает, что любой процесс может читать или записывать сигнал. Значение оцениваемого сигнала можно определить в любой момент, даже если сигнал отсутствует. Статус сигнала по умолчанию отсутствует. Сигналы остаются отсутствующими до тех пор, пока они не будут явным образом установлены с помощью оператора излучения. Связь происходит мгновенно, это означает, что сигнал, излучаемый в цикле, виден сразу. Обратите внимание, что можно общаться туда и обратно в одном и том же цикле.
Правила согласованности сигналов [ править ]
- Каждый сигнал присутствует или отсутствует в цикле, но не оба одновременно.
- Все писатели бегут раньше читателей.
Таким образом
present A else emit A end
является ошибочной программой , поскольку программа записи «emit A» должна выполняться раньше, чем программа чтения «present A», тогда как эта программа требует, чтобы сначала была выполнена «present A».
Языковые утверждения [ править ]
Примитивные утверждения Эстерела [ править ]
Чистый Эстерель имеет одиннадцать примитивных утверждений. [2]
nothing |
Завершается немедленно, без каких-либо других последствий. |
pause |
Блокирует поток управления в текущем цикле для возобновления в следующем цикле. |
п ; д |
Выполняет p до тех пор, пока не завершится, а затем, в той же реакции, запустит q . |
п || д |
Запускает p и q параллельно |
loop п end |
Перезапускает тело p сразу после его завершения. Каждый путь через тело цикла должен содержать хотя бы один pause оператор, чтобы избежать неограниченного цикла внутри одной реакции.
|
signal С in п end |
Объявляет локальный сигнал. |
emit С |
Сделайте сигнал S присутствующим в текущий момент. Сигнал отсутствует, если он не излучается. |
present С then п else д end |
Если сигнал S присутствует в текущий момент, немедленно запустите p , в противном случае запустите q . |
suspend п when С |
Приостанавливает выполнение тела в моменты S. присутствия |
trap Т in п end |
Объявите помеченный escape-блок. |
exit Т |
Перейдите к концу самого внутреннего T. escape-блока с буквой |
Производные операторы Esterel [ править ]
Эстерель имеет несколько производных конструкций: [3] [4]
Производный оператор | Расширение |
---|---|
halt |
loop pause end
|
sustain с |
loop emit с ; pause end
|
present с then п end |
present с then п else nothing end
|
await с |
trap T in loop pause; present с then exit T end end loop end
|
await immediate с |
trap T in loop present с then exit T end; pause end loop end
|
suspend п when immediate с |
suspend present с then pause end; п when с
|
abort п when (immediate) с |
trap T in suspend п when (immediate) с ; exit T || await (immediate) с ; exit T; end
|
weak abort п when (immediate) с |
trap T in п ; exit T || await (immediate) с ; exit T; end
|
loop с |
loop abort п ; halt when с end loop
|
every (immediate) с do п end every |
await (immediate) с ; loop п each с
|
Другие Esterel заявления
Полный язык 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 и других инструментов
- Модель параллельного программирования
Ссылки [ править ]
- ^ Лефевр, Ж. (3 ноября 2005 г.). «Справочное руководство Esterel v7, версия v7 30 – первоначальное предложение по стандартизации IEEE» (PDF) . Эстерел Технолоджис. Архивировано из оригинала (PDF) 30 декабря 2005 г.
- ^ Берри, Жерар (1999). «Конструктивная семантика чистого Эстереля» . CiteSeerX 10.1.1.46.2076 .
- ^ Берри, Жерар (июнь 2000 г.). «Букварь языка Esterel v5» . Горная школа и 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-В .
Внешние ссылки [ править ]
- Язык Эстерель в Инрии
- Columbia Esterel Compiler - компилятор с открытым исходным кодом.