# TODO - CollectionsM: complete the subset of MapM and uncomment/complete CollectionM. - See if needGC hack can be improved. It seems its eating CPU time. - First RBR test: 1/3 running time when using MapL (via Map2). Not sure if the results are correct (they seem to be). Check with Ketil about usage of Map2, if its enough. - Names names names - HashIO is too similar to Hash. Stringable is strange and not totally true, maybe CStringable? - Other missing malloc error checking - Tests that stress MiniGC (w/ two maps at same time would be nice too) - Check how GHC do interning - Check how's sparse array implementation of Parrot. # "CRAZY" BUGS (X means "solved") X Dummy/Refeable Bug: need to ask in #haskell and reply Simon's email. It dissapeared recently. Dunno the reason. X Bug on HSIter stuff when use a lot of memory. X Finalizer may be not working right => test with sequencing a lot of operations causes error in GHC runtime. (seems to be fixed by having ONLY ONE gc for everyone) # NEXT - Data.HashTable - http://shootout.alioth.debian.org/gp4/benchmark.php?test=knucleotide&lang=all Did a little naive test, but need to compare with other implementations. It's worst than hawiki Ketil entry, but better than one of three Haskell entries on the page (are they updated?). - Implementations specific to unboxed values like Int and Double: Int seems to be ok now, but Double and other unboxable still need to check - Discuss APIs -- Unbounded arrays: see Bulat work on this. - Refeable vs. HashIO => unify? - Better testing / More test programs - Document this work. - Create a LICENSE file (I think BSD3) and put license info in the necessary files. Mention that John Meacham as original author (how?). - Find something other than WordPtr (ghc 6.5) that works in GHC 6.4.x? need to have conversion from/to Ptr and from/to Enum to work right (not really sure about). # THINGS TO CONSIDER nice mail from Bulat: http://www.haskell.org/pipermail/haskell-cafe/2006-May/015915.html ## API SUGGESTIONS Bulat: "Judy implements _mutable_ array/map/set, so closest interfaces for your lib will be MArray and HashTable. DiffArray is a general way to make IArray (interface) on the base of MArray (interface), that is usable with any datastructure implementing MArray interface" ## STABLEPTR POSSIBLE OVERHEAD StablePtr is used to store references of Haskell objects in external datastructures. Maybe GHC isn't very efficient dealing with a lot of StablePtrs, if that's true three obvious ways are: - GHC 6.5/6 is better at this. - Turn GHC better at this (wow!). - Find another way to do it (without StablePtr). ## REEVALUATE BENEFITS? > all Haskell software that uses common data structures like Maps and > Arrays would benefit from a faster implementation Bulat says "sorry, i don't think so. especially for Arrays ;)" Judy is useful for applications for (very-)sparse Arrays, which is Pugs' case.