Bug or Feature? compile error: to!string(const Object)
Wanderer via Digitalmars-d
digitalmars-d at puremagic.com
Wed Jul 2 20:16:09 PDT 2014
On Wednesday, 2 July 2014 at 17:21:36 UTC, Jonathan M Davis via
Digitalmars-d wrote:
> By not putting these functions on Object, it allows them to
> have whatever
> attributes they need when declared in derived types. Without
> that, we're stuck
That's not the problem of the Object class, that's the problem of
D syntax that doesn't allow to override a "normal" method with
"const" method of the same signature. Whenever the body of the
method touches argument's internals or not, whenever the result
type is immutable or not, is the implementation detail, not part
of the signature and should not prevent the method from being
overridden. Removing basic operations from the root of the class
hierarchy can cripple the whole OO model of D.
> with whatever attributes are on the one in Object, which is
> unacceptably
> restrictive. The _only_ thing we lose here is the ability to
> call any of these
> functions on Object directly, which arguably is no real loss.
>
> - Jonathan M Davis
Look at this from this point: a programmer new to D, writes his
first class. Then he tries to sort a collection/array of such
newborn objects, and - apparently - gets a compiler error because
"your class doesn't define opCmp". He wants to fix that by adding
the method. Question: where should he read about what opCmp is,
what arguments it takes, what value returns, and the most
important, what basic rules it should comply with? If these
things aren't defined in Object anymore, where they should be
defined instead? If there is no easy access to opCmp's contract,
what the chances are that the method will be written correctly?
More information about the Digitalmars-d
mailing list