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.