Сравнивайте с английским: нажмите на абзац — оригинал откроется в окне. Кнопка EN под абзацем показывает его прямо в тексте.
Содержание
Введение
Esterel – синхронный язык программирования для разработки сложных реактивных систем. Императивный стиль программирования в Esterel позволяет просто выражать параллелизм и прерывания. Как следствие, он хорошо подходит для проектирования моделей, где управление играет ключевую роль. Разработка языка началась в начале 1980-х годов и в основном проводилась командой из Ecole des Mines de Paris и INRIA под руководством Жерара Берри во Франции. Современные компиляторы преобразуют программы на Esterel в код на C или аппаратные реализации (RTL) – VHDL или Verilog. Язык продолжает разрабатываться, существует несколько компиляторов. Коммерческой версией Esterel является среда разработки Esterel Studio. Компания Synfora, которая занимается коммерциализацией языка, инициировала процесс стандартизации в IEEE в апреле 2007 года, однако рабочая группа (P1778) была расформирована в марте 2011 года. Справочное руководство находится в открытом доступе.
Esterel is a synchronous programming language for the development of complex reactive systems. The imperative programming style of Esterel allows the simple expression of parallelism and preemption. As a consequence, it is well suited for control dominated model designs. The development of the language started in the early 1980s, and was mainly carried out by a team of Ecole des Mines de Paris and INRIA led by Gérard Berry in France. Current compilers take Esterel programs and generate C code or hardware (RTL) implementations (VHDL or Verilog). The language is still under development, with several compilers out. The commercial version of Esterel is the development environment Esterel Studio. The company that commercialize it (Synfora) initiated a normalization process with the IEEE in April 2007 however the working group (P1778) dissolved March 2011. The reference manual is publicly available.
Многообразное понятие времени
Понятие времени, используемое в Esterel, отличается от понятия времени в несинхронных языках следующим образом: понятие физического времени заменяется понятием порядка. Учитываются только одновременность и предшествование событий. Это означает, что физическое время не играет какой-либо особой роли. Это называется многоформенным представлением времени. Программа на Esterel описывает полностью упорядоченную последовательность логических моментов времени. В каждый момент времени может произойти произвольное количество событий (включая ноль). События, происходящие в один и тот же логический момент времени, считаются одновременными. Остальные события упорядочиваются по моментам их возникновения. Существуют два типа операторов: те, которые выполняются мгновенно (исполняются и завершаются в один и тот же момент времени), и те, которые задерживают выполнение на заданное количество циклов.
The notion of time used in Esterel differs from that of non synchronous languages in the following way: The notion of physical time is replaced with the notion of order. Only the simultaneity and precedence of events are considered. This means that the physical time does not play any special role. This is called multiform notion of time. An Esterel program describes a totally ordered sequence of logical instants. At each instant, an arbitrary number of events occur (including 0). Event occurrences that happen at the same logical instant are considered simultaneous. Other events are ordered as their instances of occurrences. There are two types of statements: Those that take zero time (execute and terminate in the same instant) and those that delay for a prescribed number of cycles.
Сигналы
Сигналы – единственное средство коммуникации. Существуют сигналы с значением и без значения. Они дополнительно классифицируются как входные, выходные или локальные сигналы. Сигнал характеризуется тем, что в любой момент времени он либо присутствует, либо отсутствует. Сигналы с значением также содержат само значение. Сигналы транслируются по всей программе, что означает, что любой процесс может читать или записывать сигнал. Значение сигнала с значением может быть определено в любой момент времени, даже если сигнал отсутствует. По умолчанию сигнал отсутствует. Сигналы остаются в состоянии отсутствия до тех пор, пока явно не будут установлены в состояние присутствия с помощью оператора emit. Коммуникация происходит мгновенно, то есть сигнал, испущенный в цикле, становится видимым немедленно. Следует отметить, что можно осуществлять двустороннюю коммуникацию в пределах одного и того же цикла.
Signals are the only means of communication. There are valued and non valued signals. They are further categorized as being input, output, or local signals. A signal has the property of being either present or absent in an instant. Valued signals also contain a value. Signals are broadcast across the program, and that means any process can read or write a signal. The value of a valued signal can be determined in any instant, even if the signal is absent. The default status of a signal is absent. Signals remain absent until they are explicitly set to present using the emit statement. Communication is instantaneous, that means that a signal emitted in a cycle is visible immediately. Note that one can communicate back and forth in the same cycle.
Первичные заявления Эстереля
Чистый Эстерель имеет одиннадцать примитивных операторов. nothing Завершается немедленно, без каких-либо побочных эффектов. pause Блокирует ход управления в текущем цикле для возобновления в следующем цикле. p ; q Выполняет p до завершения, а затем, в той же реакции, запускает q. p || q Выполняет p и q параллельно. loop p 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 T in p end Объявляет помеченный блок выхода. exit T Переходит к концу ближайшего блока выхода, помеченного T.
Pure Esterel has eleven primitive statements. nothing Terminates immediately with no other effect. pause Blocks control flow in the current cycle for resumption in the next cycle. p ; q Runs p until it terminates and then, in the same reaction, starts q. p || q Runs p and q in parallel loop p end Restarts the body p as soon as it terminates. Every path through the loop body must contain at least one pause statement to avoid unbounded looping within a single reaction. signal S in p end Declares a local signal. emit S Make signal S present in the current instant. A signal is absent unless it is emitted. present S then p else q end If signal S is present in the current instant, immediately run p, otherwise run q. suspend p when S Suspends the execution of the body in instants where S is present. trap T in p end Declare a labeled escape block. exit T Jump to the end of the innermost T labeled escape block.
Другие заявления Esterel
В полном языке Эстерел также имеются операторы для объявления и инстанцирования модулей, для переменных, для вызова внешних процедур и для сигналов с заданным значением.
The full Esterel language also has statements for declaring and instantiating modules, for variables, for calling external procedures, and for valued signals.