Sven Barth schrieb:
On 28.10.2014 10:15, Michael Schnell wrote:
On 10/27/2014 05:17 PM, Hans-Peter Diettrich wrote:

Something like ShortString and AnsiString?

Only that ShortStrings can easily be avoided (AFAIK, no great
performance advantage to use them) and hence are seldom used right now.

ShortStrings don't have implicit initialization/finalization, thus no implicit try/finally blocks, which at least with FPC's platform independant exception handling mechanism or SEH on i386-win32 have quite some performance impact even in case no error occured (SEH on x86_64-win64 (and in theory arm-wince) only has an impact in case of an error (and an impact in binary size for the exception tables)). Also there is no reference counting for ShortString.

So: basically the performance of reference counted objects compared to normal objects is more or less similar to the performance of AnsiStrings compared to ShortStrings (it's not completely equal, because AnsiStrings are allocated on the heap while ShortStrings are on the stack, but it's good enough...). And did anyone yet complain about the performance of AnsiStrings? ;)

Right, this entire discussion is somewhat fruitless without benchmarks.

I wonder how difficult it would be to implement the existing Interface refcounting model for TObject, so that this runtime variation could be tested and benchmarked as well, in addition to the current compiletime approach. According to the problems of the compiletime approach, revealed in this thread, it looks not viable to me at all.


Just an idea about type incompatibilities:
When a TArcObject cannot be assigned to a TObject variable, because a conversion (as between ShortString and AnsiString) is impossible, then a delegate could be created that turns the TArcObject into something compatible with TObject. I have no idea how this could be accomplished[1], but as long as it only affects refcounted objects, the overhead has to be accepted when using ARC objects at all. Some overhead is inevitable for ARC, and everybody should be free to decide whether such overhead is acceptable for his projects or targets. Not using ARC at all should always be an option.

[1] Perhaps the same (possibly simplified) mechanism could be used, for TArcObjct/TObject conversion, as for Interface/TObject conversion.

DoDi

_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
http://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to