digitalmars.D.learn - final struct ?
- wjoe (15/15) May 19 2020 As I was reading a few source files of a library I found dozens
As I was reading a few source files of a library I found dozens of final struct declarations like this: final struct Foo { const pure final nothrow bar() { ... } } What's this supposed to express ? A final class is a class that can't be subclassed - structs can't be subclassed, so does that express something else or is the final redundant ? Additionally since it's not possible to subclass a struct it's also not possible to override bar() - does 'final bar()' mean something else ? The only relevant bits of my web search for 'dlang: final' were results for final class, virtual functions and final switch. Am I missing something ?
May 19 2020
On Tuesday, 19 May 2020 at 10:01:34 UTC, wjoe wrote:As I was reading a few source files of a library I found dozens of final struct declarations like this: final struct Foo { const pure final nothrow bar() { ... } } What's this supposed to express ? A final class is a class that can't be subclassed - structs can't be subclassed, so does that express something else or is the final redundant ? Additionally since it's not possible to subclass a struct it's also not possible to override bar() - does 'final bar()' mean something else ? The only relevant bits of my web search for 'dlang: final' were results for final class, virtual functions and final switch. Am I missing something ?It has no purpose. In D many attributes are allowed even if they have no meaning. D-Scanner checks this kind of stuff, to some extent, but not the compiler.
May 19 2020
On Tuesday, 19 May 2020 at 10:08:37 UTC, user1234 wrote:On Tuesday, 19 May 2020 at 10:01:34 UTC, wjoe wrote:Thank you.[...]It has no purpose. In D many attributes are allowed even if they have no meaning. D-Scanner checks this kind of stuff, to some extent, but not the compiler.
May 19 2020
On Tuesday, 19 May 2020 at 10:29:51 UTC, wjoe wrote:On Tuesday, 19 May 2020 at 10:08:37 UTC, user1234 wrote:A little sample to show you more cases of attributes that have no effect: --- struct Foo { nothrow nogc int field; // why not ? void func() { void nested() const { field++; // mutation is allowed because const is a noop extern int j; // extern decl in a nested func... } nothrow i = 8; // just like auto pure f = 9; // just like auto safe s = 10; // just like auto system t = s; // just like auto } } void main() { } ---On Tuesday, 19 May 2020 at 10:01:34 UTC, wjoe wrote:Thank you.[...]It has no purpose. In D many attributes are allowed even if they have no meaning. D-Scanner checks this kind of stuff, to some extent, but not the compiler.
May 19 2020
On Wednesday, 20 May 2020 at 04:40:33 UTC, user1234 wrote:On Tuesday, 19 May 2020 at 10:29:51 UTC, wjoe wrote:much appreciated :)On Tuesday, 19 May 2020 at 10:08:37 UTC, user1234 wrote:A little sample to show you more cases of attributes that have no effect: --- struct Foo { nothrow nogc int field; // why not ? void func() { void nested() const { field++; // mutation is allowed because const is a noop extern int j; // extern decl in a nested func... } nothrow i = 8; // just like auto pure f = 9; // just like auto safe s = 10; // just like auto system t = s; // just like auto } } void main() { } ---[...]Thank you.
May 20 2020