On Mon, 15 Jul 2019, at 23:19, John Cowan wrote: > > > On Mon, Jul 15, 2019 at 4:50 PM Linus Björnstam > <linus.inter...@fastmail.se> wrote: > > > If it is HAMTs or persistent vectors you want, I have a git repo of Andy's > > Fash and Fector (functional hashmaps and functional.vectors). Fash lacks > > some parts to become a fast implementation of (srfi 146 hash), > > Is there a speed problem with the sample implementation of (srfi 146 > hash)? It's a HAMT package written by Art Gleckler.
I didn't mean to sound like I was criticizing Arthur's implementation. What I meant was that fash currently lacks a fast way to delete keys. I could add a <fash-null> value and set a deleted value to that, but I would like to do it properly. Fash and Fector also does some things differently from the other HAMTs/pvectors I tried (note I did not try the reference implementation) that runs fast in guile. > Note that fectors are a bit specialized: they are very fast for both > ref and set if you don't change the "current branch" very often, but > slower if you do. Ordinary tree functional vectors have the same big-O > no matter what. There will be a fector SRFI. Compared to Bagwell's VLists pvectors/fectors are generally slower, but adds the ability to set arbitrary values. I have been playing with the idea to create a fast, thread safe VList library with support for transients as I suspect it would be a slightly less capable, but much faster, alternative to fectors. Andy's fectors are actually faster than guiles VLists for everything except random access, but making the VLists support transients (and a way to iterate without using indexes) would change that.