Re: Warning on self assignment

2018-04-25 Thread Jonathan M Davis via Digitalmars-d-learn
On Wednesday, April 25, 2018 02:32:32 Per Nordlöw via Digitalmars-d-learn 
wrote:
> On Wednesday, 25 April 2018 at 02:23:04 UTC, Mike Franklin wrote:
> > Are people using self assignment of structs as a way of
> > force-running the postblit?  Is there a valid use case for that?
> >
> > Mike
>
> If they are, there should be a better way of force-running the
> postblit.

Under what circumstances would it be reasonable to force the postblit to
run? Certainly, under any kind of normal circumstances, the postblit
constructor should only be run as a result of the object being copied -
which the compiler controls.

- Jonathan M Davis




Re: Warning on self assignment

2018-04-25 Thread Nordlöw via Digitalmars-d-learn

On Wednesday, 25 April 2018 at 03:32:09 UTC, Meta wrote:

On Wednesday, 25 April 2018 at 02:32:32 UTC, Per Nordlöw wrote:
On Wednesday, 25 April 2018 at 02:23:04 UTC, Mike Franklin 
wrote:
Are people using self assignment of structs as a way of 
force-running the postblit?  Is there a valid use case for 
that?


Mike


If they are, there should be a better way of force-running the 
postblit.


You can call __postblit or __xpostblit (I think the latter is a 
postblit introduced via a mixin or template mixin).


Thanks


Re: Warning on self assignment

2018-04-25 Thread Jonathan M Davis via Digitalmars-d-learn
On Wednesday, April 25, 2018 02:23:04 Mike Franklin via Digitalmars-d-learn 
wrote:
> On Wednesday, 25 April 2018 at 01:08:46 UTC, Arun Chandrasekaran
>
> wrote:
> > So I was telling my colleague that D would warn on self
> > assignment, but found that I was wrong.
> >
> > https://run.dlang.io/is/HLhtek
> >
> > ```
> > module a;
> >
> > import std.stdio;
> >
> > void main() {
> >
> > string a;
> > a = a;  // Can the compiler warn at this line that
> >
> > there is no effect?
> >
> > writeln(a);
> > return;
> >
> > }
> > ```
>
> Are people using self assignment of structs as a way of
> force-running the postblit?  Is there a valid use case for that?

I would be _very_ surprised if there were a valid reason to do that. That
being said, it's not necessarily true that

a = a;

has no effect. In the case of string that's basically true, but if the type
has a postblit constructor, then it definitely can have an effect (e.g. it
allocates memory or prints out that the object was copied). I don't think
that it's at all likely to have a desirable effect, and I would expect for
it to be fine for

a = a;

to be deprecated and then turned into an error on the grounds that there
isn't a reasonable reason to do it and is probably a bug - especially in
cases such as

this(A a, B b)
{
a = a;
b = b;
}

but it's likely untrue in the general case to say that that statement has no
effect.

- Jonathan M Davis



Re: Warning on self assignment

2018-04-25 Thread Jonathan M Davis via Digitalmars-d-learn
On Wednesday, April 25, 2018 03:32:09 Meta via Digitalmars-d-learn wrote:
> On Wednesday, 25 April 2018 at 02:32:32 UTC, Per Nordlöw wrote:
> > On Wednesday, 25 April 2018 at 02:23:04 UTC, Mike Franklin
> >
> > wrote:
> >> Are people using self assignment of structs as a way of
> >> force-running the postblit?  Is there a valid use case for
> >> that?
> >>
> >> Mike
> >
> > If they are, there should be a better way of force-running the
> > postblit.
>
> You can call __postblit or __xpostblit (I think the latter is a
> postblit introduced via a mixin or template mixin).

I seriously question that it's ever a good idea to call either, but
__postblit is the actual postblit constructor declared in the struct, and
__xpostblit is the function that deals with calling the postblit constructor
on all of the member variables and then calling __postblit.

- Jonathan M Davis




Re: Warning on self assignment

2018-04-24 Thread Mike Franklin via Digitalmars-d-learn

On Wednesday, 25 April 2018 at 01:20:13 UTC, Mike Franklin wrote:

It appears a bug has already been filed 
(https://issues.dlang.org/show_bug.cgi?id=11970).  I'll see if 
I can fix it.


https://github.com/dlang/dmd/pull/8208

We'll see what happens.



Re: Warning on self assignment

2018-04-24 Thread Meta via Digitalmars-d-learn

On Wednesday, 25 April 2018 at 02:32:32 UTC, Per Nordlöw wrote:
On Wednesday, 25 April 2018 at 02:23:04 UTC, Mike Franklin 
wrote:
Are people using self assignment of structs as a way of 
force-running the postblit?  Is there a valid use case for 
that?


Mike


If they are, there should be a better way of force-running the 
postblit.


You can call __postblit or __xpostblit (I think the latter is a 
postblit introduced via a mixin or template mixin).


Re: Warning on self assignment

2018-04-24 Thread Per Nordlöw via Digitalmars-d-learn

On Wednesday, 25 April 2018 at 02:23:04 UTC, Mike Franklin wrote:
Are people using self assignment of structs as a way of 
force-running the postblit?  Is there a valid use case for that?


Mike


If they are, there should be a better way of force-running the 
postblit.


Re: Warning on self assignment

2018-04-24 Thread Mike Franklin via Digitalmars-d-learn
On Wednesday, 25 April 2018 at 01:08:46 UTC, Arun Chandrasekaran 
wrote:
So I was telling my colleague that D would warn on self 
assignment, but found that I was wrong.


https://run.dlang.io/is/HLhtek

```
module a;

import std.stdio;

void main() {
string a;
a = a;  // Can the compiler warn at this line that 
there is no effect?

writeln(a);
return;
}
```


Are people using self assignment of structs as a way of 
force-running the postblit?  Is there a valid use case for that?


Mike


Re: Warning on self assignment

2018-04-24 Thread Mike Franklin via Digitalmars-d-learn
On Wednesday, 25 April 2018 at 01:08:46 UTC, Arun Chandrasekaran 
wrote:
So I was telling my colleague that D would warn on self 
assignment, but found that I was wrong.


https://run.dlang.io/is/HLhtek

```
module a;

import std.stdio;

void main() {
string a;
a = a;  // Can the compiler warn at this line that 
there is no effect?

writeln(a);
return;
}
```


It appears a bug has already been filed 
(https://issues.dlang.org/show_bug.cgi?id=11970).  I'll see if I 
can fix it.


Mike


Warning on self assignment

2018-04-24 Thread Arun Chandrasekaran via Digitalmars-d-learn
So I was telling my colleague that D would warn on self 
assignment, but found that I was wrong.


https://run.dlang.io/is/HLhtek

```
module a;

import std.stdio;

void main() {
string a;
a = a;  // Can the compiler warn at this line that 
there is no effect?

writeln(a);
return;
}
```