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

Lustreは、リアクティブ システムをプログラミングするための、形式記述 宣言型  データフロー プログラミング言語である。1980年代初頭に研究プロジェクトとして始まった。この言語の正式なプレゼンテーションは、IEEEの1991年予稿集で見つけることができる N. Halbwachs et al. The Synchronous Data Flow Programming Language LUSTRE. In Proc. IEEE 1991 Vol. 79, No. 9. Accessed 17 March 2014.。1993年エステレル・テクノロジーズが開発した商用製品SCADEにEsterelと統合され中核言語として採用された。現在では航空機、ヘリコプター、原子力発電所のクリティカルな制御ソフトウェアに使用されている。

 Lustreのプログラム構造 
Lustre プログラムは、次のようにnodeで定義される文で記述される。

 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;の順序で、結果は変わらない。

演算子
通常の変数型はブール値、整数型、実数型、タプル型がある。
算術演算子: + - * / div mod
論理演算子: and or not
比較演算子: == < <= > >=
条件付きアクション: if then else

特殊演算子
 pre p  以前のpの値を返す p -> q  式qの初期値として pを設定する X when c  c=trueのときのXをサンプリングする。c=falseのときX when cは存在しない current(X when c)  間欠した変数を共通クロックにあわせて投影する

 プログラム例 

エッジ検出
 node Edge (X : bool) returns (E : bool);
 let
   E = false -> X and not pre X;
 tel

 関連項目 
Esterel
SIGNAL (別のデータフロー指向同期言語)
同期プログラミング言語
データフロープログラミング

 出典 

外部リンク
Synchrone Lab Official website 
SCADE product page
The Lustre Programming Language and Related Tools - [Verimag]
A TUTORIAL OF LUSTRE - [Verimag]

Category:形式手法
Category:宣言型プログラミング
Category:同期プログラミング言語
Category:ハードウェア記述言語
Category:モデリング言語