Esterel — это синхронный язык программирования для разработки сложных реактивных систем. Императивный стиль программирования Esterel позволяет просто выражать параллелизм и вытеснение . Как следствие, он хорошо подходит для проектирования моделей с преобладанием управления.
Разработка языка началась в начале 1980-х годов и в основном проводилась командой Ecole des Mines de Paris и INRIA под руководством Жерара Берри во Франции. Современные компиляторы берут программы Esterel и генерируют код C или аппаратные (RTL) реализации ( VHDL или Verilog ).
Язык все еще находится в стадии разработки, и уже выпущено несколько компиляторов. Коммерческая версия Esterel — это среда разработки Esterel Studio. Компания, которая его коммерциализировала (Synfora), инициировала процесс нормализации с IEEE в апреле 2007 года, однако рабочая группа (P1778) распалась в марте 2011 года. Справочное руководство доступно для общественности. [1]
Понятие времени, используемое в Esterel, отличается от понятия несинхронных языков следующим образом: понятие физического времени заменяется понятием порядка. Рассматриваются только одновременность и предшествование событий. Это означает, что физическое время не играет никакой особой роли. Это называется многоформным понятием времени. Программа на Esterel описывает полностью упорядоченную последовательность логических моментов. В каждый момент происходит произвольное количество событий (включая 0). События, происходящие в один и тот же логический момент, считаются одновременными. Другие события упорядочиваются как их экземпляры вхождений. Существует два типа операторов: те, которые занимают нулевое время (выполняются и завершаются в один и тот же момент), и те, которые задерживаются на заданное количество циклов.
Сигналы являются единственным средством связи. Существуют значимые и незначимые сигналы. Они далее подразделяются на входные, выходные и локальные сигналы. Сигнал имеет свойство либо присутствовать, либо отсутствовать в данный момент. Значимые сигналы также содержат значение. Сигналы транслируются по всей программе, и это означает, что любой процесс может считывать или записывать сигнал. Значение значимого сигнала может быть определено в любой момент, даже если сигнал отсутствует. Статус сигнала по умолчанию — отсутствует. Сигналы остаются отсутствующими, пока они явно не будут установлены как присутствующие с помощью оператора emit. Связь мгновенная, это означает, что сигнал, излученный в цикле, виден немедленно. Обратите внимание, что можно общаться туда и обратно в одном и том же цикле.
Таким образом
настоящее время А еще испускают Аконец
является ошибочной программой , поскольку записывающее устройство «выделить А» должно быть запущено до того, как считывающее устройство «представить А», тогда как эта программа требует, чтобы «представить А» было выполнено первым.
Чистый Эстерель имеет одиннадцать примитивных утверждений. [2]
У Esterel есть несколько производных конструкций: [3] [4]
Полный язык Esterel также содержит операторы для объявления и создания экземпляров модулей, для переменных, для вызова внешних процедур и для значимых сигналов.
Следующая программа выдает выход O, как только получены оба входа A и B. Сбрасывает поведение каждый раз, когда получен вход R.
модуль АБРО:вход А, В, R;выход О;петля [ ждем А || ждем Б ]; испускают Окаждый Рконечный модуль