| Lustre | |
|---|---|
| Paradigms | Dataflow,declarative,synchronous |
| First appeared | 1980s |
Lustre is aformally defined,declarative, andsynchronousdataflow 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 environmentSCADE, developed byEsterel Technologies. It is now used for critical control software inaircraft,[2]helicopters, andnuclear power plants.
A Lustre program is a series ofnode definitions, written as:
node foo(a : bool) returns (b : bool);let b = not a;tel
Wherefoo is the name of the node,a is the name of the single input of this node andb is the name of the single output.In this example the nodefoo returns the negation of its inputa, which is the expected result.
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 linesU = X and Y; andZ = not U; doesn't change the result.
prep | Returns the value ofp in the previous cycle |
p->q | Setp as the initial value of the expressionq |
node RisingEdge (X : bool) returns (E : bool);let E = X and not pre X;tel
node FallingEdge (X : bool) returns (E : bool);let E = not X and pre X;tel