Re: @safe, pure and nothrow at the beginning of a module

2014-08-16 Thread Philippe Sigaud via Digitalmars-d-learn
 If I understand correctly Adam Ruppe's Cookbook, by putting

 @safe:
 pure:
 nothrow:

 at the beginning of a module, I distribute it on all definitions, right?
 Even methods, inner classes, and so on?

I read Adam's book again and I was wrong:

Chapter 7, p. 173:

You may add @safe: to the top of your module and aggregate
definitions to apply the annotation to all function that follows,
instead of writing it on each individual function.

So, first, he's talking only about @safe (though I suppose it works
the same for all annotations) and he says: *and aggregate
definitions*. We indeed need to put annotations inside aggregates to
affect their innards.

If that's true, I have a lot of annotation sprinkling to do.


Re: @safe, pure and nothrow at the beginning of a module

2014-08-16 Thread Artur Skawina via Digitalmars-d-learn
On 08/16/14 13:18, Philippe Sigaud via Digitalmars-d-learn wrote:
 We indeed need to put annotations inside aggregates to
 affect their innards.
 
 If that's true, I have a lot of annotation sprinkling to do.

It's not true for @safe, but true for some other attributes.

http://forum.dlang.org/post/mailman.125.1397731134.2763.digitalmar...@puremagic.com

artur


Re: @safe, pure and nothrow at the beginning of a module

2014-08-16 Thread Philippe Sigaud via Digitalmars-d-learn
On Sat, Aug 16, 2014 at 1:30 PM, Artur Skawina via Digitalmars-d-learn
digitalmars-d-learn@puremagic.com wrote:
 On 08/16/14 13:18, Philippe Sigaud via Digitalmars-d-learn wrote:
 We indeed need to put annotations inside aggregates to
 affect their innards.

 If that's true, I have a lot of annotation sprinkling to do.

 It's not true for @safe, but true for some other attributes.

 http://forum.dlang.org/post/mailman.125.1397731134.2763.digitalmar...@puremagic.com

Okay...

So @safe includes child scopes. I suppose @trusted and @system work in
the same way.

*but*

nothrow, @nogc and UDA's do not include child scopes. Putting them at
the beginning of a module will not affect methods in aggregates...

What's the situation for pure? (I don't have a D compiler handy right
now, or I would test it myself).


Re: @safe, pure and nothrow at the beginning of a module

2014-08-16 Thread Artur Skawina via Digitalmars-d-learn
On 08/16/14 13:58, Philippe Sigaud via Digitalmars-d-learn wrote:
 On Sat, Aug 16, 2014 at 1:30 PM, Artur Skawina via Digitalmars-d-learn

 http://forum.dlang.org/post/mailman.125.1397731134.2763.digitalmar...@puremagic.com
 
 Okay...
 
 So @safe includes child scopes. I suppose @trusted and @system work in
 the same way.
 
 *but*
 
 nothrow, @nogc and UDA's do not include child scopes. Putting them at
 the beginning of a module will not affect methods in aggregates...
 
 What's the situation for pure? (I don't have a D compiler handy right
 now, or I would test it myself).

@safe, @trusted, @system, shared, immutable, const, inout and `extern (...)`
affect child scopes. `synchronized` does too, but in a rather unintuitive
way; hopefully nobody uses this. ;)

Other attributes, including 'pure' and 'nothrow' only affect symbols
in the current scope.

artur


Re: @safe, pure and nothrow at the beginning of a module

2014-08-16 Thread Philippe Sigaud via Digitalmars-d-learn
Artur:
 @safe, @trusted, @system, shared, immutable, const, inout and `extern (...)`
 affect child scopes. `synchronized` does too, but in a rather unintuitive
 way; hopefully nobody uses this. ;)

Well, I also hope no one uses inout: at the module level?

 Other attributes, including 'pure' and 'nothrow' only affect symbols
 in the current scope.

There we are. Good to know, thanks.


Re: @safe, pure and nothrow at the beginning of a module

2014-08-16 Thread Jonathan M Davis via Digitalmars-d-learn
On Sat, 16 Aug 2014 14:39:00 +0200
Artur Skawina via Digitalmars-d-learn
digitalmars-d-learn@puremagic.com wrote:

 On 08/16/14 13:58, Philippe Sigaud via Digitalmars-d-learn wrote:
  On Sat, Aug 16, 2014 at 1:30 PM, Artur Skawina via
  Digitalmars-d-learn

  http://forum.dlang.org/post/mailman.125.1397731134.2763.digitalmar...@puremagic.com
 
  Okay...
 
  So @safe includes child scopes. I suppose @trusted and @system work
  in the same way.
 
  *but*
 
  nothrow, @nogc and UDA's do not include child scopes. Putting them
  at the beginning of a module will not affect methods in
  aggregates...
 
  What's the situation for pure? (I don't have a D compiler handy
  right now, or I would test it myself).

 @safe, @trusted, @system, shared, immutable, const, inout and `extern
 (...)` affect child scopes. `synchronized` does too, but in a rather
 unintuitive way; hopefully nobody uses this. ;)

 Other attributes, including 'pure' and 'nothrow' only affect symbols
 in the current scope.

It sounds like a bug to me if they're not consistent.

- Jonathan M Davis


Re: @safe, pure and nothrow at the beginning of a module

2014-08-16 Thread monarch_dodra via Digitalmars-d-learn
On Saturday, 16 August 2014 at 19:30:16 UTC, Jonathan M Davis via 
Digitalmars-d-learn wrote:

On Sat, 16 Aug 2014 14:39:00 +0200
Artur Skawina via Digitalmars-d-learn
digitalmars-d-learn@puremagic.com wrote:

On 08/16/14 13:58, Philippe Sigaud via Digitalmars-d-learn 
wrote:

 On Sat, Aug 16, 2014 at 1:30 PM, Artur Skawina via
 Digitalmars-d-learn

 
http://forum.dlang.org/post/mailman.125.1397731134.2763.digitalmar...@puremagic.com

 Okay...

 So @safe includes child scopes. I suppose @trusted and 
 @system work

 in the same way.

 *but*

 nothrow, @nogc and UDA's do not include child scopes. 
 Putting them

 at the beginning of a module will not affect methods in
 aggregates...

 What's the situation for pure? (I don't have a D compiler 
 handy

 right now, or I would test it myself).

@safe, @trusted, @system, shared, immutable, const, inout and 
`extern
(...)` affect child scopes. `synchronized` does too, but in a 
rather

unintuitive way; hopefully nobody uses this. ;)

Other attributes, including 'pure' and 'nothrow' only affect 
symbols

in the current scope.


It sounds like a bug to me if they're not consistent.

- Jonathan M Davis


Well, you got  @system to override @safe, but no @impure or 
@throws. So the behavior can kind of make sense in a way. Maybe.


Re: @safe, pure and nothrow at the beginning of a module

2014-08-16 Thread Jonathan M Davis via Digitalmars-d-learn

On Saturday, 16 August 2014 at 20:48:25 UTC, monarch_dodra wrote:
On Saturday, 16 August 2014 at 19:30:16 UTC, Jonathan M Davis 
via Digitalmars-d-learn wrote:

On Sat, 16 Aug 2014 14:39:00 +0200
Artur Skawina via Digitalmars-d-learn
digitalmars-d-learn@puremagic.com wrote:


@safe, @trusted, @system, shared, immutable, const, inout and 
`extern
(...)` affect child scopes. `synchronized` does too, but in a 
rather

unintuitive way; hopefully nobody uses this. ;)

Other attributes, including 'pure' and 'nothrow' only affect 
symbols

in the current scope.


It sounds like a bug to me if they're not consistent.

- Jonathan M Davis


Well, you got  @system to override @safe, but no @impure or 
@throws. So the behavior can kind of make sense in a way. Maybe.


Except that attributes like const, immutable, shared, and inout
can't be reversed either (in fact @system, @trusted, and @safe -
and maybe extern - are the only ones from that list that can be,
so while I could see making that separation, that's not what's
actually happening.

- Jonathan M Davis


Re: @safe, pure and nothrow at the beginning of a module

2014-08-16 Thread ketmar via Digitalmars-d-learn
On Sat, 16 Aug 2014 20:48:23 +
monarch_dodra via Digitalmars-d-learn
digitalmars-d-learn@puremagic.com wrote:

 Well, you got  @system to override @safe, but no @impure or 
 @throws. So the behavior can kind of make sense in a way. Maybe.
talking about attributes. the unability to reverse 'final:' makes me
mad. i'm almost ready to patch the compiler myself and start using this
feature even if it will be never accepted in mainline, like i'm doing
now with 'foreach (auto i; ...)'.


signature.asc
Description: PGP signature


@safe, pure and nothrow at the beginning of a module

2014-08-15 Thread Philippe Sigaud via Digitalmars-d-learn

So I'm trying to use @safe, pure and nothrow.

If I understand correctly Adam Ruppe's Cookbook, by putting

@safe:
pure:
nothrow:

at the beginning of a module, I distribute it on all definitions, 
right? Even methods, inner classes, and so on?


Because I did just that on half a dozen of modules and the 
compiler did not complain. Does that mean my code is clean(?) or 
that what I did has no effect?




Re: @safe, pure and nothrow at the beginning of a module

2014-08-15 Thread Jonathan M Davis via Digitalmars-d-learn

On Friday, 15 August 2014 at 16:54:54 UTC, Philippe Sigaud wrote:

So I'm trying to use @safe, pure and nothrow.

If I understand correctly Adam Ruppe's Cookbook, by putting

@safe:
pure:
nothrow:

at the beginning of a module, I distribute it on all 
definitions, right? Even methods, inner classes, and so on?


Because I did just that on half a dozen of modules and the 
compiler did not complain. Does that mean my code is clean(?) 
or that what I did has no effect?


Hmmm... It _should_ apply to everything, but maybe it only 
applies to the outer-level declarations. Certainly, in most 
cases, I'd be surprised if marking everything in a module with 
those attributes would work on the first go. It's _possible_, 
depending on what you're doing, but in my experience, odds are 
that you're doing _something_ that violates one or all of those 
in several places.


- Jonathan M Davis


Re: @safe, pure and nothrow at the beginning of a module

2014-08-15 Thread Philippe Sigaud via Digitalmars-d-learn
In another module I marked as '@safe:' at the top, the compiler told
me that a class opEquals could not be @safe (because Object.opEquals
is @system).

So it seems that indeed a module-level '@safe:' affects everything,
since a class method was found lacking.

(I put a @trusted attribute on it).


Re: @safe, pure and nothrow at the beginning of a module

2014-08-15 Thread Vlad Levenfeld via Digitalmars-d-learn

On Friday, 15 August 2014 at 16:54:54 UTC, Philippe Sigaud wrote:

So I'm trying to use @safe, pure and nothrow.

If I understand correctly Adam Ruppe's Cookbook, by putting

@safe:
pure:
nothrow:

at the beginning of a module, I distribute it on all 
definitions, right? Even methods, inner classes, and so on?


Because I did just that on half a dozen of modules and the 
compiler did not complain. Does that mean my code is clean(?) 
or that what I did has no effect?


I've noticed the same thing. If I want pure and nothrow to 
propage to inner structs and classes I have to place another 
label inside the class definition. Otherwise only free functions 
are affected.




Re: @safe, pure and nothrow at the beginning of a module

2014-08-15 Thread Philpax via Digitalmars-d-learn

On Friday, 15 August 2014 at 23:22:27 UTC, Vlad Levenfeld wrote:
On Friday, 15 August 2014 at 16:54:54 UTC, Philippe Sigaud 
wrote:

So I'm trying to use @safe, pure and nothrow.

If I understand correctly Adam Ruppe's Cookbook, by putting

@safe:
pure:
nothrow:

at the beginning of a module, I distribute it on all 
definitions, right? Even methods, inner classes, and so on?


Because I did just that on half a dozen of modules and the 
compiler did not complain. Does that mean my code is clean(?) 
or that what I did has no effect?


I've noticed the same thing. If I want pure and nothrow to 
propage to inner structs and classes I have to place another 
label inside the class definition. Otherwise only free 
functions are affected.


I had a similar experience when trying to use @nogc. Having to 
insert @nogc into every struct I use is mildly annoying.