Hi,

Implicit function specialization would change that, however that would mean the generation of a specialized definition each time it is used in a different unit and for every type.


This calls for a space optimizer that removes unnecessary specializations


3 optimizations could one have:

* If the project already has a specialization with the types in any unit, then it will not be generated again

* If two different specialization create the same assembly, then the previous specialization will be reused (bitwise comparison of the code after it has been generated)

* a semantic analysis that determines whether the specialization is actually necessary and then does not generate anything new if it is not.   (e.g. if a function is generic <T: TObject>, but no properties of T are used, but it only cast a result to T (like e.g. a generic TList.get), then it can create the function for TObject once and then never again for T.  )

Best,
Benito

On 06.09.25 11:47, Sven Barth via fpc-devel wrote:
michael via fpc-devel <fpc-devel@lists.freepascal.org> schrieb am Do., 4. Sep. 2025, 09:29:

    On 2025-09-04 08:55, Hairy Pixels via fpc-devel wrote:
    > On Sep 4, 2025 at 1:43:23 PM, michael via fpc-devel
    > <fpc-devel@lists.freepascal.org> wrote:
    >
    >> Personally, I think we already have too much intrinsics to begin
    >> with;
    >> no matter their behaviour. But that is another discussion
    >> entirely...
    >
    >  How so? The reason intrinsics are used is because they can’t be
    > replicated at runtime. If you remove them then you lose that
    > functionality entirely.

    As I wrote, for some it is needed. No arguments there.

    But AFAIK many regular functions such as Length(), Inc/Dec() etc. are
    also converted to intrinsics.

    No doubt for performance reasons, but I'd rather have as little as
    possible "compiler magic".


Not performance reasons, but because they need to be usable by many types and thus can't be expressed using ordinary Pascal in a typesafe way. Implicit function specialization would change that, however that would mean the generation of a specialized definition each time it is used in a different unit and for every type.

Regards,
Sven


_______________________________________________
fpc-devel maillist  -fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel
_______________________________________________
fpc-devel maillist  -  fpc-devel@lists.freepascal.org
https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-devel

Reply via email to