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