On Thursday, 23 July 2015 at 14:08:23 UTC, Andrei Alexandrescu
wrote:
Thanks for the link, good quick read to get the overview of
Rust's traits feature. It's ingenious because it integrates
static and dynamic dispatch.
For dynamic dispatch, traits are better than interfaces - more
flexible, better informed. For static dispatch, they don't hold
a candle to D's constraints. This is important because dynamic
dispatch is more of a cut-and-dried matter, whereas static
dispatch is where it's at.
On that note, I've mentioned scala's trait, which are kind of
similar and worth looking at. The thing being based on java's
object model, as D's object model, it is easier to think about
how this could get into D.
For static dispatch I think D's template constraints are quite
a lot better; they have a lot more power and offer a lot more
to promise. They are an out-of-the-box solution that's a bit
unwieldy because it's new enough to not yet have established
idioms. In contrast, traits come from straight within the box.
Certainly, but they suffer from the LISP effect. You can do
everything because the structure does not constrain you in any
way, while at the same time it become quickly very hard to
understand, for the very same reason.
I do think think the opposition between the 2, as seen in your
post, or Stroustrup's allergy to static if is wrong headed.
May be one can be expressed via the other ?