gnustep-dev
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: EOFault / NSAutoreleasePool


From: Richard Frith-Macdonald
Subject: Re: EOFault / NSAutoreleasePool
Date: Thu, 13 Mar 2008 09:19:24 +0000


On 13 Mar 2008, at 08:45, David Ayers wrote:

David Ayers schrieb:
On 11.03.2008, at 19:37, David Ayers wrote:

We took percautions due to (the old) NSAutoreleasePool optimization:

* It's a temporary fix to support NSAutoreleasePool optimization

But now that Richard has committed that "fix" we'd also have to
implement methodForSelector: ...

Actually, I'm not sure what to do here...

Well I could revert the 'fix'.

I assumed that it was safer to call -methodForSelector: on an object than -instanceMethodForSelector: on a class, since any implementation of the former would have more information to work with (knowing details about the instance) in cases where the underlaying class was implementing a proxy to some other object. Of course, in an ideal world every class *ought* to have a correct and reliable implementation of both methods ... I was just trying to go for the option which I thought most likely to be reliable in practice.

Currently GDL2 would first fire the fault and then return the method of
the selector.  Yet for the case of NSAutoroleasePool (which is merely
supposed to call release), we do not want to fire (and we don't if
+instanceMethodForSelector: was called as it was previously).

When -methodForSelecotor: is called for other optimizations we do want
to fire (and currently do).

But now we would really have to look up which selector is being asked
for to decide which one should case the fault to fire.

This was not so apparent with +instanceMethodForSelector: because we had
this hack for NSAutoreleasePool and most other optimizations used
-methodForSelector: which caused the fault to fire and return the
selector of the real object.

Unfortunately this change seems to be part of the unstable release.
IIRC, the Debian packages are based on the stable branch? Then I'd like to leave GDL2 as is (i.e. not implement -methodForSelector:) and require
the stable branch for the GDL2 release.  Of course I'd also like this
patch to be reverted for trunk and unstable branch.

Now if debian bases it's packages off the unstable branch... then I'd
really like to see bug fix release soon.  I guess I'd volunteer to do
that...

I would want to add another special handling.  EOFaults are indeed not
standard ObjC constructs that require special treatment (Probably like
NSProxy also).  They try to be transparent objects but there are some
rules.  Just like one isn't allowed to send certain methods to
NSAutoreleasePool instances, EOFaults are also special.  I don't think
these optimizations should be allowed to have such an impact on the
semantics other features.  I think we had a good compromise with
+instanceMethodForSelector: (but we my still need to improve on that
within GDL2).  But asking us handle -methodForSelector for an
optimization seems to be rather tough.

I'm happy to revert the change ... but at the same time I think EOFault should have properly working implementations of all the basic methods of NSObject and NSProxy. However, I have no knowledge of the complexity of EOFault, so I don't know how much work that would be ...

Just let me know what you want me to do.







reply via email to

[Prev in Thread] Current Thread [Next in Thread]