[Openmcl-devel] New (070408) OpenMCL snapshots available

Gary Byers gb at clozure.com
Mon Apr 9 22:50:57 PDT 2007



On Mon, 9 Apr 2007, Kevin Reid wrote:

> On Apr 9, 2007, at 2:54, Gary Byers wrote:
>
>>     (#/initWithFrame: new-view (ns:ns-make-rect 100 100 200 200))

A.

>>
>>     The rectangle above will -eventually- get reclaimed by the GC;
>>     if you don't want to give the GC so much work to do, you might
>>     prefer to do:
>>
>>     (ns:with-ns-rect (r 100 100 200 200)
>>       (#/initWithFrame: new-view r))

B.

>
> This seems like it ought to be automatically optimizable.
>
> Given that ns-make-rect is a function known to produce a GCable
> record and #/initWithFrame: is a function known not to store its
> arguments in the Lisp heap, said optimizer may be certain that the
> object will not necessarily be retained past the call, so
> deallocating it immediately after the call does not reduce its
> definite lifetime.
>
> (I haven't yet used OpenMCL's FFI for anything, so this is just idle
> speculation and not a feature request.)

A lot of ObjC code uses idioms like:

[new_view initWithFrame: NSMakePoint(x,y,width,height)]

That doesn't cost anything in ObjC, so I agree that it's desirable
to reduce the cost of doing the analagous thing in lisp.

I checked in some code which catches simple cases of this, and
changed some of the examples to call the constructor, trusting
the compiler to transform cases like A above into something like B.

Thanks.

>
> -- 
> Kevin Reid                            <http://homepage.mac.com/kpreid/>
>




More information about the Openmcl-devel mailing list