Hi Sven, Thanks for the quick reply. On Tue, 28 Aug 2018 at 13:17, Sven Van Caekenberghe <sven@stfx.eu> wrote:
Hi Alistair,
Thanks for the feedback, but consider:
count := 10000. str := 'test-äöü'. [ count timesRepeat: [ ZnCharacterEncoder utf8 encodeString: str ] ] timeToRunWithoutGC.
=> 8
#newForEncoding: is indeed slow as it has to look through all known encoders, which also involves a subclasses search, which is a PITA.
ZnCharacterEncoder class>>#utf8 actually uses a cached default instance (see ZnUTF8Encoder class>>#default). As this is the most used encoder, with no customization options, it makes sense. For example, #utf8Encoded and #utf8Decoded use this instance.
However, some (byte, utf16, utf32) encoders do have state (endianness, strictness, ...), so global caching could be an issue.
Users of the encoders are free to cache their own instances.
I am not (yet) convinced that a global cache is needed.
Somehow I missed the existence of ZnCharacterEncoder class>>#utf8. That certainly covers the cases I'm think of, so I'll just use it. Thanks again, Alistair