Feedback on Átila's Vision for D
Atila Neves
atila.neves at gmail.com
Wed Oct 16 11:08:18 UTC 2019
On Wednesday, 16 October 2019 at 07:09:38 UTC, JN wrote:
> On Tuesday, 15 October 2019 at 16:17:57 UTC, Atila Neves wrote:
>>
>> Meh:
>>
>> //C++20 concepts
>> concept isAddable = requires (T x) { x + x; };
>>
>> // D
>> enum isAddable(T) = is(typeof((T x) => x + x));
>>
>>
>> We lose by one character ;)
>
> I disagree. It's not just one character. C++ example is much
> cleaner. Imagine not being experienced with C++ and D and
> seeing these two examples.
Ok:
enum requires(alias F) = is(typeof(F));
enum isAddable(T) = requires!((T x) => x + x);
static assert(isAddable!int);
> C++ line of thought: we're defining a concept isAddable, which
> is something that requires that there is some x that can be
> added to itself.
I don't see the difference in D.
> D line of thought: we're defining an enum (why enum? why would
> I want an enumeration here?) isAddable of type T which is
> something that is a typeof (wait, why do I have to repeat the T
> here again)?? What does that even mean "is(typeof())"?
>
> It feels more complicated for a bystander. Actually,
> __traits(compiles) would be even cleaner in this case, because
> the is(typeof()) part, while could be considered a D idiom,
> feels very unexpected.
Valid point on `is(typeof)`, but as seen above easy to fix. I
don't agree on `enum` though, because that's D syntax that's
extremely unlikely to change.
More information about the Digitalmars-d
mailing list