Programs written in the synchronous programming language Esterel may contain statically cyclic dependencies of signals, which inhibits the application of certain compilation approaches that rely on static scheduling. This presentation proposes several alternative methods for handling such cycles in an efficient manner.
The first approach evaluates cyclic dependencies at runtime using dynamic scheduling, which is compiler specific and relatively inefficient. The second approach is to partially evaluate the cyclic dependencies at compile time, and to generate code in which the cyclic dependencies are resolved. This promises to be more efficient, however, it still is compiler specific. The third approach is again based on partial evaluation, but instead of performing it as a synthesis step, it breaks the cycles at the source code level, as part of a preprocessor which rewrites the cyclic dependent parts of the program into acyclic ones. This allows the subsequent use of a compiler that cannot handle (true or false) cycles; the same approach could be used for other synchronous languages as well.