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

Make Ghengin use an unrestricted monad #2

Open
alt-romes opened this issue Jun 24, 2023 · 0 comments
Open

Make Ghengin use an unrestricted monad #2

alt-romes opened this issue Jun 24, 2023 · 0 comments

Comments

@alt-romes
Copy link
Owner

alt-romes commented Jun 24, 2023

While I think it is a good decision for the core of the engine and the renderer implementations to use the linear IO monad to track resources, I don't think it was a good decision to have that in ghengin, the package bringing it all together with batteries included, for the user.

Instead, the Ghengin monad should wrap the renderer/core monad with UrT (thereby making it an unrestricted monad).
We'd ensure

  • The Core implementation and management of linear resources is correct by use of linear types, and brings sanity to the developers and engine developers relying directly on core
  • The batteries included ghengin does not enforce linearity everywhere on the users
    • Some functions might still require linear types, that's a good thing: even though not every single thing must be tracked linearly in the monadic binding, certain things might still require linearity
    • We can drop linear-apecs and all those hacks which are just plain wrong really.
    • We'll more clearly manage renderer resources whithin the renderer (and no longer in the apecs store, which was also not a great design decision)
    • I'm still unsure of how exactly to do this split between unrestricted/linear while keeping safety of resources. I think it will come down to exposing just the right amount of linear functions for the things that do need linearity, but I don't think it'll be easy
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

No branches or pull requests

1 participant