Does (guile) scheme have persistent data structures?

I miss persistent data structure from clojure.

I learned that there is no persistent data structure in guile scheme, yet.

Gauche scheme has persistent data structures described by R7RS large, but it doesn’t seem to integrate well with third party packages.

I also have to use guile scheme if I want to use gnu guix.

The langauge choice is driven by tools and ecosystems. The best language in the world without a use case is useless.

Andy Wingo implemented persistent vectors and hashes years ago, but they are unfortunately just sitting on his server and not in any released library or in Guile itself:

https://wingolog.org/pub/fector.scm

https://wingolog.org/pub/fash.scm

These are the best implementations I’m aware of. I wish they weren’t so hard to discover! I have suggested to Andy that he should just push this stuff to Guile itself.

The best thing that’s available in Guile right now are vlists and vhashes in (ice-9 vlist) but they are not very good.

1 Like

R7RS large has mappings SRFI for persistent/mutable hash map.

R7RS large doesn’t seem to have persistent vector.

R7RS large isn’t something you can actually use right now, certainly not in Guile anyway.

I don’t understand why R7RS large doesn’t focus on persistent data structures.

I used clojure, and persistent data structures made programming easy. It is the right way. Clojure also provided transient mutable data structures for constructing persistent data structures efficiently. Scheme should have persistent data structures and transient mutable data structures.