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. 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, helicopters, and nuclear power plants.
Structure of Lustre programs
A Lustre program is a series of node definitions, written as:
node foo(a : bool) returns (b : bool); let b = not a; telWhere 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
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; telNote: 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
pre p | Returns the previous value of p |
p -> q | Set p as the initial value of the expression q |
Examples
Edge detection
node Edge (X : bool) returns (E : bool); let E = false -> X and not pre X; telSee also
External links
- Synchrone Lab Archived 2020-11-25 at the Wayback Machine Official website
- SCADE product page
References
[1] N. Halbwachs et al. The Synchronous Data Flow Programming Language LUSTRE. In Proc. IEEE 1991 Vol. 79, No. 9. Accessed 17 March 2014. https://citeseerx.ist.psu.edu/document?repid=rep1&type=pdf&doi=cd14bffcea4165b8bda586a79c328267099f70d6 ↩
"SCADE Success Stories". Archived from the original on 30 January 2019. Retrieved 8 June 2013. https://web.archive.org/web/20190130201836/http://www.esterel-technologies.com/success-stories/ ↩