Draft
Conversation
edwardalee
requested changes
Mar 18, 2023
Contributor
edwardalee
left a comment
There was a problem hiding this comment.
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).
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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.