[fpc-devel] Alternative parsers

Michael Van Canneyt michael at freepascal.org
Tue Oct 19 20:36:10 CEST 2010



On Wed, 20 Oct 2010, Alexander Klenin wrote:

> On Wed, Oct 20, 2010 at 01:45, Michael Van Canneyt
> <michael at freepascal.org> wrote:
>
>> If you need more convincing: the contnrs unit contains 2 hash classes.
>> one based on ansistrings, one with pchars and shortstrings. The pchar
>> version is easily 20% faster. It comes from the compiler code and was
>> written specially by Peter Vreman.
>>
>> Try and improve that class with ansistrings. If you succeed, only then we
>> can start making a case for using them in the compiler.
>
> Ok, I went ahead and have taken look at the code.
> I assume you speak about TFPHashList vs TFPCustomHashTable.
> The classes are not really comparable, because they use quite
> different internal data structures.

But they perform the same function; hash on string with an
associated data structure.

> So instead I converted TFPHashList list to use ansistrings.

That was the point :-)

> Benchmarking included 3*10^6 calls to Add and Find methods
> with the arguments of various lengths.
>
> Average string length 5 characters:
> ShortString: 1.15 s
> AnsiString: 1.56 s
>
> Average string length 45 characters:
> ShortString: 12.0 s
> AnsiString: 3.2 s
>
> I agree that the first case is more relevant for the compiler,
> but still you can see that ShortStrings are clearly not always faster.

I'm always open for benchmark tests.

Can you please send me your test and the implementation ?
I'd like to see when the balance shifts.

Recently I had an implementation for TStringList.Sort which the author 
claimed was 25-45 times (!) faster than the quicksort. I've never been 
able to reproduce his claim - rather the opposite. Not even with Delphi
(which, strangely enough, performed worse than FPC)

Michael.



More information about the fpc-devel mailing list