new DIP47: Outlining member functions of aggregates

Paulo Pinto pjmlp at progtools.org
Sun Sep 8 06:22:37 PDT 2013


Am 08.09.2013 15:11, schrieb Gary Willoughby:
> 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?

Not only Java and C#, but any other language with module support, even 
the ones that have native compilers by default.

The ones that offer interface definitions, like Delphi, Modula-{2,3}, ML 
family among many others, have a model that D already offers via the .di 
files.

So I also agree this is a step backwards.

--
Paulo


More information about the Digitalmars-d mailing list