digitalmars.D.bugs - [Issue 5129] New: More strict 'abstract' management
- d-bugmail puremagic.com (27/27) Oct 29 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5129
- d-bugmail puremagic.com (14/14) Oct 29 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5129
- d-bugmail puremagic.com (19/24) Oct 30 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5129
- d-bugmail puremagic.com (9/13) Oct 30 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5129
- d-bugmail puremagic.com (9/12) Oct 30 2010 http://d.puremagic.com/issues/show_bug.cgi?id=5129
- d-bugmail puremagic.com (19/19) Jan 23 2012 http://d.puremagic.com/issues/show_bug.cgi?id=5129
http://d.puremagic.com/issues/show_bug.cgi?id=5129 Summary: More strict 'abstract' management Product: D Version: D2 Platform: x86 OS/Version: Windows Status: NEW Keywords: diagnostic Severity: normal Priority: P2 Component: DMD AssignedTo: nobody puremagic.com ReportedBy: bearophile_hugs eml.cc DMD 2.050beta compiles this, then it fails at linking time: abstract class A { public void foo(); } class B : A {} void main() {} What I expect: A compile-time error generated by the compiler, something like: error(4): class 'B' is not abstract, yet it doesn't implement abstract method 'foo' of class 'A' it inherits from. See also bug 2946 -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 29 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5129 nfxjfg gmail.com changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |nfxjfg gmail.com Declarations like "foo" in your example work roughly like they do in C++ (except that it makes less sense in D). Just look at how object.di works: it's full of bodyless non-abstract methods. All dmd can do is to cause a linking error. Even though it's an obscure feature with questionable value. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 29 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5129 Stewart Gordon <smjg iname.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Keywords|diagnostic |link-failure, spec CC| |smjg iname.comDeclarations like "foo" in your example work roughly like they do in C++ (except that it makes less sense in D). Just look at how object.di works: it's full of bodyless non-abstract methods.It was once the case that bodyless functions are implicitly abstract. This was partly changed http://www.digitalmars.com/d/1.0/changelog1.html#new080 but I don't know what change was made to the spec to reflect this. I think the underlying problem is that there's no mandatory explicit notation for externally defined functions.All dmd can do is to cause a linking error. Even though it's an obscure feature with questionable value.Not necessarily - it could realise that classes A and B and never used and so generate no code for them. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 30 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5129It was once the case that bodyless functions are implicitly abstract. This was partly changed http://www.digitalmars.com/d/1.0/changelog1.html#new080 but I don't know what change was made to the spec to reflect this.Not sure, but I remember one case (far post dmd 1.000) where dmd silently accepted a function without body as member of an abstract class, while it caused linker errors on LDC. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 30 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5129Not sure, but I remember one case (far post dmd 1.000) where dmd silently accepted a function without body as member of an abstract class, while it caused linker errors on LDC.Very often when things aren't defined & enforced in a tidy way, sooner or later you will have some troubles. Compared to the Java compiler DMD is incredibly sloppy, and this will probably cause some troubles later. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Oct 30 2010
http://d.puremagic.com/issues/show_bug.cgi?id=5129 Walter Bright <bugzilla digitalmars.com> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|NEW |RESOLVED CC| |bugzilla digitalmars.com Resolution| |INVALID 23:46:05 PST --- This is not a bug, as in another module there could be a class C that derives from B and implements foo(). As documented, D accepts non-abstract functions with no body declared as: void foo(); with the idea that the user will be supplying a body somewhere else - perhaps even a C function or an assembler one. It's another way of doing encapsulation by having an opaque implementation. In fact, it's used by the TypeInfo's. I object to calling this "incredibly sloppy". -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Jan 23 2012