Язык синхронного программирования — это язык компьютерного программирования , оптимизированный для программирования реактивных систем.
Компьютерные системы можно разделить на три основных класса:
Синхронное программирование , также называемое синхронным реактивным программированием ( SRP ), представляет собой парадигму компьютерного программирования, поддерживаемую языками синхронного программирования. Принцип SRP заключается в создании той же абстракции для языков программирования, что и синхронная абстракция в цифровых схемах. Синхронные схемы действительно разрабатываются на высоком уровне абстракции, где временные характеристики электронных транзисторов не учитываются. Таким образом, предполагается, что каждый вентиль схемы (или, и, ...) мгновенно вычисляет свой результат, предполагается, что каждый провод мгновенно передает свой сигнал. Синхронная схема тактируется и при каждом такте часов мгновенно вычисляет свои выходные значения и новые значения ячеек памяти (защелки) на основе входных значений и текущих значений ячеек памяти. Другими словами, схема ведет себя так, как будто электроны текут бесконечно быстро. Первые синхронные языки программирования были изобретены во Франции в 1980-х годах: Esterel , Lustre и SIGNAL . С тех пор появилось множество других синхронных языков.
Синхронная абстракция значительно упрощает рассуждения о времени в синхронной программе благодаря понятию логических тактов : синхронная программа реагирует на окружающую среду последовательностью тиков, а вычисления внутри такта считаются мгновенными, т. е. как если бы процессор, выполняющий их, был бы бесконечно быстрым. Таким образом, оператор «a||b» абстрагируется как пакет «ab», где «a» и «b» являются одновременными. Возьмем конкретный пример: оператор Esterel «выпускает каждые 60 секунд минуту» указывает, что сигнал «минута» точно синхронен с 60-м появлением сигнала «секунда». На более фундаментальном уровне синхронная абстракция устраняет недетерминизм, возникающий в результате чередования параллельных действий. Это обеспечивает детерминированную семантику, что делает синхронные программы пригодными для формального анализа, проверки и генерации сертифицированного кода, а также их можно использовать в качестве формализмов формальных спецификаций .
Напротив, в асинхронной модели вычислений на последовательном процессоре оператор «a||b» может быть реализован либо как «a;b», либо как «b;a». Это известно как недетерминизм, основанный на чередовании. Недостаток асинхронной модели заключается в том, что она по своей сути запрещает детерминированную семантику (например, условия гонки), что усложняет формальные рассуждения, такие как анализ и проверка. Тем не менее асинхронные формализмы очень полезны для моделирования, проектирования и проверки распределенных систем, поскольку они по своей сути асинхронны.
Также контрастом являются системы с процессами, которые в основном взаимодействуют синхронно . Примером могут служить системы, основанные на модели коммуникационных последовательных процессов (CSP) , которая допускает детерминированный (внешний) и недетерминированный (внутренний) выбор.