Random thought: Alternative stuct

rikki cattermole rikki at cattermole.co.nz
Tue Sep 4 06:32:02 UTC 2018


On 04/09/2018 4:24 PM, Paul Backus wrote:
> On Tuesday, 4 September 2018 at 04:03:19 UTC, Mike Franklin wrote:
>> There are also a few additional differences.  classes can inherit 
>> implementations, but using the technique illustrated in 
>> https://theartofmachinery.com/2018/08/13/inheritance_and_polymorphism_2.html, 
>> you can get something very much like classes.  With `alias this` and 
>> multiple-`alias this` (https://github.com/dlang/dmd/pull/8378) it gets 
>> even better.
>>
>> [...]
>>
>> In my opinion, we shouldn't add a third option.  Rather, we should 
>> deprecate classes, and make and expand the capabilities of structs.  
>> Languages like Zig and Rust have done away with classes and all 
>> runtime overhead that accompanies them, and are showing great promise 
>> by expanding on structs with much more composable features.
> 
> You can implement inheritance in C, if you really want to, but doing it 
> by hand is far less productive and far more error prone than using a 
> compiler that does it for you.
> 
> Now, with D's metaprogramming capabilities, it may well be possible to 
> implement an object system as a library, using only structs. Without AST 
> macros, though, a library solution is always going to have uglier syntax 
> and worse error messages than a language feature with compiler support.
> 
> If D didn't have built-in OOP features already, it'd be an interesting 
> question, but given that it does, I think getting rid of them is a clear 
> net-negative.

You also loose loads of stuff like extern(C++) classes interop and COM. 
Definitely a net negative. Even with a concept like signatures, you just 
can't replace the class/interface system.


More information about the Digitalmars-d mailing list