adamhaile / S

S.js - Simple, Clean, Fast Reactive Programming in Javascript
MIT License
1.31k stars 67 forks source link

Are subclocks generally available? #20

Closed mrjjwright closed 5 years ago

mrjjwright commented 5 years ago

Is anybody using subclocks in production? Are they considered ok and bug free enough to use? If so, can anybody explain a use case in which they are using them?

ryansolid commented 5 years ago

To me the clear benefit of subclocks is being able to represent data in a more succinct and declarative manner. You build the rules in a much more universal way. You can still for the most part solve the same problem a different more specific and verbose way (like setting values to their rest state).

I'm actually interested by this question. I've been using fine grained libraries, like S(but not S), in production for the better part of the a decade but since in most libraries subclock scenarios are so detrimental to performance I just don't think about solving issues that way. So I'm interested in any concrete use cases.

EDIT: I think this is more for synchronicity than anything. Subclocks ensure consistency where just setting a value doesn't.

mrjjwright commented 5 years ago

Are subclocks available in mobx? Does mobx just use one clock? Can you give me a simple example of where subclocks make things more declarative?

ryansolid commented 5 years ago

I'm not aware of anything like this in MobX, but I'm not a MobX expert.

As for declarative look at the example in the readme. By declarative I mean indicative of intent, since subclocks in this example are actually quite iterative. You get to write that the computation works a certain way to set only if value is 10 or less. You don't care anymore how it gets to 10, just that it will end up there. Now in a real scenario I'm sure the computation would be more complicated than tracking over the single value. What I'm saying is if you wanted to avoid a computation like that you'd need to basically only apply the stable state (in this case set it directly to 11) and mirror any other work the computation would have done. This might require specific scenarios to be considered where as the rule might just be simpler.

Re-reading the readme the intent though is more about synchronicity to ensure outside all reactions are seeing the same data. I'm used to thinking of libraries like this being event/subscription orientated, but the goal of S is more about correctness and synchronicity. So there are probably a slew of actual scenarios where this is relevant.

mrjjwright commented 5 years ago

Thanks Ryan! I think I am facing an issue now where they might be useful.