Thread overview
:end to terminate attribute:
Sep 28, 2016
Mike Parker
Sep 28, 2016
Mike Parker
Sep 28, 2016
ZombineDev
Sep 28, 2016
ZombineDev
Sep 28, 2016
Mike Parker
Sep 28, 2016
Seb
September 28, 2016
Given

public:

September 28, 2016
Let's try this again.

This attribute block can be terminated by a corresponding protection attribute block:

// Begin private
private:
  void foo() {}

// End private
public:
   void bar() {}

But not all attributes have a corresponding attribute to turn them off:

// Begin @nogc
@nogc:
...

// End with scope/file

It would be a nice convenience to have something like this:

@nogc:

:end

Yes, I'm aware I could do this:

@nogc {}

But given the choice of : and {}, I'm tending to prefer the former these days. The lack of a way to turn off some attributes forces me to use {}. I recall discussions about something like @nogc(off) or some such. Was that ever approved? If not, I'd love to have something like :end, though I'm not attached to the name.
September 28, 2016
On Wednesday, 28 September 2016 at 09:43:38 UTC, Mike Parker wrote:
> Let's try this again.
>
> This attribute block can be terminated by a corresponding protection attribute block:
>
> // Begin private
> private:
>   void foo() {}
>
> // End private
> public:
>    void bar() {}
>
> But not all attributes have a corresponding attribute to turn them off:
>
> // Begin @nogc
> @nogc:
> ...
>
> // End with scope/file
>
> It would be a nice convenience to have something like this:
>
> @nogc:
>
> :end
>
> Yes, I'm aware I could do this:
>
> @nogc {}
>
> But given the choice of : and {}, I'm tending to prefer the former these days. The lack of a way to turn off some attributes forces me to use {}. I recall discussions about something like @nogc(off) or some such. Was that ever approved? If not, I'd love to have something like :end, though I'm not attached to the name.

AFAIR, last year or so, Andrei approved the proposal for attr(bool expr), eg:

@nogc:

// no gc code here

@nogc(false):

// code that's allowed to use the gc here

class Base(bool overridableImpl)
{
   final:


   final(overridableImpl) void impl() { /* ... */
}

But still no one has stepped in to do the implementation.
September 28, 2016
On Wednesday, 28 September 2016 at 09:48:27 UTC, ZombineDev wrote:
> On Wednesday, 28 September 2016 at 09:43:38 UTC, Mike Parker wrote:
>> [...]
>
> AFAIR, last year or so, Andrei approved the proposal for attr(bool expr), eg:
>
> @nogc:
>
> // no gc code here
>
> @nogc(false):
>
> // code that's allowed to use the gc here
>
> class Base(bool overridableImpl)
> {
>    final:
>
>
>    final(overridableImpl) void impl() { /* ... */
> }
>
> But still no one has stepped in to do the implementation.

I meant:
class Base(bool overridableImpl)
{
   final:
   /* final methods here */

   final(!overridableImpl) void impl() { /* ... */ }

   /* final methods here */
}
September 28, 2016
On Wednesday, 28 September 2016 at 09:48:27 UTC, ZombineDev wrote:

> AFAIR, last year or so, Andrei approved the proposal for attr(bool expr), eg:
>

Yeah, that's what I couldn't remember. I'll dig up the discussion read up on it again.
September 28, 2016
On 9/28/16 11:48 AM, ZombineDev wrote:
>
> AFAIR, last year or so, Andrei approved the proposal for attr(bool
> expr), eg:
>
> @nogc:
>
> // no gc code here
>
> @nogc(false):

Yah, we've got to have something. There's been quibbles over syntax but nothing better came up that is as comprehensive. @nogc(true) and generally @nogc(ctBoolean) should work as well. -- Andrei
September 28, 2016
On Wednesday, 28 September 2016 at 10:14:25 UTC, Mike Parker wrote:
> Yeah, that's what I couldn't remember. I'll dig up the discussion read up on it again.

These two DIPs drafts also try to tackle the attribute problem:

http://wiki.dlang.org/DIP64
http://wiki.dlang.org/DIP79