[fpc-devel] Little feature teaser

Sven Barth pascaldragon at googlemail.com
Fri Aug 2 18:07:34 CEST 2013


On 02.08.2013 17:50, Flávio Etrusco wrote:
> On Fri, Aug 2, 2013 at 12:34 PM, Sven Barth <pascaldragon at googlemail.com> wrote:
>> On 02.08.2013 17:01, Mattias Gaertner wrote:
>>>
>>> On Fri, 02 Aug 2013 13:18:53 +0200
>>> Sven Barth <pascaldragon at googlemail.com> wrote:
>
> (...)
>
>>> What about code size?
>>
>>
>> The code size for one unit is the same as if you had (in that example)
>> declared a variant of "IsIn" for each "LongInt" and "String". So for each
>> "IsIn<T>" specialization with different types new code is generated if it
>> does not yet exist in that unit. This means that if you call "IsIn<LongInt>"
>> in different units you'll have a "IsIn<LongInt>" implementation in each
>> unit. This is the same as for generic types btw.
>>
>> Regards,
>> Sven
>
>
> And the same (problem) in C++. Is there some proposal to mitigate the
> code duplication? Or the official position is that if the project is
> big enough to suffer from the bloat it should avoid itself the
> duplicate declarations?

The problem is that it's not really possible with the unit concept FPC 
uses. If you want to share the code with other units the code needs to 
be callable from the interface section, but when you are working in the 
implementation section (where most specializations take place) you 
should not modify the interface section anymore as this needs to trigger 
a recompilation of all units that depend on that unit. This already 
leads to some hard to detect bugs in context with inlining (which does 
exactly that, because the node tree of the inline function is stored in 
the interface part of the PPU). The type of interdependencies are for 
example a problem in FPC itself which leads to strange compilation bugs 
(e.g. identifier not found, although it exists, corrupted unit loadings, 
etc) if you do a normal compile (Ctrl+F9 in Lazarus) after you changed 
something in the interface section of some heavy used unit. These bugs 
of course need to fixed, but they are very hard to reproduce in smaller 
setups...

Regards,
Sven




More information about the fpc-devel mailing list