Esterel: a Synchronous Reactive Programming Language