[fpc-devel] Re: Comparison FPC 2.6.2 - Kylix 3
Sven Barth
pascaldragon at googlemail.com
Mon Mar 4 16:20:08 CET 2013
Am 04.03.2013 16:16, schrieb Sven Barth:
> 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...
And compiling with 2.6.0 is around 0.1 to 0.3 seconds faster.
And before I forget it: Platform is i386-win32.
Regards,
Sven
More information about the fpc-devel
mailing list