D Editions

Atila Neves atila.neves at gmail.com
Fri May 31 16:29:54 UTC 2024


On Friday, 31 May 2024 at 00:56:36 UTC, Gregor Mückl wrote:
> On Thursday, 30 May 2024 at 18:31:48 UTC, Atila Neves wrote:
>> https://github.com/atilaneves/DIPs/blob/editions/editions.md
>>
>> Destroy!
>
> How are editions going to retain compatibility across modules 
> with different ABIs? I believe that combinations of inheritance 
> and interface implementations may make this quite challenging.
>
> A probably needlessly convoluted example would be this:
>
> - a module A, edition 2024, containing a class Foo
> - a module B, edition 2024+x, containing a class Bar, and
> - a module C, edition 2024+y, defining an interface IFooBar and 
> two classes FooBar_Foo and FooBar_Bar that derive from Foo and 
> Bar respectively, but implement the IFooBar interface on top of 
> them.
>
> Any function that takes a IFooBar should be able to take both 
> implementation interchangeably. But how would this work if 
> there was an ABI change to the class memory layout affecting 
> Foo and Bar?

Interesting question! Given the interface ABI now 
(https://dlang.org/spec/abi.html#interfaces), if we don't change 
that all of this *should* work. But suppose a future edition 
changes the ABI for interfaces (unlikely). It would probably be 
complicated to implement in the compiler, but I can't see any 
fundamental problems there: we know what module the interface is 
defined in, so we know what layout to expect for any function 
taking one. If I'm wrong I'd love if someone educated me.

It's much more likely we change the ABI for classes in a future 
edition though, or the root class.


More information about the dip.ideas mailing list