Unique all characters?
Philippe Marschall
philippe.marschall at gmail.com
Mon Jan 28 19:08:46 UTC 2008
2008/1/28, Eliot Miranda <eliot.miranda at gmail.com>:
> Hi All,
>
> having just stumbled across the fact that only characters with codes
> from 0 to 255 are unique I wondered whether anyone has considered doing the
> following:
>
> Character addClassVarNamed: 'LargeCodeCharacters'.
>
>
> Character class methods for class initialization
> initialize
> [LargeCodeCharacters := WeakSet new
>
>
> Character class methods for instance creation
> value: anInteger
> "Answer the Character whose value is anInteger."
>
> | theCharacter existingInstanceOrNil |
> anInteger <= 255 ifTrue:
> [^CharacterTable at: anInteger + 1].
> theCharacter := self basicNew setValue: anInteger.
> ^(existingInstanceOrNil := LargeCodeCharacters like: theCharacter)
> ifNil: [LargeCodeCharacters add: theCharacter]
> ifNotNil: [existingInstanceOrNil]
>
>
> Yes this has the potential to create a lot of space overhead, but only for
> artificial codes that enumerate over all characters. I suspect that for
> most cases the actual set of active characters would be quite small.
>
> (Alternatives that are indexed by integers might also work well, e.g. a flat
> WeakValueDictionary that used a WeakArray for its values).
Lord no, please no more Weak* collections. That was one of the major
performance fixes we did in Seaside, kicking Weak* collections. They
don't scale, they kill you in production.
Cheers
Philippe
More information about the Squeak-dev
mailing list
|