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