[fpc-devel] Performance of string handling in trunk

Michael Schnell mschnell at lumino.de
Wed Jun 26 15:26:25 CEST 2013

On 06/26/2013 02:59 PM, Sven Barth wrote:
> It's a counter argument to "it is not possible to make use of the 
> encoding type of a String information that had been assigned to a 
> RawByteString". This function returns the current code page of the 
> string. And using SetCodePage you can force a conversion.

I don't see the problem.

fpc does not need to closely follow Delphi with stuff that is only 
seldom used by average application programmers, if there are decent 
reasons to do another (better) decently compatible implementation.

According to the description, StringCodePage returns "the Codepage". 
According to your wording it returns "the current code page". With 
normal strings the _current_ (aka dynamic) code page always is identical 
to the code page the string had been given (by the compiler) when 
instantiated. (Otherwise the string would be "intersexuel" or erroneous 
and will behave erratically). That is why the (floppy) wording of the 
description omits this difference.

As you stated before, the RawByteString _does_ preserve the encoding 
type of the information that is assigned to it. It can only do this 
using its dynamic "EncodingType" field. Thus it makes sense that the 
function returns the dynamic EncodingType with RawByteStrings.

Thus it simply always might return the dynamic EncodingType.

And this is exactly the information that (IMHO) should be used when 
auto-converting,  with the only exception when assigning _to_ a 
RawByteString (_static_ encoding Type $FFFF). That easily can be decided 
by the compiler at compile time (that here and in many other cases does 
not even need to call the library, as assigning is simply done by 
setting the pointer and increasing the RefCount), which IMHO should be 
done "inline".


More information about the fpc-devel mailing list