[PD] pd_free vs canvas_vis
matju at artengine.ca
Sat Nov 19 21:09:54 CET 2011
Le 2011-11-19 à 11:47:00, Jonathan Wilkes a écrit :
> Could you go a little into the "etc." here? My particular use case is a
> bit too narrow to justify large-scale changes, and I'm curious
If A_POINTER uses reference-counting, then there will be no more « stale
pointers », as data will be kept for as long as necessary until the
pointers are gone, even though the data might no longer visible in a
There aren't many different cases for the «etc» because there aren't many
(standard) datatypes in Pd. But A_SYMBOL refcount is a big deal in several
ways, because they're used both for send/receive and for text, two uses
that are usually quite different from each other but that can each be a
strain on the symbol-table (both the speed of gensym and the ram usage).
For future types, however, refcounting would be useful for turning binbuf
into an atom type (named A_BINBUF or A_LIST or whatever else). It could
also become more inviting for adding various other custom datatypes (from
OpenCV, STL, PDP, A_BLOB, GF, and future things).
Reference counting is similar to what many programming languages do, and
it's also what the UNIX filesystems do : if you open a file in Linux
(using fopen() and no fclose() yet) then you can keep on reading/writing
it until all fopen() calls get a matching fclose() or equivalent (exit(),
or a reboot+scandisk). That's unlike what I remember from Windows, in
which you can't delete the file because it's «busy».
>> The new API would require only adding function calls to the source, to mark which pointers are still potentially in use. The new API could compile to either the new ABI or the old ABI using header tricks.
> Does that mean you could compile Pd to use old externals (basically everything at present), or new (future) externals, but not
Well, it depends on how much effort is done at runtime to conciliate them.
It could be made so that old externals can run in new Pd at the cost of
giving up refcount on anything that those externs touch, and perhaps a
bigger runtime cost (because adding one more case at each time you
decrease the count, and one more case each time you send a message).
But overall, even changing all externals is a lot simpler than trying to
organise a mark-sweep real-time collector that does not suck (think of all
the RAM usage of Java... wait, don't !).
| Mathieu BOUCHARD ----- téléphone : +1.514.383.3801 ----- Montréal, QC
More information about the Pd-list