[fpc-devel] for-in-index loop
Michael Van Canneyt
michael at freepascal.org
Sun Jan 27 19:09:53 CET 2013
On Sun, 27 Jan 2013, Sven Barth wrote:
> On 27.01.2013 16:27, luiz americo pereira camara wrote:
>> 2013/1/26 Sven Barth <pascaldragon at googlemail.com>:
>>> On 26.01.2013 12:52, Alexander Klenin wrote:
>>>>
>>>> On Sat, Jan 26, 2013 at 10:50 PM, Sven Barth
>>>> <pascaldragon at googlemail.com> wrote:
>>>>>>
>>>>>> Generics was implemented without my knowledge. I only found out when
>>>>>> suddenly
>>>>>> the classes unit had been changed to use them. After a horrible
>>>>>> discussion, this was reversed, because of the drop in speed you got
>>>>>> when
>>>>>> using generics.
>>>>>
>>>>>
>>>>> Ah! So that is where those ifdefs in classes come from :) I always
>>>>> wondered...
>>>>>
>>>> Is the drop still present/essential? Perhaps optimizer is now good
>>>> enough to drop those ifdefs?
>>>
>>>
>>> Someone would need to test this. It could be that the generic variant is
>>> less optimal, because the generic list is built upon a list that handles
>>> pointers...
>>>
>>
>> I did some test with generics last year:
>> http://lazarusroad.blogspot.com.br/2012/06/cost-of-using-generics.html
>>
>> I would not use in classes unit
>
> That's mostly about the "duplication" problem, which is known (maybe I'll try
> to improve the situation some time). What would have been more interesting is
> the performance of the generated code compared with e.g. a TStringList or a
> TObjectList.
When I tested it, there was a 10% slowdown.
It is the difference between a direct pointer assignment vs. calling Move() for each assignment.
Regardless, I don't see the need of replacing proven code with generics just as a
showcase for generics. If it ain't broken, don't fix it.
Michael.
More information about the fpc-devel
mailing list