[PD] naming objects

Hans-Christoph Steiner hans at at.or.at
Wed Apr 28 06:19:35 CEST 2010


On Apr 26, 2010, at 12:59 PM, Claude Heiland-Allen wrote:

> Mathieu Bouchard wrote:
>> On Mon, 26 Apr 2010, Claude Heiland-Allen wrote:
>>> One way of fixing this once and for all would be to have a  
>>> separate [objectmaker] for each canvas (including abstractions,  
>>> but not subpatches, ie, those canvases that have a  
>>> t_canvasenvironment attached to them - at least that is how I  
>>> understand that part of Pd's code).
>> Thanks for bringing back the topic. There was a thread about that  
>> on pd-dev in september 2006, e.g. :
>> http://lists.puredata.info/pipermail/pd-dev/2006-09/007591.html
>> http://lists.puredata.info/pipermail/pd-dev/2006-09/007605.html
>> http://lists.puredata.info/pipermail/pd-dev/2006-09/007607.html
>> http://lists.puredata.info/pipermail/pd-dev/2006-09/007608.html
>> http://lists.puredata.info/pipermail/pd-dev/2006-09/007609.html
>> etc
>
> Thanks for the references.
>
>>> I have a vague sketch of an implementation like this already, but  
>>> it's quite brutal to the core of Pd so I doubt the changes would  
>>> be accepted by anyone without me cleaning it up a lot and  
>>> providing a clean .diff to a current development version of Pd...
>> cleanliness is in the eye of the beholder... if you spend a lot of  
>> time cleaning, you can realise that it doesn't look any cleaner to  
>> the people you want to please, or else it can look dirtier.
>
> True...
>
>> apart from that, I think that you deserve good luck with this  
>> project and I am happy to learn that you succeeded.
>
> Still got abstraction support to re-enable, hopefully it will work  
> as planned - then I can claim success :-)  Thanks :-)
>
>> but how does «t_pd *pd_newest» work in that context ?
>
> newest is set when typedmess() sees that (target ==  
> pd_objectmaker).  So the default pd_objectmaker defers to the canvas- 
> local objectmaker, which sets pd_objectmaker to itself (before  
> retrying after any ondemand load) or a child (for imported  
> libraries) objectmaker before calling typedmess() and inspecting  
> newest.  So it's just another layer of baroque hackery, with special  
> behaviour needed in [bang] [float] [symbol] and probably a couple of  
> others
>
> some names changed for no good reason other than to see what would  
> break in the rest of Pd:
>
> ----8<----
> /* called when no more-specific method is found, happily this happens
>   at the top level canvas-local factory, so we can switch the default
>   td_legacy_objectmaker before too much damage is done... */
> static void td_objectfactory_anything(td_objectfactory *of, t_symbol  
> *s, int argc, t_atom *argv) {
>  newest = 0;
>  td_list *n;
>  td_ondemand *od = td_map_lookup(of->ondemand, s);
>  if (od) {
>    /* push object factory */
>    td_objectfactory *old = td_legacy_objectmaker;
>    td_legacy_objectmaker = of;
>    /* load on demand */
>    td_map_delete(of->ondemand, s);
>    td_ondemand_load(od);
>    td_ondemand_free(od);
>    /* retry creation */
>    /* typedmess tests for td_legacy_objectmaker */
>    typedmess(&td_legacy_objectmaker->pd, s, argc, argv);
>    /* pop object factory */
>    td_legacy_objectmaker = old;
>    if (newest) {
>      return;
>    }
>  }
>  for (n = of->children; n; n = n->next) {
>    td_objectfactory *c = n->p;
>    td_objectfactory *old = td_legacy_objectmaker;
>    td_legacy_objectmaker = c;
>    /* typedmess tests for td_legacy_objectmaker */
>    typedmess(&td_legacy_objectmaker->pd, s, argc, argv);
>    td_legacy_objectmaker = old;
>    if (newest) {
>      return;
>    }
>  }
> }
> ----8<----


This is some really interesting work, I am looking forward to trying  
it out.  I haven't really thought much about the implementation, but I  
like the idea that the canvas-local namespace is blank until loading  
something.  We might consider having a library that loads by default,  
something like how python loads a default library.

.hc

----------------------------------------------------------------------------

"A cellphone to me is just an opportunity to be irritated wherever you  
are." - Linus Torvalds





More information about the Pd-list mailing list