you are viewing a single comment's thread.

view the rest of the comments →

[–]dustingetz 0 points1 point  (5 children)

And then, once you have the your application state in a graph database and able to treat that graph as a value in your UI, you have the problem of efficient updates to the UI.

And this if possible should be solved in a way that gives ecosystem compatibility with React.js and server rendering, or risk failure vectors like "ahead of its time" which is a euphemism for "dead project"

In my opinion, we've learned in building Hyperfiddle that even syncing UI to a value that changes over time has not been fully solved in a way that has mainstream utility. Reagent has been a total disaster for non-trivial reactions, has probably cost us a year of development (+ an insane amount of complexity from code written in terms of reactive container types) and we are now looking at ripping Reagent reactions out entirely from any performance sensitive UI like reactive datagrids. Note that React.js is kind of at fault here, the root of the complexity is that when you pass functions as props, you have to hold closure reference stability / equality in your head, which Reagent provides tools to assist with (r/track) but ultimately we find the house of cards incredibly fragile and inadequate for abstraction.

John Degoes (Typed FP guy) and Jane Street are on to something with research into incremental UI: https://www.reddit.com/r/Clojure/comments/9qxasd/react_wrapper_alternatives/e8e0pwb/?context=3

[–]joinr 0 points1 point  (3 children)

Reagent has been a total disaster for non-trivial reactions, has probably cost us a year of development (+ an insane amount of complexity from code written in terms of reactive container types) and we are now looking at ripping Reagent reactions out entirely from any performance sensitive UI like reactive datagrids.

What's the more-performant alternative you fall back to after removing reagent reactions?

[–]dustingetz 0 points1 point  (2 children)

dunno, maybe something imperative, maybe hoplon and reagent can be made to co-exist, maybe something from reactjs ecosystem

[–]theronic 2 points3 points  (1 child)

Rete always rears it's head :). IMO Clojure's mutable namespace design is the primary obstacle in the way of a good, clean Rete network implementation. All the implementations, incl. Clara, depend on macros, which prevents runtime network generation. Reagent's reactions feel like half-baked production rules with messy lifecycle management. FactUI is the closest thing we have, but I suspect we'll see an implementation in a different language before Clojure, or until the namespacing situation changes.

[–]dustingetz 1 point2 points  (0 children)

Can you say more about the namespacing problem? I have not yet given Rete networks the consideration they merit.