8 comments

[ 3.3 ms ] story [ 32.9 ms ] thread
(comment deleted)
What did you expect it to print, and why, if I may ask?
I expected it to print "B", because D is visually closer to B so it would make more sense to me for it to be biased in that direction. (I was quite conscious that I was guessing, and wouldn't have written code depending on my assumption without testing it first)
I'm not quite sure what you mean by "visually" closer. Do you mean the actual distance in characters between "class D" and "with B"?

Intuitively, I expected the compiler to first add the "B" trait, and then the "C" trait, which overwrites what was previously added by the "B" trait. But this seems to be much more subjective that I would've thought, apparently ;)

>Do you mean the actual distance in characters between "class D" and "with B"?

Yes, exactly that.

Artima wrote an article describing how the use of traits (along with other scala features) can contribute to increased compile times.[1]

FTFA: "... the compile time cost of mixing in a trait compared to extending a superclass likely exists because the compiler must insert forwarding methods for all the methods declared in the trait into the body of the subclass when mixing in, but when extending a superclass it does not. Instead, the subclass simply inherits the superclass implementations of those methods. We did observe that the larger the number of methods to be mixed in the more the compile time was increased."

[1] http://www.artima.com/articles/compile_time.html