Disable GC entirely
Regan Heath
regan at netmail.co.nz
Wed Apr 10 02:44:44 PDT 2013
On Wed, 10 Apr 2013 09:56:01 +0100, Manu <turkeyman at gmail.com> wrote:
> On 10 April 2013 17:01, Paulo Pinto <pjmlp at progtools.org> wrote:
>
>> On Wednesday, 10 April 2013 at 06:03:08 UTC, Manu wrote:
>>
>>> [...]
>>>
>>>
>>> I do use virtual functions, that's the point of classes. But most
>>> functions
>>> are not virtual. More-so, most functions are trivial accessors, which
>>> really shouldn't be virtual.
>>> OOP by design recommends liberal use of accessors, ie, properties, that
>>> usually just set or return a variable. Wen would you ever want
>>> @property
>>> size_t size() { return size; } to be a virtual call?
>>>
>>
>> Yes, if you want to change its behavior in a derived class.
>>
>
> That really shouldn't be encouraged. Give me an example?
I wrote some crypto code which had a property for the hash size, each
derived class returned it's own size. Now, in this case the property
size() was called rarely, but it's still a valid example.
That said, I agree we don't generally want properties and other
short-and-should-be-inlined methods to be virtual by default. But.. is D
really doing that? I mean /actually/ really doing it.
I have read most of this thread in passing and I've seen the earlier
discussion about classes in libraries etc and TBH I am not sure how/what D
does in those situations. Presumably if D does not have the source for
the library then the library class would have to have all methods virtual
- just in case it was derived from and I guess this is an issue that needs
solving somehow. But, I don't know if this is the case, or if this is
even an actual problem.
That's not the most common case however, the common case is a class you're
compiling with the rest of your classes and in this case D is not going to
make your base class methods (which have not explicitly been overridden)
virtual, they should be non-virtual and optimised/inlined/etc. They just
start out "virtually" virtual until the compiler is finished compiling
them and all derived classes, at that point all non-override base methods
should be non-virtual.
It would be interesting to see what the compiler actually does if, for
example, you compile a file with a class then in a separate compile/link
step compile a derived class and link. Does D manage to non-virtual all
non-overridden methods? If so, can it do the same with a lib/dll combo?
> That's not an exampe. I want to see a class where every function SHOULD
> be
> overloaded... That sounds like a nightmare, how can anyone other than the
> author ever expect to understand it? The fewer and more deliberately
> controlled the virtuals, the better, by almost every measure I can
> imagine.
This isn't the reasoning behind making virtual the virtual default for
methods. The reason for doing it was simply so the compiler could be
responsible for figuring it out without you having to label it manually.
You're already labelling the derived class method "override" and that
should be enough. This was a choice of convenience and ultimately
performance because you won't accidentally make a method virtual that
doesn't need to be.
R
--
Using Opera's revolutionary email client: http://www.opera.com/mail/
More information about the Digitalmars-d
mailing list