concepts and interfaces
janderson
askme at me.com
Sun Apr 8 10:11:16 PDT 2007
janderson wrote:
> Martin Hinsch wrote:
>> Inspired by this video (linked by an earlier post, and very
>> interesting; I really hope that D will get something similar)
>>
>> http://video.google.com/videoplay?docid=-1790714981047186825&hl=en
>>
>> I started to think about the relation of concepts and interfaces.
>> In a way both serve very similar purposes, namely supporting
>> polymorphism. The major difference is of course that one is used at
>> compile time and the other one at run-time. Still, in the end both are
>> just a way to describe the constraints which have to be fulfilled by a
>> type in order to be usable in a specific generic way.
>> Interestingly the syntactic differences are nevertheless considerable.
>> My main point in this post is that this is mainly for historical
>> reasons and that it might be beneficial to think about making
>> interfaces and concepts more similar to each other.
>>
>> Some more specific thoughts:
>>
>> - why does conformance to an interface have to be specified explicitly
>> (as in class C implements interface I)? Why not do post-hoc checking
>> as with concepts/templates?
>> Using an object via an interface implies two things - the compiler has
>> to check whether the objects class actually implements all methods
>> required by the interface and the object reference has to be
>> manipulated in such a way that when using it when assigned to an
>> interface reference the right method calls are done. If we assume that
>> all casts from an object to an interface reference are visible at
>> compile time both of these could be done *at the point of the cast*
>> (equivalent to the way type checking is done for template instantiation).
>>
>> - why not make concepts obligatory?
>> One of the beneficial aspects of using interfaces is in my opinion
>> that it forces you to be specific about which properties you expect
>> from the plugged in types. This is something which is missing from
>> generic programming and which is supposed to be improved by
>> introducing concepts. C++ of course has to stay backwards-compatible
>> therefore concepts will be completely optional.
>> In D OTOH concepts could actually be made obligatory forcing the
>> programmer to be explicit about the properties of the types which can
>> be plugged into a template/generic class.
>>
>> - interface_maps
>> With implicit implementation of interfaces the concept_map idea might
>> come in handy for interfaces as well, allowing to do some adjustments
>> to make a class conforming to an interface.
>>
>> Just some food for thought.
>>
>> cheers
>> Martin Hinsch
>
> I'm not sure D necessarily needs to support this the same way as C++.
> However the C++ developers of concepts are very smart people and have
> obviously put a lot of thought into this. We should consider all options.
>
> It would be nice when C++0x comes out we could say, D's had all these
> features for years. If your going to switch, why not switch to D.
>
> -Joel
Just a thought, could concepts possibly be jammed into contracts?
void Foo(T)(T t)
in
{
static assert(IsIterator!(T));
}
body
{
}
How IsIterator is defined is another matter. Perhaps a compile-time
function:
bool IsIterator(T)()
{
if (T contains opEquals)
{
return true;
}
ect...
}
Something like that. Probably would need some more thought to be a
complete solution.
-Joel
More information about the Digitalmars-d
mailing list