odoyle-rules
pararules
odoyle-rules | pararules | |
---|---|---|
10 | 1 | |
517 | 135 | |
- | 0.7% | |
6.2 | 3.0 | |
7 months ago | 7 months ago | |
Clojure | Nim | |
The Unlicense | The Unlicense |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
odoyle-rules
-
Use of Posh for frontend development?
If you're going down this route I'd second the recommendation for O'Doyle Rules. (Haven't used it since I switched away from SPAs altogether, but when I was investigating stuff in that space, O'Doyle appeared to be taking the "correct approach" from what I could tell.)
-
[Blog] The Web Before Teatime
That's what this tiny library does https://github.com/oakes/odoyle-rules
- [ANN] odoyle-rules 1.0.0
-
Ideas for DataScript 2
Reactive updates is the big one, in my opinion. DataScript is a triumph and arguably is the reason why so many note-taking tools (Roam, Athens, Logseq, etc) are written in Clojure. But there are so many cases where it would be nice to react when some set of entities is changed.
I think what we need is to figure out how to combine DataScript with a rules engine. I'm wrote a rules engine and made a writeup that compares the two together: "Using O'Doyle Rules as a poor man's DataScript" https://github.com/oakes/odoyle-rules/blob/master/bench-src/...
Subscribing to individual entities is nice but with a rules engine you have so much more fine-grained control over your reactions. And with the RETE algorithm this can be done efficiently. Most libraries in this space just ignore it and make their own ad-hoc solution -- an informally-specified, bug-ridden, slow implementation of half of a rules engine.
- UIs Are Streaming Dags
-
Datalog for HTTP APIs
Odoyle-rules lets you write rules (forwards chaining) engine that you can run on client and server. There are a couple ways you can twist that idea to achieve a more unified system.
-
Next Web
I suspect it'd be too much of a mismatch to be useful, but i haven't thought about it enough. I think a more promising idea is to try implementing a database with o'doyle. I wrote about my first attempt here: Using O'Doyle Rules as a poor man's DataScript Right now it would be too inefficient for large data sets because it has to constantly rebuild its index but i think with some small changes i could improve that and basically turn o'doyle into a tool for creating databases that come with reactivity for free.
-
O'Doyle Rules - a Clojure rules engine for the best of us
No doubt there's a runtime cost in joining the facts together, so naturally a system that lumps facts together into records (like clara) will have to do fewer joins, and should be faster. I figured out that i could at least deduplicate my joins with derived facts as i explained here, which ended up being a really big perf boost. But there's still a tradeoff, and one where almost everyone should favor flexibility, i think.
pararules
-
O'Doyle Rules - a Clojure rules engine for the best of us
The algorithm is the same but yes it's mutable. Maybe the most interesting difference that affects performance is that in nim i can generate a special stack-allocated type to store your matches internally. It is a sum type, which nim calls an object variant, that has a "branch" for each rule. Unsurprisingly this was a huge perf improvement over using hash tables. Generating types with a macro is some wild stuff :D
What are some alternatives?
paranim_examples
odoyle-rum-todo
asami - A flexible graph store, written in Clojure
posh - A luxuriously simple and powerful way to make front-ends with DataScript and Reagent in Clojure.
spork - Spoon's Operations Research Kit
missionary - A functional effect and streaming system for Clojure/Script
relic - Functional relational programming for Clojure(Script).
re-posh - Use your re-frame with DataScript as a data storage
electric - a reactive Clojure dialect for web development that uses a compiler to manage the frontend/backend boundary
dom-expressions - A Fine-Grained Runtime for Performant DOM Rendering
Clara - A simple to use, composable, command line parser for C++ 11 and beyond