Negation of attributes (DIP 79)
Jonathan M Davis via Digitalmars-d
digitalmars-d at puremagic.com
Thu Jun 4 01:31:30 PDT 2015
On Thursday, 4 June 2015 at 07:14:00 UTC, Daniel Kozák wrote:
>
> On Wed, 03 Jun 2015 14:49:31 -0700
> Andrei Alexandrescu via Digitalmars-d
> <digitalmars-d at puremagic.com>
> wrote:
>
>> On 6/3/15 2:19 PM, Jonathan M Davis wrote:
>> > Regardless, I think that attribute(boolean expression) is
>> > the clear
>> > winner, because it's for more flexible.
>>
>> Yes please. -- Andrei
>
> Are we ok with code like this:
>
> final(someTemplate!orMaybeSomeAnother!SomeValue)
> finalOrVIrtualmethodWhoKnows() {}
>
> ?
Yes, we're okay with that. That's precisely why we want it. And
yes, it could be abused, but when dealing with generic code, but
without it, things get a _lot_ uglier when you need to be doing
introspection to determine what they should be (you'll end up
with static if-else trees with almost duplicate declarations
otherwise). A prime example would be when forwarding the
attributes of a type that you're wrapping (like a range). If you
need the attributes to match the ones being wrapped, then it's
_way_ cleaner to be able to do something like
auto front() const(isConst!(_wrapped.front)) { return
_wrapped.front; }
than if we only had const and !const. What we have now in this
sort of situation is ugly enough, and this is a good opportunity
to improve it. It would also be less error-prone than how we're
stuck doing it now.
> Maybe we can start with just attr(false) and attr(true), and add
> complete bool expresion evaluation in future?
What would be the point of that? If all we're planning to do is
have true and false, then you might as well just do attr and
!attr. Accepting a boolean does nothing more for you unless it'll
take arbitrary, compile-time expressions that resolve to a
boolean.
- Jonathan M Davis
More information about the Digitalmars-d
mailing list