Jump to content
Wikipedia The Free Encyclopedia

Lustre (programming language)

From Wikipedia, the free encyclopedia
This is the current revision of this page, as edited by Gruffudd ap Llywelyn (talk | contribs) at 11:33, 20 August 2025 (Edge detection corrected ). The present address (URL) is a permanent link to this version.Revision as of 11:33, 20 August 2025 by Gruffudd ap Llywelyn (talk | contribs) (Edge detection corrected )
(diff) ← Previous revision | Latest revision (diff) | Newer revision → (diff)
Programming language
For the cluster filesystem, see Lustre (file system).
Lustre
Paradigms Dataflow, declarative, synchronous
First appeared1980s

Lustre is a formally defined, declarative, and synchronous dataflow programming language for programming reactive systems. It began as a research project in the early 1980s. A formal presentation of the language can be found in the 1991 Proceedings of the IEEE.[1] In 1993 it progressed to practical, industrial use in a commercial product as the core language of the industrial environment SCADE, developed by Esterel Technologies. It is now used for critical control software in aircraft,[2] helicopters, and nuclear power plants.

Structure of Lustre programs

[edit ]

A Lustre program is a series of node definitions, written as:

node foo(a : bool) returns (b : bool);
let
 b = not a;
tel

Where foo is the name of the node, a is the name of the single input of this node and b is the name of the single output. In this example the node foo returns the negation of its input a, which is the expected result.

Inner variables

[edit ]

Additional internal variables can be declared as follows:

node Nand(X,Y: bool) returns (Z: bool);
 var U: bool;
let
 U = X and Y;
 Z = not U;
tel

Note: The equations order doesn't matter, the order of lines U = X and Y; and Z = not U; doesn't change the result.

Special operators

[edit ]
pre p Returns the value of p in the previous cycle
p -> q Set p as the initial value of the expression q

Examples

[edit ]

Rising Edge detection

[edit ]
node RisingEdge (X : bool) returns (E : bool);
let
 E = X and not pre X;
tel

Falling Edge detection

[edit ]
node FallingEdge (X : bool) returns (E : bool);
let
 E = not X and pre X;
tel

See also

[edit ]

References

[edit ]
  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. ^ "SCADE Success Stories". Archived from the original on 30 January 2019. Retrieved 8 June 2013.
[edit ]

AltStyle によって変換されたページ (->オリジナル) /