Okay, here's a first pass to outline what's going on with Pd's library 
loader(s):
http://www.jonathanwilkes.net/2014/10/loading-a-library-in-pure-data/

I don't cover the interaction between global and canvas-local searchpaths, nor 
how exactly the libdir loader from Pd-extended does its thing.  If anyone finds 
errors let me know and I'll correct them.

-Jonathan



On Monday, October 20, 2014 5:43 PM, katja <[email protected]> wrote:
 


Thanks for demonstrating [declare -path .], Frank. Food for thought.





On Mon, Oct 20, 2014 at 8:54 PM, Frank Barknecht <[email protected]> wrote:

Hi,
>
>here's some more food for thought: How to deal with library abstractions that
>load other objects whose name is set at runtime? This is actually pretty
>common, for example in abstractions that decorate other abstraction with e.g.
>polyphony, or when writing soundfile/score loading objects.
>
>I attached a test case that illustrates various combinations one may meet in
>this case.
>
>Please start Pd in the directory "metaprog" and open:
>
>01_loadhere.pd
>02_loadhere-declare-mylib.pd
>03_loadhere-declare-dot.pd
>
>Ciao
>--
>Frank
>
>
>
>On Mon, Oct 20, 2014 at 08:34:13AM -0700, Miller Puckette wrote:
>> Hi all,
>>
>> I think it might work simply to maintain a per-patch list of "externs"
>> currently loaded.  New patches would start out with an empty list, which 
>> would
>> then get filled in by that patch's own search procedures.
>>
>> There might be some complicated problems to resove about such searche within
>> abstractions (indeed, there are already severe problems the way that is set
>> up that I want to try to fix.)
>>
>> cheers
>> Miller
>>
>> Oe Sun, Oct 19, 2014 at 11:21:15AM -0700, Jonathan Wilkes via Pd-list wrote:
>> > Hi list,
>> > Let me describe a typical way to use Pd:
>> > 1) patch author makes a patch
>> > 2)
>> >  patch author abstracts out certain functions into Pd abstractions
>> > 3) patch author makes a self-contained collection of these abstractions 
>> > (and maybe some helper abstractions)
>> > 4) patch author takes every _reasonable_ step to make their collection 
>> > portable-- that is, to ensure that their abstractions and nested 
>> > abstractions create correctly on any version of Pd and don't collide with 
>> > anything in the standard library path.
>> >
>> > Currently a patch author cannot achieve this.  Pure data forces them to 
>> > care about what names pre-existing externals might have (which is probably 
>> > why many externals make a common name prefix part of the name of each 
>> > object).  The reason is that an abstraction's directory is not the first 
>> > place to be searched for externals or abstractions to be loaded.  It is 
>> > superceded by the searchpath set by [declare] for all of that 
>> > abstraction's parent canvases.
>> >
>> > If any of those parent canvases declare a path which
>> >  has an external or abstraction by the same name as one of the helper 
>> > abstractions, the object in that path will get created instead of the 
>> > helper abstraction.  Furthermore, if any of those parent canvases declare 
>> > a path that happens to have the same name as the subdirectory containing 
>> > the helper abstraction, then "path/objectname" will override 
>> > "subdirectory/helper".  This is even true if you use 
>> > "./subdirectory/helper".
>> >
>> > This means that if the patch author wants to grope toward portability they 
>> > have to do this, too:
>> > 5) read/search all the libnames and object names in pd-extended, and all 
>> > the other widely used libs and objects scattered about the internet.  Then 
>> > come up with a name that is human readable, but also unique enough to 
>> > prevent collisions with anything else out there.
>> >
>> > I think #5 is unreasonable, especially because creating a little zipped 
>> > directory with abstractions (or even externals) is such a common way of
>> >  making ostensibly portable libraries in Pd.  Essentially we're asking 
>> > users to do their own name-mangling.
>> >
>> > So why isn't an abstraction's directory the _first_ one to be searched by 
>> > default in Pd?  I understand katja and Matt Barber's reasons for using 
>> > [declare] to infect an entire running instance with different path 
>> > priorities, but I think that's the exception rather than the rule.  Can we 
>> > give abstraction directories precedence in the loading scheme, and maybe 
>> > use a startup flag to trigger Pd's current behavior?
>> >
>> > -Jonathan
>>
>> > _______________________________________________
>> > [email protected] mailing list
>> > UNSUBSCRIBE and account-management -> 
>> > http://lists.puredata.info/listinfo/pd-list
>>
>>
>> _______________________________________________
>> [email protected] mailing list
>> UNSUBSCRIBE and account-management -> 
>> http://lists.puredata.info/listinfo/pd-list
>
>--
> Frank Barknecht                                     _ ______footils.org__
>
>_______________________________________________
>[email protected] mailing list
>UNSUBSCRIBE and account-management -> 
>http://lists.puredata.info/listinfo/pd-list
>
>

_______________________________________________
[email protected] mailing list
UNSUBSCRIBE and account-management -> 
http://lists.puredata.info/listinfo/pd-list
_______________________________________________
[email protected] mailing list
UNSUBSCRIBE and account-management -> 
http://lists.puredata.info/listinfo/pd-list

Reply via email to