moor
fastglobal
Our great sponsors
moor | fastglobal | |
---|---|---|
7 | 2 | |
149 | 1,126 | |
- | 0.0% | |
9.7 | 0.0 | |
about 1 month ago | about 1 year ago | |
Rust | Elixir | |
GNU General Public License v3.0 only | MIT License |
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.
moor
-
Gleam
I think Haskell or OCaml would do a better job on the ADTs for a parse tree. When doing this, I found Rust's enums... anemic... and got very annoyed by the awkwardness of having to Box recursive types. I was reaching for the ability to continue to be able to pattern match on nodes while attaching common attributes (line numbers, etc.) and ended up having to bury everything 1 level deep in a struct which ended up feeling awkward.
That and Rust's iterators are terrible at introducing ownership agony.
In any case, I've ... done it (https://github.com/rdaum/moor/blob/main/crates/compiler/src/...) but can't say I liked it.
I do really like "pest" as a parser generator though.
- Show HN: I rewrote the 1990's LambdaMOO server from scratch
-
I rewrote 1990's LambdaMOO from scratch on a new foundation.. with the intent of a new system for tomorrow...
See: https://github.com/rdaum/moor
- Evennia a MUD/Mu* Creation System
-
LambdaMOO Takes a New Direction (1992)
I've been working on a rewrite of the server into Rust, for kicks: https://github.com/rdaum/moor
Unfortunately still lots of work there to be done, and I have no time.
fastglobal
-
Show HN: I rewrote the 1990's LambdaMOO server from scratch
> State has to be owned by a process - who owns the state of the world? ... Keep in mind, when data is passed "between" processes it is deep copied.
The Erlang runtime has other stateful things besides processes, and manipulating data within these and/or getting a handle on data in these places doesn't necessarily involve copying.
• ETS tables, which hold state privately to themselves (with copying in/out) in a similar way to how processes do. If you manipulate data inside ETS tables by "sending compute to data" (think Redis INCR) rather than by "sending data to compute", then no copying happens.
• "Globals" in the form of data compiled into read-only versioned modules loaded into the modules table and available to be referenced from any/all active processes, only copied if the module gets unloaded before the process dies. (Originally this was just a design pattern — https://github.com/discord/fastglobal — but it eventually became its own runtime feature in Erlang 22, https://www.erlang.org/doc/man/persistent_term).
• Large binaries (anything over 64 bytes) aren't allocated in an actor's memory arena, but instead are allocated in a special global-per-node binaries heap, and then ref-counted, where each actor-process holds one reference to each large-binary it's using, and then each read-only slice of that binary, in turn holds a reference to the per-actor reference handle for the binary. One clever technique for sharing a large "database" of data between many actors, is to store the data encoded in a large binary in an encoding that is efficient to partwise-decode; and have the "lookup" operation just parse+decode the appropriate data out of the binary. (This is how erlang:module_info/2 used to work — the global modules-table itself holding a set of references to the loaded modules' binaries, which module_info would then parse metadata out of on demand.)
- Issue
What are some alternatives?
floor - The typesafe, reactive, and lightweight SQLite abstraction for your Flutter applications
mudmixer - MUDMixer is an add-on for MUD clients that enriches the gaming experience with connection mixing functionality and a variety of other features.
Hive - Lightweight and blazing fast key-value database written in pure Dart.
mica
tinyfugue - TinyFugue - Rebirth
wireguardex - Configure WireGuard® interfaces in Elixir using Rust NIFs.
nmoo - An enhanced LambdaMOO-like MOO
gleam-otp-design-principals - Gleam OTP Design Principles User's Guide
ex_hash_ring - A fast consistent hash ring implementation in Elixir.
mobx.dart - MobX for the Dart language. Hassle-free, reactive state-management for your Dart and Flutter apps.