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.