-
-
Notifications
You must be signed in to change notification settings - Fork 103
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
Repo refactors for Fusion #40
Comments
I see two approaches: Inward-outFusion is required by plugins.
This seems rather clunky, unsafe, and doesn't really amount to anything more than deciding on a known location for plugins. Outward-inPlugins are required by Fusion.
By having Fusion faciliate plugin loading, some interesting things can be done.
|
I would love a more extensible Fusion, where more functionality can be added on top as needed.
That rough idea seems like a reasonable approach to me. What I found to be lacking the most when making utilities and helpers for writing Fusion code has definitely been a public API for core functionality.
Making changes that affect this still seems fine to do since the only release so far has been an experimental beta; everyone should expect things to change, even at the most basic level.
I personally would not be a fan of lazy loading and loose coupling in the context of this library. Especially in Roblox, it tends to give a far worse developer experience, with intellisense completely disappearing + there would be an added need to learn how a custom loader works and what quirks it would have. Arguably, intellisense and similar issues are things that could improve later on, but that would be dependent on Roblox/ a custom LSP and making it extensible enough 😕 Lazy loading definitely has its place, and can be great for a generic library loader / require() replacement if that is something you like, but having it within a library that is focused on solving other kinds of problems is not something I agree with. |
This is a good point for consideration - we definitely don't want to break intellisense. Thanks for bringing it up! |
Deferring to v0.3 |
So I've been ruminating on this ever since I kicked this particular can down the v0.3 road. I think the right move is probably to keep it simple. Instead of defining a fancy plugin system or loader system, it's perhaps just best to specify that Fusion modules are merely parented under the same instance or directory. This would probably mean people will have to require multiple different libraries to access e.g. Roblox specific extensions, but also it's probably not worth pursuing anything clever. I'd also like to further clarify what exactly is the boundary of the Fusion project because it's never really been well defined. What is the scope of Fusion? Perhaps Fusion should encompass every common use case for the reactive graph tech at its core, regardless of whether it's used for UI, or backend game logic, or motion design.... This'll probably happen once v0.3 is feature complete so it doesn't cause a bunch of extra work in other branches and PRs. I'm going to pull in some other suggestions from elsewhere, and take the opportunity to roll in the switch to non-Roblox Luau + Darklua for Roblox transcription, as well as the luau file extension change that was also proposed. Easier to do it all at once this way. I hope that this could also lead to a better CI/testing situation since we won't have to rely on hacks to get Roblox to cooperate with us and run our code in Actions. |
I'll take the opportunity to update the style guide too, since it's been decaying for years. Here's a draft of what I'm working on: Hopefully it's more concise and easier to understand. |
We're ready to go ahead with this for next update. There's some other motivating forces at play now - there's more desire for external libraries to augment and replace parts of Fusion now, so we'd do well to accommodate them. We've also done well to cut down on fully qualified use of Fusion thanks to how scopes allow method imports in more central locations. Most code files need not import most of Fusion. |
I've heard some people here express concerns about namespace pollution, particularly when talking about Fusion providing utilities that some projects may want to keep a custom implementation of.
One of my visions for how Fusion would work is that it'd be largely complete out of the box, providing everything you need for building most kinds of UI. This would remove the need to search for, choose and download a bunch of libraries just to get started, and help make different Fusion projects more consistent and understandable by sharing a lot of widely used and understood APIs.
I acknowledge however this may have some side effects that could be undesirable:
In addition, the extension story for Fusion is rather unclear:
Given these points, it might be worth moving Fusion to a more modular design. Here's a rough idea of how that could work:
Is this worth pursuing?
The text was updated successfully, but these errors were encountered: