im-rs
dashmap
im-rs | dashmap | |
---|---|---|
6 | 12 | |
1,459 | 2,731 | |
- | - | |
0.0 | 5.1 | |
over 1 year ago | 17 days ago | |
Rust | Rust | |
Mozilla Public License 2.0 | 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.
im-rs
-
Steel – An embedded scheme interpreter in Rust
They're using hash array mapped tries. I don't have my own personal implementation, I have been using https://github.com/bodil/im-rs until I can get around to making my own implementation (not that I really need to, but it would be a fun exercise).
Functions generate a hash based on a unique id generated for the function, plus the hash of any captured variables, and a hash of the pointer address to the function). That is off the top of my head though so I could be missing some details.
Hashing maps is tricky! With a sufficiently deep hash map you can run into problems since that invokes an equality check as well - at least how I handle it, is that you just attempt to naively hash the keys and values of the hash map, to create a hash code for that object. If the equality check ends up with a sufficiently large depth, eq returns false so we don't stack overflow.
-
for_ch: The hydraulic machine for your code
Too late my friend ;) https://github.com/bodil/im-rs
- (Risp (In (Rust) (Lisp)))
-
Noteworthy concurrent data structures?
There’s also im.
-
Providing a thread safe and non thread safe version of a library.
rc/Cargo.toml specifies paths such as ../src/lib.rs and ../build.rs to point at the same source files
-
High performance functional data structures in Rust
If you indeed do care about access to historical versions of data, take a look at the I’m crate: https://github.com/bodil/im-rs
dashmap
- StupidAlloc: what if memory allocation was bad actually
-
dashmap VS scalable-concurrent-containers - a user suggested alternative
2 projects | 13 Apr 2023
-
Samsara, a safe Rust concurrent cycle collector
The problem is, every single one of these half-dozen crates has at least one known major issue (including UAF), exactly like C++ implementations (which isn't surprising since it's the kind of things where the ownership isn't clear and then the borrow checker can't help us).
-
Rust vs Go
Deadlocks and leaks are easy as other languages.
-
Shared mutable state is bad... so how do I create a global cache in a multi-threaded app?
Have you considered https://github.com/xacrimon/dashmap ?
-
Announcing Leapfrog, a faster concurrent HashMap
Dashmap made some api changes compared to the stdlibs hashmap, which leads to some oddities, as highlighted here: https://github.com/xacrimon/dashmap/issues/175
-
Writing a concurrent LRU cache
Some additional notes are in this slide deck and the implementation javadoc. You'd probably want to use something like DashMap for the hash table.
-
HashMap-based cache for async programs
You can look at existing concurrent maps like Dashmap https://github.com/xacrimon/dashmap or Cashmap https://gitlab.redox-os.org/redox-os/chashmap
-
How does one avoid lock of locks? or use the technique of latch crabbing of databases
Also dashmap
-
Noteworthy concurrent data structures?
The only one I've used is Dashmap, it's a concurrent interior-mutability hashmap. Very convenient crate in the case you need that.
What are some alternatives?
syncbuf - A small library of append-only, thread-safe, lock-free data structures.
hashbrown - Rust port of Google's SwissTable hash map
concurrent - A crate with some concurrent data structures.
moka - A high performance concurrent caching library for Rust
im-lists - Immutable unrolled linked lists
HashMap - An open addressing linear probing hash table, tuned for delete heavy workloads
glsp - The GameLisp scripting language
crossbeam - Tools for concurrent programming in Rust
leapfrog - Lock-free concurrent and single-threaded hash map implementations using Leapfrog probing. Currently the highest performance concurrent HashMap in Rust for certain use cases.
steel - An embedded scheme interpreter in Rust
megahash - A super-fast C++ hash table with Node.js wrapper, tested up to 1 billion keys.