Currently, the validator throws a warning when it sees a reaction without triggers.
While we never really pinned down the semantics of reactions without triggers, we entertained the idea of this to mean that when any trigger within scope of the reaction was present, the reaction would execute. With the introduction of hierarchical triggers (i.e., outputs of contained reactors), this scope has become even wider. I don't believe that any of the targets implements this idea correctly. The C target currently implements it incorrectly. The Rust target doesn't implement it at all.
For simplicity, it's probably better if we bury this "feature" and verify that all targets implement the same behavior. We would simply have to:
[ ] turn the "no triggers" warning in the validator into an error; and
[ ] update code generators that synthesize a list of triggers for reactions that have none (the C generator does this).
Currently, the validator throws a warning when it sees a reaction without triggers.
While we never really pinned down the semantics of reactions without triggers, we entertained the idea of this to mean that when any trigger within scope of the reaction was present, the reaction would execute. With the introduction of hierarchical triggers (i.e., outputs of contained reactors), this scope has become even wider. I don't believe that any of the targets implements this idea correctly. The C target currently implements it incorrectly. The Rust target doesn't implement it at all.
For simplicity, it's probably better if we bury this "feature" and verify that all targets implement the same behavior. We would simply have to: