Lustre (プログラミング言語)
Lustreは、リアクティブ システムをプログラミングするための、形式記述 宣言型 同期 データフロー プログラミング言語である。1980年代初頭に研究プロジェクトとして始まった。この言語の正式なプレゼンテーションは、IEEEの1991年予稿集で見つけることができる[1]。1993年エステレル・テクノロジーズが開発した商用製品SCADEにEsterelと統合され中核言語として採用された[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
関連項目
[編集]- Esterel
- SIGNAL (別のデータフロー指向同期言語)
- 同期プログラミング言語
- データフロープログラミング
出典
[編集]- ^ [1] N. Halbwachs et al. The Synchronous Data Flow Programming Language LUSTRE. In Proc. IEEE 1991 Vol. 79, No. 9. Accessed 17 March 2014.
- ^ “形式手法適用調査 調査概要資料”. IPA 独立行政法人 情報処理推進機構. 2022年6月24日閲覧。
- ^ a b “The Lustre Language Synchronous Programming”. 2022年6月24日閲覧。
外部リンク
[編集]- Synchrone Lab[リンク切れ] Official website
- SCADE product page
- The Lustre Programming Language and Related Tools - [Verimag]
- A TUTORIAL OF LUSTRE - [Verimag]