Lustre (プログラミング言語)
From Wikipedia, the free encyclopedia
パラダイム
データフロープログラミング、synchronous programming、宣言型プログラミング 
| パラダイム |
データフロープログラミング、synchronous programming、宣言型プログラミング |
|---|---|
| 登場時期 | |
Lustreは、リアクティブ システムをプログラミングするための、形式記述 宣言型 同期 データフロー プログラミング言語である。1980年代初頭に研究プロジェクトとして始まった。この言語の正式なプレゼンテーションは、IEEEの1991年予稿集で見つけることができる[1]。1993年エステレル・テクノロジーズが開発した商用製品SCADEにEsterelと統合され中核言語として採用された[2]。現在では航空機、ヘリコプター、原子力発電所のクリティカルな制御ソフトウェアに使用されている。
内部変数
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