new DIP47: Outlining member functions of aggregates
Gary Willoughby
dev at nomad.so
Sun Sep 8 06:11:00 PDT 2013
On Sunday, 8 September 2013 at 12:53:11 UTC, Dicebot wrote:
>> Seriously, this goes against everything you learn as a
>> programmer, nothing should ever be typed twice and then to say
>> that the declaration and implementation could be different
>> just boggles my mind?!?! Great more work!
>
> It is no different from overriding `interface` methods in
> class. From the code structure point of view, declaration is
> interface. Implementation is implementation. Keeping those
> separate may sometimes/often be useful.
>
> That said, I am strongly against permissive rules proposed in
> this DIP. It should be similar to overriding rules - any
> smallest difference between to signatures and program stops
> compiling. Otherwise it is maintenance hell.
Well you've just argued against your first paragraph there. The
issue is (as you recognise) the extra complexity introduced with
having a declaration and an implementation both of which could be
different and/or not clear how they relate. But it goes further
than that. If this DIP is implemented and you are working with
code written like this you now have to change the code in two
places when you want to update a method. Also you now have to
find the implementation or declaration which is a total pain when
not using an IDE. You now have more files. Longer compilation
times. All for what? Not using -D on the command line? Come on!
This is entirely different to how overloading works because in
that scenario you are explicitly saying in your code this method
overrides the parent (or interface) with this one that matches
that signature exactly. There is no duplication, it's explicit
overriding which is different.
Also could you give me any examples of where keeping the
declaration separate to the implementation is "sometimes/often
useful". Because IMHO it only adds work and Java and C# do just
fine.
I don't think Walter realises how much of a plus point it is for
D to not have this 'feature'. I mean if this was implemented and
code started appearing written in this style (as it will) why
would people choose D over C++ to get stuff done when they both
offer the same headaches now?
More information about the Digitalmars-d
mailing list