[fpc-devel] Re: Comparison FPC 2.6.2 - Kylix 3

Sven Barth pascaldragon at googlemail.com
Mon Mar 4 16:16:48 CET 2013


Am 04.03.2013 14:31, schrieb Sven Barth:
> Am 04.03.2013 13:46, schrieb Michael Van Canneyt:
>>
>>
>> On Mon, 4 Mar 2013, Sven Barth wrote:
>>
>>> Am 04.03.2013 13:38, schrieb Daniƫl Mantione:
>>>> 1. Operator overloading
>>>>
>>>> Operators are some of the most common tokens in source code. 
>>>> Without operator overloading, if you parse an operator, you simply 
>>>> generate a tree node.
>>>>
>>>> With operator overloading, for each operator that you parse, you 
>>>> have to traverse all loaded units to check if the operator is 
>>>> overloaded. If there are 50 units loaded, this means 50 symtable 
>>>> lookups, simply because the operator might be overloaded.
>>>>
>>>> For each operator overload candidate that is found, the compiler has
>>>> need to check for many possible type conversions to see if the 
>>>> candidate can actually be used.
>>>>
>>>> The situation with Pascal type conversion has grown increasingly 
>>>> complex over the years. For example almost any type can be 
>>>> converted into a variant, and a variant can be converted into 
>>>> almost any type. This requires all kinds of special handling, not 
>>>> only to do the right thing, but also not to do ineffcient type 
>>>> conversions.
>>>>
>>>> So even if you don't use operator overloading or variants at all, 
>>>> they do affect the compiler speed.
>>>>
>>> Maybe we can improve this situation. For class helpers I added the 
>>> possibility to add flags to symtables (so that only units are 
>>> checked that really contain class helpers). Maybe we can add an 
>>> additional "has_operators" flag and ignore all units when searching 
>>> for overloads that don't have this flag set (the flag would 
>>> propagate from the symtable of e.g. advanced records up to the unit 
>>> symtable when parsing the record's declaration). As most units don't 
>>> declare operators this could result in a little speedup especially 
>>> considering that the lookup is done on each operator... and then we 
>>> might add some caching structures to improve this further.
>>
>> That seems simple enough to implement and test ?
>>
> Yes, maybe I'll give it a try in the next couple days (if no one beats 
> me :) ).
It seems that I only achived around 0.1 to 0.2 seconds when compiling 
the compiler (manually, with -B). But it's now checking only unit System 
and unit constexp (part of the compiler) for operator overloads.

It's also interesting to see that not every unit triggers a search for 
operators...

Regards,
Sven



More information about the fpc-devel mailing list