Compile-Time Interfaces (Concepts)
Atila Neves via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jul 20 08:45:36 PDT 2014
On Thursday, 17 July 2014 at 22:52:37 UTC, Justin Whear wrote:
> On Thu, 17 Jul 2014 22:49:30 +0000, Nordlöw wrote:
>
>> AFAIK there is no compile-time variant of interfaces right?
>>
>> Why is that?
>>
>> Wouldn't it be nice to say something like
>>
>> struct SomeRange realize InputRange {
>> /* implement members of InputRange */
>> }
>>
>> and then the compiler will statically check that that all
>> members are
>> implemented correctly.
>>
>> I guess this requires some new syntax to describe what an
>> InputRange is.
>>
>> Kind of like C++ Concepts.
>
> What benefits would accrue from adding this? Static
> verification that a
> structure implements the specified concepts? If so, you can
> simply do
> this instead:
>
> static assert(isInputRange!SomeRange);
This is sufficient, but not adequate. Just as the built-in
unittest blocks with assertions, it's great when the assertion is
true but good luck finding out where the bug is when it's not.
The D Cookbook has an idiom to handle this by checking for __ctfe
but it's super hacky and there should be a better way.
I have lost count of how many times I wish the compiler would
help me with compile time interfaces as it does with runtime
code. static override and static interface? Yes please.
Atila
More information about the Digitalmars-d-learn
mailing list