On CPAN Namespaces: Urban Namespace Planning
I’m having a bit of a conundrum over where to put my next GSL-based module. First some background.
I’m already the author of a GSL-based module (see my first rant), the horribly named
Math::GSLx::ODEIV2. This name reflects the same odd namespacing conundrum that I find myself in again, as well as the sub-library name
Duke Leto has already essentially taken the whole
Math::GSL namespace by brute-force SWIG-ing the entire library. Much of this work is not fully implemented, but still parked. Further, since the namespace is already fairly crowded, its next to impossible to tell which parts are his and which would be anyone else’s. So lets call that out of the running. Note that I’m not complaining about his efforts, but it makes choosing a name harder.
I released my first module which uses GSL under the namespace Math::GSLx, but this is also less than desirable since it seems to be related to Math::GSL which it isn’t (at least not in the way that MooseX is related to Moose). Its also hard to type and hard to search for.
This leave me thinking about starting a new toplevel, which I do not undertake lightly. My two concepts are the simple
GSL and the more namey
PerlGSL. I say namey since toplevels with names like
Mojolicious are not contentious since they represent more of a concept than an implementation detail (like
To be distinct from
Math::GSL I would encourage users of
- Make their interfaces Perlish rather than the utilitarian output the SWIG may produce
- Give their module a name that is descriptive without squatting on the sub-library name or other implemenations
In this way if two different authors want to provide an interface to GSL’s Monte Carlo multidimensional integrator, one might be
PerlGSL::Integration::MultiDim (since there are a number of 1D integrators to be considered) and another might be
Once I settle on a toplevel, I expect that I will “release” a namespace decriptor module (not unlike
Alien) describing this for future users. It might also eventually pull in the GSL library via
Alien::GSL once my
Alien::Base work permits. From there I would release
PerlGSL::Integration::MultiDim and rechristen
PerlGSL::DiffEq (assuming the toplevel
Anyway, I’m interested in your comments, so please let me know!