Bug in D!!!

EntangledQuanta via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Sep 1 17:00:43 PDT 2017


On Friday, 1 September 2017 at 23:25:04 UTC, Jesse Phillips wrote:
> I've love being able to inherit and override generic functions 
> in C#. Unfortunately C# doesn't use templates and I hit so many 
> other issues where Generics just suck.
>
> I don't think it is appropriate to dismiss the need for the 
> compiler to generate a virtual function for every instantiated 
> T, after all, the compiler can't know you have a finite known 
> set of T unless you tell it.
>
> But lets assume we've told the compiler that it is compiling 
> all the source code and it does not need to compile for future 
> linking.
>
> First the compiler will need to make sure all virtual functions 
> can be generated for the derived classes. In this case the 
> compiler must note the template function and validate all 
> derived classes include it. That was easy.
>
> Next up each instantiation of the function needs a new v-table 
> entry in all derived classes. Current compiler implementation 
> will compile each module independently of each other; so this 
> feature could be specified to work within the same module or 
> new semantics can be written up of how the compiler modifies 
> already compiled modules and those which reference the compiled 
> modules (the object sizes would be changing due to the v-table 
> modifications)
>
> With those three simple changes to the language I think that 
> this feature will work for every T.

Specifying that there will be no further linkage is the same as 
making T finite. T must be finite.

C# uses generics/IR/CLR so it can do things at run time that is 
effectively compile time for D.

By simply extending the grammar slightly in an intuitive way, we 
can get the explicit finite case, which is easy:

foo(T in [A,B,C])()

and possibly for your case

foo(T in <module>)() would work

or

foo(T in <program>)()

the `in` keyword makes sense here and is not used nor ambiguous, 
I believe.

Regardless of the implementation, the idea that we should throw 
the baby out with the bathwater is simply wrong. At least there 
are a few who get that. By looking in to it in a serious manner 
an event better solution might be found. Not looking at all 
results in no solutions and no progress.




More information about the Digitalmars-d-learn mailing list