[squeak-dev] Re: SparseLargeTable

nicolas cellier ncellier at ifrance.com
Tue Nov 4 00:44:39 UTC 2008


Eliot Miranda a écrit :
> 
>     Sure this does not really matter, I doubt this access be the
>     bottleneck of any code, and maybe you already hacked primitive 31...
> 
>  
> No, but if you have, I'm all ears :)
> 
> 
> ------------------------------------------------------------------------
> 
> 

Hehe, I don't even know the man-hour cost of such a hack...
The day when identified as a real bottleneck i will have a look.

Concerning SparseLargeTable, I can understand the utility of base as:
any element of index < base is known to be = defaultValue.
This should economize some space by reducing basicSize requirement...
But it does not !
Browse #new:chunkSize:arrayClass:base:defaultValue:

Also, with base ~= 1, things like #printString become strange:

(SparseLargeTable new: 3 chunkSize: 3 arrayClass: Array base: 2 
defaultValue: -1) printString.
->  'a SparseLargeTable(-1 -1)'

Though its size is 3, and:
| tmp |
tmp := SparseLargeTable new: 3 chunkSize: 3 arrayClass: Array base: 2 
defaultValue: -1.
(1 to: 3) collect: [:i | tmp at: i]
-> #(-1 -1 -1)

Also, in #analyzeSpaceSaving total should be either
	total := size - base + 1.
or:
	total := size.
but not:
	total := size - base.
as you proposed.

Also, lastChunkSize is not set to a correct size.
It should be:
	(lastChunkSize := size - base + 1 \\ chunkSize) = 0 ifTrue:
		[lastChunkSize := chunkSize].
which can be more efficiently written:
	lastChunkSize := size - base \\ chunkSize + 1.

Well, I guess every one use with base = 1...

Nicolas




More information about the Squeak-dev mailing list