1.0.12.18: faster member-type operations
commitedf8d3701ba59bd9f0c1bd027f3179b98250cfd0
authorNikodemus Siivola <nikodemus@random-state.net>
Sun, 9 Dec 2007 14:37:22 +0000 (9 14:37 +0000)
committerNikodemus Siivola <nikodemus@random-state.net>
Sun, 9 Dec 2007 14:37:22 +0000 (9 14:37 +0000)
treea10136a539e5cb1faa8be70a61b7c272957a8474
parent804a4f391c8dce7d39a5339d87895b069d87554a
1.0.12.18: faster member-type operations

* XSET is a generic set implementation, that uses lists of small sets,
  and switches to hashes for larger ones. Current switchoff point is
  12 -- but some operations would benefit from a larger one. TODO:
  There are other places in SBCL that will probably want to use XSET
  as well.

* Instead of storing members directly in the set object, store them in
  an XSET -- except for floating point zeros which go into a list of
  their own, simplifying the canonicalization a bit. (By adding
  complexity elsewhere, of course. Maybe this is not TRT after all...)

* ...now member type arithmetic is mostly O(1) or O(N), instead of
  O(BAD), but some operations cons more then before: old implemenation
  manageg eg. union without consing when either set was the subset of
  the other one -- not so anymore.
14 files changed:
build-order.lisp-expr
package-data-list.lisp-expr
src/code/cross-type.lisp
src/code/early-extensions.lisp
src/code/early-type.lisp
src/code/late-type.lisp
src/code/typep.lisp
src/code/xset.lisp [new file with mode: 0644]
src/compiler/checkgen.lisp
src/compiler/generic/primtype.lisp
src/compiler/ir1opt.lisp
src/compiler/srctran.lisp
tests/gray-streams.impure.lisp
version.lisp-expr