[Issue 3934] Some untidy attributes
https://issues.dlang.org/show_bug.cgi?id=3934 Mathias LANG changed: What|Removed |Added Status|NEW |RESOLVED CC||pro.mathias.l...@gmail.com Resolution|--- |INVALID --- Comment #29 from Mathias LANG --- There are way too many examples (some of which have been addressed, many still valid) for this to be actionable. A proper proposal would most likely take a lot of time and go through the DIP process, as it is a fundamental change to the grammar (regardless of its validity). Trivial items such as protection attributes on class inheritance and redundant attributes have been addressed. Some items are also documented here: https://github.com/Hackerpilot/Idiotmatic-D/blob/master/idiotmatic.d > I like the strictness of the Java compiler, it makes sure your attributes are > all correct and meaningful, this helps avoid possible bugs. To address this specific point: DMD being lax, while unsettling to some, is also great for generic code. There are quite a lot of cases where DMD being stricter would result in worst code because it would require some special casing in generic code. Closing as INVALID. --
[Issue 3934] Some untidy attributes
https://issues.dlang.org/show_bug.cgi?id=3934 Ivan Kazmenko ga...@mail.ru changed: What|Removed |Added See Also||https://issues.dlang.org/sh ||ow_bug.cgi?id=12638 --
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #28 from bearophile_h...@eml.cc 2012-10-07 05:48:44 PDT --- struct Foo { protected void bar() {} } void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #27 from bearophile_h...@eml.cc 2012-09-08 07:51:04 PDT --- Found by Ellery Newcomer: alias enum int e; void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #25 from bearophile_h...@eml.cc 2012-01-08 07:09:32 PST --- By mleise on IRC #D: struct Foo { void bar() const const const {} } void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #26 from bearophile_h...@eml.cc 2012-01-08 07:22:14 PST --- By mleise on IRC #D: class Base { abstract void foo(); } class Ext : Base { override void foo(); // override should require an implementation } void main() {} If uncaught by the compiler this causes a linker error. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #20 from bearophile_h...@eml.cc 2011-07-24 05:51:32 PDT --- This is accepted by DMD 2.054, but if it's not meaningful in D then I suggest to statically disallow it, as the other examples: class Foo {} class Bar : public Foo {} void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #21 from Stewart Gordon s...@iname.com 2011-07-24 07:38:37 PDT --- (In reply to comment #20) This is accepted by DMD 2.054, but if it's not meaningful in D then I suggest to statically disallow it, as the other examples: class Foo {} class Bar : public Foo {} void main() {} There are no attributes as such in your example. And I don't see anything that isn't meaningful. So what do you mean? -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 klickverbot c...@klickverbot.at changed: What|Removed |Added CC||c...@klickverbot.at --- Comment #22 from klickverbot c...@klickverbot.at 2011-07-24 07:42:16 PDT --- (In reply to comment #21) (In reply to comment #20) class Foo {} class Bar : public Foo {} void main() {} There are no attributes as such in your example. And I don't see anything that isn't meaningful. So what do you mean? I think bearophile is referring to the �public� protection attribute in the SuperClass. This is explicitly allowed by the grammar, but I don't know off hand if it actually has any effect in the current implementation, other than giving C++ programmers a wrong sense of coziness maybe. ;) -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #23 from Stewart Gordon s...@iname.com 2011-07-24 07:54:03 PDT --- (In reply to comment #22) (In reply to comment #21) (In reply to comment #20) class Foo {} class Bar : public Foo {} void main() {} There are no attributes as such in your example. And I don't see anything that isn't meaningful. So what do you mean? I think bearophile is referring to the �public� protection attribute in the SuperClass. This is explicitly allowed by the grammar, but I don't know off hand if it actually has any effect in the current implementation, other than giving C++ programmers a wrong sense of coziness maybe. ;) Therein lies my point - it isn't an attribute as such, and it isn't meaningless. It means the same as in C++, though it doesn't make sense to have the feature in D. But this point is covered by issue 177. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #24 from kenn...@gmail.com 2011-07-24 09:09:15 PDT --- (In reply to comment #20) This is accepted by DMD 2.054, but if it's not meaningful in D then I suggest to statically disallow it, as the other examples: class Foo {} class Bar : public Foo {} void main() {} Bug 177, Bug 5299. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #16 from bearophile_h...@eml.cc 2011-01-23 07:18:39 PST --- This shows something strange, dmd 2.051: const struct Foo1 { int* p; } struct Foo2 { int* p; } void bar1(Foo1 f1) {} void bar2(Foo2 f2) {} void main() { const f1 = Foo1(); bar1(f1); // no error const f2 = Foo2(); bar2(f2); // error } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #17 from bearophile_h...@eml.cc 2011-01-23 09:26:37 PST --- (In reply to comment #16) This shows something strange, dmd 2.051: According to Mafi that code is correct: http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D.learnarticle_id=24058 I think it's absolutely correct. Look: Foo3 is declared as const struct meaning all it's members are const. We are passing a struct like that to bar3: const Foo3 { const int* p} which is implicitely converted to: Foo3 { const int* p } //not ref !! Because it's not ref you can't manipulate the original struct anyways and the pointer is still const. As long as you don't cast you cannot change what the pointer points to so this implicit conversion is correct IMO. It's like const(T[]) = const(T)[] . -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #13 from bearophile_h...@eml.cc 2010-11-08 03:24:30 PST --- This is C# code: class Foo {} public class Test : Foo { public static void Main() {} } The C# compiler gives this error: prog.cs(2,14): error CS0060: Inconsistent accessibility: base class `Foo' is less accessible than class `Test' While the D 2.050 compiler gives no errors with this code: private class Foo {} public class Bar : Foo {} void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #14 from bearophile_h...@eml.cc 2010-11-08 04:19:31 PST --- This bug is now fixed: auto pure foo() { return 1; } pure void bar() { foo(); } void main() {} DMD 2.050 gives the error: test.d(5): Error: pure function 'bar' cannot call impure function 'foo' -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #15 from bearophile_h...@eml.cc 2010-11-08 04:38:03 PST --- (In reply to comment #14) This bug is now fixed: Ignore comment #14, the bug is not fixed, sorry. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #12 from bearophile_h...@eml.cc 2010-11-05 11:17:28 PDT --- See the closed bug 5171 for code that may be disallowed statically: class A { @disable override equals_t opEquals(Object other) { return false; } } void main() { auto a = new A(); auto b = new A(); if(a == b) assert(0); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #11 from bearophile_h...@eml.cc 2010-09-26 10:40:03 PDT --- This compiles with no errors with dmd 2.049, but I'd like a compile-time error similar to manifest constants are always static: void foo() { static enum x = 10; } void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #10 from bearophile_h...@eml.cc 2010-09-21 13:28:24 PDT --- Structs can't be subclassed, so protected struct fields seem a bug. This compiles with dmd 2.049: struct Foo { protected int x; } void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #8 from bearophile_h...@eml.cc 2010-08-19 06:14:56 PDT --- From bernardh on IRC, this program compiles: auto scope shared import std.stdio; void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #9 from bearophile_h...@eml.cc 2010-08-19 09:11:44 PDT --- This D2 program compiles and runs with DMD 2.048 with no errors, but I think the compiler has to flag this usage of the 'private final' attributes as incorrect: import std.c.stdio: puts; class Base { private final ~this() { puts(Base.~this); } } class Derived : Base { private final ~this() { puts(Derived.~this); } } void main() { new Derived(); } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #7 from bearophile_h...@eml.cc 2010-08-17 06:07:58 PDT --- From Simen kjaeraas: __gshared struct foo { int n; } -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #4 from bearophile_h...@eml.cc 2010-06-30 13:14:48 PDT --- One from Leopold Walkling, this compiles: auto void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #5 from Stewart Gordon s...@iname.com 2010-06-30 16:33:29 PDT --- I certainly call that a bug. Partly a consequence of auto being an attribute rather than a placeholder for a type, though this seems to be partly for backward compatibility with the old meaning of auto. Either way, it's an inapplicable attribute and one that ought not to be accepted. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #3 from bearophile_h...@eml.cc 2010-06-15 17:10:04 PDT --- This too is wrong (this compiles with dmd v2.047): struct Foo { static invariant() {} } void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 Stewart Gordon s...@iname.com changed: What|Removed |Added CC||s...@iname.com --- Comment #2 from Stewart Gordon s...@iname.com 2010-05-30 14:21:25 PDT --- This seems to be partly a duplicate of issue 3118. Without a clear spec on the matter, it's hard to decide which of these it's a bug that the compiler accepts, but certainly foo3 and foo4 AISI. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---
[Issue 3934] Some untidy attributes
http://d.puremagic.com/issues/show_bug.cgi?id=3934 --- Comment #1 from bearophile_h...@eml.cc 2010-04-14 07:35:46 PDT --- A person in the IRC channel suggests that this too can be bad (this program compiles and runs with dmd 2.043): extern struct foo; void main() {} -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email --- You are receiving this mail because: ---