[PD] declare vs. namespaces - current best practice

Christof Ressi christof.ressi at gmx.at
Tue Jan 2 17:01:18 CET 2018

the current situation with namespacing is a bit unsatisfying. let's assume there are libraries 'foo' and 'bar' which both have an object called 'obj'. if both are multi-binary libraries then both objects can be created with [foo/obj] and [bar/obj]. this doesn't work, however, with single-binary libraries. you have to write [obj] and if library 'foo' is loaded first, 'obj' from library 'bar' can never be created.

a solution could be to encourage library writers who favor the single-binary style to add creators with the library name prepended, like

obj_class = class_new(gensym("obj"), (t_newmethod)obj_new,
                          (t_method)obj_free, sizeof(t_obj), 0, A_GIMME,  0);
class_addcreator((t_newmethod)obj_new, gensym("foo/obj"), A_GIMME, 0);

so users have a chance to deal with possible name collisions.

IOhannes did this in zexy with [zexy/pack] and [zexy/unpack] (for slightly different reasons), that's where I got this idea. 

having no real namespacing for single-binary libraries is actually a bit crazy, given the very generic names of many objects. 

> Gesendet: Dienstag, 02. Januar 2018 um 16:37 Uhr
> Von: "Christof Ressi" <christof.ressi at gmx.at>
> An: "Alexandre Torres Porres" <porres at gmail.com>
> Cc: pd-list at mail.iem.at
> Betreff: Re: [PD] declare vs. namespaces - current best practice
> what do you mean by [declare cyclone]?
> in case you mean [declare -stdpath cyclone]: 
> a) this would only work if cyclone is in the user's stdpath (which you can't know as a library writer)
> b) it only adds the cyclone folder to the search path. writing [gate] is a gamble because iemlib could be earlier in the search path (or the single binary library could've been loaded).
> Gesendet: Dienstag, 02. Januar 2018 um 15:58 Uhr
> Von: "Alexandre Torres Porres" <porres at gmail.com>
> An: "Christof Ressi" <christof.ressi at gmx.at>
> Cc: "João Pais" <jmmmpais at gmail.com>, pd-list at mail.iem.at
> Betreff: Re: [PD] declare vs. namespaces - current best practice
> questions
> 2018-01-02 8:02 GMT-03:00 Christof Ressi <christof.ressi at gmx.at[mailto:christof.ressi at gmx.at]>:Hi, I think in your case you shouldn't need [declare] at all. [declare -stdlib somelib] makes the assumption that 'somelib' is installed in one of Pd's standard paths. This was maybe true for Pd extended where all libraries were in the /extra folder but actually it could be any other folder (which the user added to their search paths).
> IMHO, best practice is to explicitly list your dependencies and have the user set them up correctly.
> regarding namespaces:
> In an abstraction library I would always use them if I can (unfortunately it's not possible with externals which are part of a single binary library). It eliminates the possibility that a wrong abstraction/external is called. My favourite example:
> Say that for some weird reason you're using [gate] from cyclone. If a users happens to have iemlib earlier in their search path, all your abstractions will have iemlib's [gate] object instead - which works exactly the other way around! This actually happened to a friend of mine :-D.
> won't [declare cyclone] force a priority of it over iemlib? If not, shouldn't it?
> now, for related discussions on declare/standard paths, see https://github.com/pure-data/pure-data/pull/205[https://github.com/pure-data/pure-data/pull/205] & https://github.com/pure-data/pure-data/pull/183[https://github.com/pure-data/pure-data/pull/183]
> cheers,
> happy 2018
> _______________________________________________
> Pd-list at lists.iem.at mailing list
> UNSUBSCRIBE and account-management -> https://lists.puredata.info/listinfo/pd-list

More information about the Pd-list mailing list