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

プログラミング言語

Lustreは、リアクティブ システムをプログラミングするための、形式記述 宣言型 同期英語版 データフロー プログラミング言語である。1980年代初頭に研究プロジェクトとして始まった。この言語の正式なプレゼンテーションは、IEEEの1991年予稿集で見つけることができる[1]。1993年エステレル・テクノロジーズが開発した商用製品SCADEEsterelと統合され中核言語として採用された[2]。現在では航空機、ヘリコプター、原子力発電所のクリティカルな制御ソフトウェアに使用されている。

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は存在しない[3]
current(X when c) 間欠した変数を共通クロックにあわせて投影する[3]

プログラム例 編集

エッジ検出 編集

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

関連項目 編集

出典 編集

  1. ^ [1] N. Halbwachs et al. The Synchronous Data Flow Programming Language LUSTRE. In Proc. IEEE 1991 Vol. 79, No. 9. Accessed 17 March 2014.
  2. ^ 形式手法適用調査 調査概要資料”. IPA 独立行政法人 情報処理推進機構. 2022年6月24日閲覧。
  3. ^ a b The Lustre Language Synchronous Programming”. 2022年6月24日閲覧。

外部リンク 編集