Синхронный язык программирования
В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Язык синхронного программирования — это язык компьютерного программирования, оптимизированный для программирования реактивных систем .
Компьютерные системы можно разделить на три основных класса:
- Трансформационные системы принимают некоторые входные данные, обрабатывают их, выдают выходные данные и прекращают их выполнение. Типичный пример — компилятор.
- Интерактивные системы непрерывно взаимодействуют со своей средой со своей собственной скоростью. Типичным примером является Интернет.
- Реактивные системы непрерывно взаимодействуют с окружающей средой со скоростью, определяемой окружающей средой. Типичным примером является система автоматического управления полетом современных самолетов. Поэтому реактивные системы должны реагировать на стимулы из окружающей среды в строгие сроки. По этой причине их часто называют системами реального времени , и они часто встречаются во встроенных системах .
Синхронное программирование , также называемое синхронным реактивным программированием ( SRP ), представляет собой парадигму компьютерного программирования, поддерживаемую языками синхронного программирования. Принцип SRP заключается в создании той же абстракции для языков программирования, что и синхронная абстракция в цифровых схемах. Синхронные схемы действительно разрабатываются на высоком уровне абстракции, где временные характеристики электронных транзисторов не учитываются. Таким образом, предполагается, что каждый вентиль схемы (или, и, ...) мгновенно вычисляет свой результат, предполагается, что каждый провод мгновенно передает свой сигнал. Синхронная схема тактируется и при каждом такте часов мгновенно вычисляет свои выходные значения и новые значения ячеек памяти (защелки) на основе входных значений и текущих значений ячеек памяти. Другими словами, схема ведет себя так, как будто электроны текут бесконечно быстро. Первые синхронные языки программирования были изобретены во Франции в 1980-х годах: Esterel. , Блеск и СИГНАЛ . С тех пор появилось множество других синхронных языков.
Синхронная абстракция значительно упрощает рассуждения о времени в синхронной программе благодаря понятию логических тактов : синхронная программа реагирует на окружающую среду последовательностью тактов, а вычисления внутри такта считаются мгновенными, т. е. как если бы процессор, выполняющий их, был бы бесконечно быстрым. Таким образом, оператор «a||b» абстрагируется как пакет «ab», где «a» и «b» являются одновременными. Возьмем конкретный пример: оператор Esterel «выпускает каждые 60 секунд минуту» указывает, что сигнал «минута» точно синхронен с 60-м появлением сигнала «секунда». На более фундаментальном уровне синхронная абстракция устраняет недетерминизм, возникающий в результате чередования параллельных действий. Это обеспечивает детерминированную семантику, что делает синхронные программы пригодными для формального анализа, проверки и генерации сертифицированного кода, а также их можно использовать в качестве формализмов формальных спецификаций .
Напротив, в асинхронной модели вычислений на последовательном процессоре оператор «a||b» может быть реализован либо как «a;b», либо как «b;a». Это известно как недетерминизм на основе перемежения . Недостаток асинхронной модели заключается в том, что она по своей сути запрещает детерминированную семантику (например, условия гонки), что усложняет формальные рассуждения, такие как анализ и проверка. Тем не менее, асинхронные формализмы очень полезны для моделирования, проектирования и проверки распределенных систем, поскольку они по своей сути асинхронны.
Также контрастом являются системы с процессами, которые в основном взаимодействуют синхронно . Примером могут служить системы, основанные на модели коммуникационных последовательных процессов (CSP) , которая допускает детерминированный (внешний) и недетерминированный (внутренний) выбор.
Синхронные языки [ править ]
- Аргос
- Atom ( предметно-ориентированный язык Haskell для встроенного программирования в реальном времени)
- Аверест
- листовой металл
- ChucK (синхронный реактивный язык программирования для аудио)
- Эстерель [1]
- ЛабВЬЮ
- ЧТО
- Блеск
- ПЛЕКСИЛ
- СИГНАЛ (синхронный язык, ориентированный на потоки данных, позволяющий использовать многотактовые спецификации)
- СОЛНЦЕ
- Синхронизация графиков
См. также [ править ]
Ссылки [ править ]
- Николас Хальбвакс. «Синхронное программирование реактивных систем». Kluwer Academic Publishers, 1993. http://www-verimag.imag.fr/~halbwach/newbook.pdf.
- ^ Г. Берри и Г. Гонтье. Язык синхронного программирования ESTEREL: Проектирование, семантика, реализация. Наука компьютерного программирования , 19 (2), 1992.
Внешние ссылки [ править ]
- Синхронная группа в лаборатории Verimag.
- Язык программирования SIGNAL .
- Унификация синхронных и асинхронных моделей для языков параллельного программирования. Предлагает параллельные языки на основе C , позволяет программистам определять параллелизм и управлять им в широком диапазоне компьютерных архитектур.