im-rs
im-lists
im-rs | im-lists | |
---|---|---|
6 | 1 | |
1,459 | 2 | |
- | - | |
0.0 | 5.1 | |
over 1 year ago | about 1 month ago | |
Rust | Rust | |
Mozilla Public License 2.0 | Apache License 2.0 |
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
im-lists
-
Steel – An embedded scheme interpreter in Rust
To answer each of these:
1. I do support parameters now, syntax parameters not yet. I would like to! But Racket has a pretty hefty head start on me so it'll take some time.
2. Right now I have syntax-rules macros, I also have defmacro style macros that get used internally in the kernel during expansion, but haven't yet opened them up for user space yet. Syntax case will be coming soon hopefully.
3. The odds of me being able to come up with an implementation to match typed racket pound for pound is pretty low. I have toyed with using contracts as types (where possible), with medium/promising success in certain situations. I have a soft spot for racket and have been modeling behavior after it, however it will take time to be able to create a macro system powerful enough to match it. It wouldn't be impossible to create an alternative syntax to just lower to steel after type checking, but I haven't put time into that.
On the list type - the list in use currently is an unrolled linked list https://github.com/mattwparas/im-lists, which I've found to yield much better performance for iteration than the naive linked lists. When possible, the vm does some in place mutation on the lists as well when consing, which helps performance as well. I also can hot swap for a vlist, but at the moment have stuck with unrolled linked lists.
What are some alternatives?
dashmap - Blazing fast concurrent HashMap for Rust.
rune - An embeddable dynamic programming language for Rust.
syncbuf - A small library of append-only, thread-safe, lock-free data structures.
embedded-scripting-languages - A list of embedded scripting languages
concurrent - A crate with some concurrent data structures.
glsp - The GameLisp scripting language
crossbeam - Tools for concurrent programming in Rust
steel - An embedded scheme interpreter in Rust
samsara - a reference-counting cycle collection library in rust
helix - A post-modern modal text editor.