What are the prominent downsides of the D programming language?
mw
mingwu at gmail.com
Tue Sep 29 22:36:39 UTC 2020
On Tuesday, 29 September 2020 at 22:02:28 UTC, Jean-Louis Leroy
wrote:
> On Tuesday, 29 September 2020 at 21:43:03 UTC, mw wrote:
>> The key idea is to treat each parent's class attributes
>> individually (via rename/undefine/redefine/select) instead of
>> as in other multiple inheritance languages, e.g. C++'s
>> all-or-none approach, i.e. either all the parents' attributes
>> are shared or separated, and even when separated, there is no
>> proper renaming mechanism to handle it.
>
> If Base has features f and g, and Derived inherits from Base
> but undefines g, I assume that a Derived object cannot be
> substituted for a Base. Correct?
It still can; but the Derived now becomes a deferred- (in D's
term abstract-) class.
because Derived.g becomes a deferred- (in D's term abstract-)
method.
This is the demo:
https://github.com/mingwugmail/dlang_tour/tree/master/eiffel/mi
https://github.com/mingwugmail/dlang_tour/blob/master/eiffel/mi/us_resident.e#L3
undefine addr
https://github.com/mingwugmail/dlang_tour/blob/master/eiffel/mi/app.e#L17
create usr.make -- ****** Warning: addr is a deferred feature
in US_RESIDENT.
https://github.com/mingwugmail/dlang_tour/blob/master/eiffel/mi/app.e#L11
print_addr(p: PERSON) is do
io.put_string(p.addr + "%N")
end
NOTE: I'm not sure if the SmartEiffel compiler is implemented
correctly, it generate warning instead of error, during
compilation:
$ make
compile app.e -o app
****** Warning: addr is a deferred feature in US_RESIDENT.
And if you run it, it error out:
$ ./app
*** Error at Run Time ***: Deferred routine called.
4 frames in current stack.
Ideally, this program shouldn't compile; since it detected that
we are trying to create an object of a abstract (deferred) class.
Hey, just download the SmartEiffel compiler, and try the demo :-)
it's all in the same repo:
https://github.com/mingwugmail/dlang_tour/tree/master/eiffel
More information about the Digitalmars-d
mailing list