Ranges

Yigal Chripun yigal100 at gmail.com
Sat Jun 20 03:00:48 PDT 2009


dsimcha wrote:
> == Quote from bearophile (bearophileHUGS at lycos.com)'s article
>> Yigal Chripun:
>>> point in case, look how much
>>> unnecessary confusion Ranges cause which would be eliminated had D
>>> allowed for compile-time interfaces.
>> What are interfaces from the point of view of the compiler?
> 
> Abstract classes with only pure virtual functions.  In other words, basically
> under the hood, an interface is just the layout of a vtable.

That's run-time interfaces. compile-time interfaces are like C++ concepts.
> 
> This actually leads to a comment I want to make in the wider debate:  I personally
> find explicit interfaces really, really annoying and I think that duck typing is
> by far the most intuitive type system there is.  I used to program primarily in
> duck typed languages and resort to every kludge imaginable for speed.  What
> attracted me to D was that the templates and type inference are so powerful that I
> almost feel like it's still a duck typed language, but much faster and with more
> error checking.  I guess that's why I like ranges so much.

duck-typing has its benefits, that's for sure. it all boils down to is 
style issues I guess - do you prefer implicit or explicit interfaces.

either are fine by me, even though it seems to me that duck-typing is 
more of a dynamically typed language feature but maybe my feeling here 
is wrong.
either way, the language needs to be consistent about it in order to not 
confuse users unnecessarily.

> 
> Also, while the fact that you need interfaces to specify a vtable layout is an
> implementation detail, I would argue that, in close to the metal languages, it
> does more harm than good to try too hard to prevent implementation details from
> leaking into the language abstractions.  Otherwise, what would be the point of it
> being a close to the metal language?  The fact that, for templates, one does not
> need to specify vtable layouts and for OO you do justifies the asymmetry between
> templates and OO.  Interfaces for templates would just add boilerplate and make
> explicit something that is already implicitly knowable and checked at compile time
> anyhow.

here I disagree. it sometimes makes sense to let implementation details 
leak into your abstractions when you gain something by it, like 
performance (e.g. "Worse is better" principle) but I don't see how this 
applies here. what is there to gain by doing this compromise in this case?
there is no added performance since it's all compile-time, there is no 
additional flexibly like with run-time duck-typing.



More information about the Digitalmars-d mailing list