digitalmars.D.internals - Issue 7616: intentional or fix welcome?
- Neia Neutuladh (16/16) Dec 19 2018 I have a PR ready to test for issue 7616: aggregates don't inherit pure
- Walter Bright (2/25) Dec 19 2018 It's a good idea, but it will probably break a lot of code :-(
- Neia Neutuladh (3/4) Dec 19 2018 Yes. Does that mean a transition flag and a deprecation period, or submi...
- Walter Bright (3/9) Dec 19 2018 There was a good reason it is the way it is, but I don't recall just wha...
- Neia Neutuladh (27/29) Dec 19 2018 After spelunking through git (thanks git log -L!), I found out how the
- Walter Bright (3/4) Dec 20 2018 Thanks for doing the work. I suspected that was the reason. Yes, it woul...
I have a PR ready to test for issue 7616: aggregates don't inherit pure nothrow from outer scope. I would like some indication, before I spend a few hours testing it, whether a fix would be accepted. https://issues.dlang.org/show_bug.cgi?id=7616 The current behavior: pure nothrow nogc: int global; struct Foo { void foo() { global++; throw new Exception; } } Foo.foo is not pure, nothrow, or nogc. The spec does not specify any way in which pure, nothrow, or nogc attribute propagation should differ from other attributes like safe. In this case, is the spec correct, or is the compiler correct? If the spec is correct, I'll finish my PR and submit it.
Dec 19 2018
On 12/19/2018 3:29 PM, Neia Neutuladh wrote:I have a PR ready to test for issue 7616: aggregates don't inherit pure nothrow from outer scope. I would like some indication, before I spend a few hours testing it, whether a fix would be accepted. https://issues.dlang.org/show_bug.cgi?id=7616 The current behavior: pure nothrow nogc: int global; struct Foo { void foo() { global++; throw new Exception; } } Foo.foo is not pure, nothrow, or nogc. The spec does not specify any way in which pure, nothrow, or nogc attribute propagation should differ from other attributes like safe. In this case, is the spec correct, or is the compiler correct? If the spec is correct, I'll finish my PR and submit it.It's a good idea, but it will probably break a lot of code :-(
Dec 19 2018
On Wed, 19 Dec 2018 17:19:23 -0800, Walter Bright wrote:It's a good idea, but it will probably break a lot of code :-(Yes. Does that mean a transition flag and a deprecation period, or submit a DIP and see how it goes, or it's going to be rejected no matter what?
Dec 19 2018
On 12/19/2018 5:48 PM, Neia Neutuladh wrote:On Wed, 19 Dec 2018 17:19:23 -0800, Walter Bright wrote:There was a good reason it is the way it is, but I don't recall just what it was. Sigh.It's a good idea, but it will probably break a lot of code :-(Yes. Does that mean a transition flag and a deprecation period, or submit a DIP and see how it goes, or it's going to be rejected no matter what?
Dec 19 2018
On Wed, 19 Dec 2018 21:02:20 -0800, Walter Bright wrote:There was a good reason it is the way it is, but I don't recall just what it was. Sigh.After spelunking through git (thanks git log -L!), I found out how the source code came to look like it does: https://issues.dlang.org/show_bug.cgi?id=5110 The 'override' keyword propagated to functions defined inside nested classes: class Foo { override: string toString() { return ""; } class Bar { // error: doStuff doesn't override any function void doStuff() {} } } Some amount of filtering was strongly suggested. (The spec was not updated with this change.) Shin Fujishiro thought it was awkward for pure and nothrow to propagate to structs because there was no way to turn them off. Because of that, they chose to filter out pure and nothrow. This allowed you to be more flexible withh aggregates, but it did nothing for free functions; you still commonly need to reorder declarations or use `pure {}` or set the attributes on each item individually. So there *was* a reason; whether it's a good one or not is a matter of opinion. Does this mean a DIP is required?
Dec 19 2018
On 12/19/2018 9:49 PM, Neia Neutuladh wrote:Does this mean a DIP is required?Thanks for doing the work. I suspected that was the reason. Yes, it would require a DIP. But I doubt it would be accepted, because of breakage.
Dec 20 2018