Lustre (プログラミング言語)

Lustreは、リアクティブ システムをプログラミングするための、形式記述 宣言型 データフロー プログラミング言語である。1980年代初頭に研究プロジェクトとして始まった。この言語の正式なプレゼンテーションは、IEEEの1991年予稿集で見つけることができる。1993年エステレル・テクノロジーズが開発した商用製品SCADEにEsterelと統合され中核言語として採用された。現在では航空機、ヘリコプター、原子力発電所のクリティカルな制御ソフトウェアに使用されている。
Lustreのプログラム構造.
Lustre プログラムは、次のように"node"で定義される文で記述される。
 node foo(a : bool) returns (b : bool);
 let
 b = not a;
 tel
ここで、codice_1はノードの名前、codice_2はこのノードの単一入力の名前、codice_3 は単一出力の名前になる。
この例では、ノードcodice_1は入力codice_2の否定を返し、これが期待された結果となる。
内部変数.
追加の内部変数は、次のように宣言できる。
 node Nand(X,Y: bool) returns (Z: bool);
 var U: bool;
 let
 U = X and Y;
 Z = not U;
 tel
注: 式の順序は重要ではなく、codice_6 と codice_7の順序で、結果は変わらない。
演算子.
通常の変数型はブール値、整数型、実数型、タプル型がある。
プログラム例.
エッジ検出.
 node Edge (X : bool) returns (E : bool);
 let
 E = false -> X and not pre X;
 tel