Lustre (мова програмування)

Lustre — це формально визначена, декларативна та синхронна мова програмування потоків даних для програмування реактивних систем. Вона почалася, як дослідницький проєкт на початку 1980-х років. Формальну презентацію мови можна знайти в Proceedings of the IEEE за 1991 рік. У 1993 році мову впровадили в практичне, промислове використання як основну мову промислового середовища SCADE, розробленого Esterel Technologies. Зараз вона використовується для програмного забезпечення критично важливих систем керування на повітряних суднах[1]. вертольотах і атомних електростанціях.

Структура програм Lustre

Програма Lustre - це серія визначень вузлів, записаних у вигляді:

node foo(a : bool) returns (b : bool);
let
  b = not a;
tel

Де foo — це ім’я вузла, a — ім’я єдиного входу цього вузла, а b — ім’я єдиного виходу. У цьому прикладі, вузол foo повертає заперечення свого входу a, що є очікуваним результатом.

Внутрішні змінні

Додаткові внутрішні змінні можуть бути оголошені наступним чином:

node Nand(X,Y: bool) returns (Z: bool);
  var U: bool;
let
  U = X and Y;
  Z = not U;
tel

Примітка: Порядок рівнянь не має значення, порядок рядків U = X and Y; і Z = not U; не змінює результат.

Спеціальні оператори

pre p Повертає попереднє значення p.
p -> q Встановити p як початкове значення виразу q.

Приклади

Виявлення контурів

node Edge (X : bool) returns (E : bool);
let
  E = false -> X and not pre X;
tel

Див. також

  • Esterel
  • SIGNAL (інша синхронна мова, орієнтована на потоках даних)

Примітки

  1. SCADE Success Stories. Процитовано 8 червня 2013 року.

Зовнішні посилання