stringtranslate.com

Синхронный язык программирования

Синхронный язык программирования — это язык программирования, оптимизированный для программирования реактивных систем.

Компьютерные системы можно разделить на три основных класса:

  1. Трансформационные системы принимают некоторые входные данные, обрабатывают их, выдают выходные данные и завершают выполнение. Типичным примером является компилятор.
  2. Интерактивные системы непрерывно взаимодействуют со своей средой, на своей скорости. Типичным примером является веб.
  3. Реактивные системы непрерывно взаимодействуют со своей средой, со скоростью, навязанной средой. Типичным примером является автоматическая система управления полетом современных самолетов. Поэтому реактивные системы должны реагировать на стимулы из окружающей среды в строгих временных рамках. По этой причине их часто также называют системами реального времени , и они часто встречаются во встроенных системах .

Синхронное программирование , также называемое синхронным реактивным программированием ( SRP ), — это парадигма компьютерного программирования, поддерживаемая синхронными языками программирования. Принцип SRP заключается в создании той же абстракции для языков программирования, что и синхронная абстракция в цифровых схемах. Синхронные схемы действительно спроектированы на высоком уровне абстракции, где временные характеристики электронных транзисторов игнорируются. Поэтому предполагается, что каждый вентиль схемы (или, и, ...) вычисляет свой результат мгновенно, каждый провод предполагается, что передает свой сигнал мгновенно. Синхронная схема тактируется, и на каждом такте своих часов она мгновенно вычисляет свои выходные значения и новые значения своих ячеек памяти (защелок) из своих входных значений и текущих значений своих ячеек памяти. Другими словами, схема ведет себя так, как если бы электроны текли бесконечно быстро. Первые синхронные языки программирования были изобретены во Франции в 1980-х годах: Esterel , Lustre и SIGNAL . С тех пор появилось много других синхронных языков.

Синхронная абстракция значительно упрощает рассуждения о времени в синхронной программе благодаря понятию логических тиков : синхронная программа реагирует на свое окружение последовательностью тиков, а вычисления в пределах тика считаются мгновенными, т. е. как если бы процессор, выполняющий их, был бесконечно быстрым. Поэтому оператор "a||b" абстрагируется как пакет "ab", где "a" и "b" являются одновременными. Чтобы привести конкретный пример, оператор Esterel "'every 60 second emit minute" указывает, что сигнал "minute" точно синхронен с 60-м появлением сигнала "second". На более фундаментальном уровне синхронная абстракция устраняет недетерминизм, возникающий из-за чередования параллельных поведений. Это допускает детерминированную семантику, поэтому синхронные программы поддаются формальному анализу, проверке и сертифицированной генерации кода, а также могут использоваться в качестве формальных формализмов спецификации.

Напротив, в асинхронной модели вычислений на последовательном процессоре оператор "a||b" может быть реализован либо как "a;b", либо как "b;a". Это известно как недетерминизм на основе чередования. Недостатком асинхронной модели является то, что она по своей сути запрещает детерминированную семантику (например, условия гонки), что делает формальные рассуждения, такие как анализ и проверка, более сложными. Тем не менее, асинхронные формализмы очень полезны для моделирования, проектирования и проверки распределенных систем, поскольку они по своей сути асинхронны.

Также в противовес находятся системы с процессами, которые в основном взаимодействуют синхронно . Примером могут служить системы, основанные на модели коммуницирующих последовательных процессов (CSP) , которая допускает детерминированный (внешний) и недетерминированный (внутренний) выбор.

Синхронные языки

Смотрите также

Ссылки

  1. ^ Г. Берри и Г. Гонтье. Синхронный язык программирования ESTEREL: проектирование, семантика, реализация. Science of Computer Programming , 19(2), 1992.

Внешние ссылки