testinterpreterplugin and primitive cleaning?

Andreas Raab andreas.raab at gmx.de
Mon May 19 18:26:39 UTC 2003


> > Andreas has already described how to call a finalizer on 
> > the Smalltalk side. This would then call a primitive that
> > would take the ByteArray containing the handle and pass it
> > back to the library cleanup routine.
> 
> And a nice description for sure.  It feels weird to live in a 
> land without destructors  ;)

But if you want to you can get really close ;) Attached are some changes
which make it easier to deal with finalization from a users POV:

"Change Set:		EasyFinalization
Date:			19 May 2003
Author:			Andreas Raab

Support for easier finalization. In order to finalize an object use:

	someObject toFinalizeSend: aSelector to: aFinalizer with:
aResourceHandle.

For example
	Object new toFinalizeSend: #show: to: Transcript with: 'bye bye'.

Note that an object cannot finalize itself (as Squeak provides post-mortem
finalization) so you need a third party to do it. Often, the class of the
object you are finalizing is the right place to put this. In addition,
neither the finalizer nor the resource handle may reference the object
directly as this would prevent the object from being garbage collected.

A more typical example would be along the lines of:

StandardFileStream>>open
	... open the file here ...
	self toFinalizeSend: #closeHandle: to: self class with: fileHandle.

Note that we can also unregister the object, e.g., do something like

StandardFileStream>>close
	... close the file here ...
	self finalizationRegistry remove: self ifAbsent:[].

in order to prevent 'accidentally' closing the resource in finalization.
"

Cheers,
  - Andreas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: EasyFinalization.1.cs
Type: application/octet-stream
Size: 3711 bytes
Desc: not available
Url : http://lists.squeakfoundation.org/pipermail/squeak-dev/attachments/20030519/e9b431c0/EasyFinalization.1.obj


More information about the Squeak-dev mailing list