Skip to content

Conversation

@petervdonovan
Copy link
Contributor

This example program is intended to support an argument I made many months ago that we should implement the simplest possible policy for resolving conflicts between events, with the expectation that more complicated policies can be implemented in library reactors if they are needed.

The problem of conflicting writes to the same port at the same logical time has been compared with the problem of conflicting events scheduled in logical actions. Although ports and logical actions have different implementations, I regard them as "basically the same thing" in the sense that they are nodes in the reaction graph that can be active or inactive, and that thereby determine the activity of reactions that they trigger.

I have argued to uniform use of a simple "overwrite" policy for both situations. In this example, the alternative "defer" policy is implemented inside of a reactor. The example runs correctly using a recent version of the LF compiler.

Copy link
Contributor

@edwardalee edwardalee left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think this can be done without a type-specific buffer in a way that would make it easy to make it type-agnostic when we support generics. Specifically, you just need a state variable that keeps track of the microstep at which a deferred input should appear on the output. You can then use the (currently internal) schedule function that specifies a microstep (this is used in federated programs).

@petervdonovan petervdonovan marked this pull request as draft March 18, 2023 17:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants