summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2025-08-19Add another case to the tests for slset<=Peter Bex
Not essential, and the code already handled this.
2025-08-19Tag initial releasePeter Bex
2025-08-19Add type annotations to ensure inlining of put! and get in C50.1Peter Bex
Without these, we are doomed to have CPS calls to those procedures.
2025-08-19Use singular "slset" instead of plural "slsets"Peter Bex
2025-08-18Allow with-reified-slset to return values as wellPeter Bex
Otherwise, it'll be a bit awkward if we do have something more useful to return. And we wouldn't be able to get at the slset's list so easily.
2025-08-18Minor change in benchmarkPeter Bex
Do not count list construction towards benchmark time. This doesn't appear to make a big difference but it's good to pull that out of the calculation.
2025-08-18Allow reification of slsets to get fast adjoin and membership testingPeter Bex
2025-08-18Add slset-delete and slset-contains?Peter Bex
Not strictly needed, but could be helpful and completes the operations. Also, if we ever reimplement it using some other strategy, this might be more useful.
2025-08-18Change Scheme benchmark to allow graphing by measuring time and loopingPeter Bex
2025-08-18Make sure lset-adjoin removes markings on the adjoined elementsPeter Bex
Add a test to ensure this won't happen again.
2025-08-18Actually use both different setsPeter Bex
The original implementation just diffed the same set with itself, and needed a workaround for srfi-1's shortcut on the identical list. Since we're comparing to other implementations with differing sets, it makes sense to do the same here. We actually started doing this but ended up just redefining the same list...
2025-08-18Add benchmarks for Ruby, Python and ClojurePeter Bex
Ruby is about the same speed as slets. Clojure (babashka) and Python are goddamn fast. Python is 10 times as fast. Clojure is twice as slow as Python but that still outperforms Ruby and slsets.
2025-08-18Disable interruptsPeter Bex
Doesn't do that much, but it's a good idea for slsets as well because it makes it unlikely that plist changes are ever observed, because there's no thread switching.
2025-08-18Add custom hash table implementation to compare direct hash-table-as-setPeter Bex
This uses hash-tables directly instead of creating the hash table from the lset every time. It's faster than using srfi-69 because it can be inlined better.
2025-08-18Add hacky cache for symbol hashPeter Bex
Makes a bit of an impact - about 20% faster
2025-08-18Initial implementation of slsets eggPeter Bex
This implements sets of symbols *as lists*, like in the srfi-1 lset operations. It maintains the benefit of using lists for everything, but not having to pay the quadratic performance penalty that srfi-1 entails. We achieve this by using plist operations to "mark" items so we have to visit the list "set" only a fixed number of times.