Inside of D’s GC in Russian

Kagamin spam at here.lot
Thu Apr 25 14:35:17 UTC 2024


Running on jvm, Kotlin presumably handles everything with GC 
allocated classes and single inheritance. C# can disambiguate 
such design, this compiles:
```
class A<T> { }
class B<T> : A<T> { }
class C<T> : B<T> { }

void test1<T>(A<T> a, int b) { }
void test1<T>(B<T> a, int b) { }
void test2(A<int> a, B<int> b, C<int> c)
{
	test1(a, 0);
	test1(b, 0);
	test1(c, 0);
}
```
But wrappers in C# use multiple inheritance. For some reason 
`Memory` doesn't implicitly convert to `Span`, but it's not in D 
tradition and it doesn't look like something prevents it, then 
type hierarchy would look like this:
```
class Memory<T> : ReadOnlyMemory<T>, Span<T>
class ReadOnlyMemory<T> : ReadOnlySpan<T>
class Span<T> : ReadOnlySpan<T>
```
i.e. the diamond pattern with multiple inheritance, I think this 
will be challenging to disambiguate, and it happens merely due to 
proliferation of wrapper types.


More information about the Digitalmars-d mailing list