"The last feature": overridable methods in interfaces
Andrei Alexandrescu
SeeWebsiteForEmail at erdani.org
Mon Feb 8 12:17:47 PST 2010
retard wrote:
> Mon, 08 Feb 2010 11:34:10 -0800, Andrei Alexandrescu wrote:
>
>> I know of Scala's traits. They are different from overridable methods in
>> interfaces, which are not nearly interesting enough to bring fame and
>> fortune to anyone.
>
> I apologize for being so rude.
That's a nice surprise (what about the backlog? :o)). Just a note, to me
apologizing entails I plan to not repeat whatever it is I'm apologizing for.
> If I read the proposal correctly, traits
> are its generalization:
>
> interface Stack(T)
> {
> void push(T);
> void pop();
> @property ref T top();
> @property bool empty();
> T belowTop()
> {
> auto t = top;
> pop();
> auto result = top;
> push(t);
> return result;
> }
> }
>
> vs
>
> trait Stack[T]
> {
> def push(t: T): Unit
> def pop: Unit
> def top: T // do not know how to port properties
> def empty: Boolean
> def belowTop: T
> {
> val t = top
> pop
> val result = top
> push(t)
> result
> }
> }
>
> But with these kind of features D's interfaces are getting closer and
> closer to traits. What's missing? The linearization system, type members,
> and member variables inside interfaces. OTOH Scala is lacking the
> contract system.
Traits indeed offer more than interfaces. We're looking at sensible
things to do within the time constraints we're having; traits would be a
major effort, whereas methods in interfaces are just eliminating an
artificial limitation. Traits are a possible addition to D3.
Andrei
More information about the Digitalmars-d
mailing list