Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Implement DeferPolicy.lf. #25

Draft
wants to merge 1 commit into
base: main
Choose a base branch
from
Draft

Implement DeferPolicy.lf. #25

wants to merge 1 commit into from

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.

2 participants