Announcing: PerlGSL - A Collection of Perlish Interfaces to the Gnu Scientific Library
With this post I am happy to announce the release of my new distribution: PerlGSL
. This accompanies several other releases I’ve made in the past few days, I’ll get to those in a moment.
A few days ago I asked what I should call my new multidimensional integration module. The discussion centered on whether it was more important that it required the GSL library, or whether it was a set of bindings for the GSL (was that set complete)? Was it a dist in its own right needing a toplevel name, or that it was mathematical and should be under Math::
?
After discussion and reflection, I have decided that I wanted a toplevel namespce for this project, mostly because the need to satisfy the external dependency on the GSL separates these modules from others. To make it worthy of that honor, I have made it into a dist in its own right, not unlike other named dists like Mojolicious or Catalyst, though more modular.
Unlike those projects I am not reserving the entire namespace for myself; I want people to contribute to the PerlGSL
namespace. Is it a set of bindings to the GSL? No, but close. I’m calling the namespace a ‘collection of interfaces’. Can there can be more than one interface to the same library? I’m OK with that. Does any need to span an entire library? No. Can a library pull several functions from different places to create one useful Perl module? By all means!
So what does the dist named PerlGSL
do? First it serves to define the namespace. Second, if you install it, it will install what I am calling the “standard modules”. So far I am the only author of these “standard” modules, but I would love to add yours, though I reserve the right no to. I want the individual modules to live on their own, but be installable together; a modular, bottom-up collection, but one that can be installed together for convenience. PDL
, for example, is a great dist, but it’s huge and mostly monolithic; I can’t just install what I need. I hope that PerlGSL
finds a nice balance between monolithic and separate dists.
Ok on to the technical stuff. So far I have uploaded two new modules, and rechristened another. The new ones are PerlGSL::Integration::SingleDim
and PerlGSL::Integration::MultiDim
, I think their names give away their tasks :-). I have rechristened Math::GSLx::ODEIV2
as PerlGSL::DiffEq
. These are all part of the “standard” modules, though you only get PerlGSL::DiffEq
if you have GSL >= 1.15. I have also released a new version of Math::GSLx::ODEIV2
which announces its deprecation, though it does still provide the ode_solver
function via PerlGSL::DiffEq
for now.
I hope to add more functionality as I need them. I hope you might do the same. The GSL is too big to ask one person to wrap it all; very few people will ever need all of it. It is really good software though, and it works really well with Perl. I hope you enjoy it.
(Sorry, this has been a bit stream of consciousness, I have been working on this a little too much in the past few days to compose something concise it would seem.)
Too bad PerlGSL is a very unperlish-sounding module.
This modified advice from “On The Naming of Modules” [1] is apropos: “Your module is Perl related? No kidding? Don’t waste space in your name telling people what they already know. If your code wasn’t Perl-related of some sort, it wouldn’t be very useful.”
[1] https://pause.perl.org/pause/query?ACTION=pausenamingmodules#AvoidAPIInterfaceandthelike
@Magnus, I agree, but as you can read in the comments on the previous post, people wanted to reserve the name
GSL::
in case someone did volunteer to write a complete set of bindings. Further, part of the reason that I wrote these modules is that the GSL modules currently on CPAN are not as Perl-ish, so the name may be taken to reflect that. All that considered, I had to make a tough choice. It will have to do.Hi Joel
I’m with Mangus. It’s not too late to give it a nice and suitable namespace - GSLx::* - leaving GSL::* for a definitive interface, if that ever eventuates.
Cheers Ron
If there is a
GSL
namespace in the future, then we’d have various modules under:GSL::
Math::GSL::
PerlGSL::
This doesn’t seem ideal. From naming alone, I might guess that
PerlGSL
is either a pure-Perl implementation of GSL or one that somehow integrates GSL more tightly with the Perl language (e.g. viaDevel::Declare
). To me the question would be whether to useGSL
,GSLx
,Math::GSL
, orMath::GSLx
.Regardless, congrats on the new release!
:)
@Nick: Thanks for the good wishes! I want to mention that first, because I am very proud of these and it has been rather frustrating seeing most of the talk be about the name.
Next, I’ve been saying it all along, I would have been happy using something else, but in the absence of something good, I chose something that will work. I’ve documented quite clearly what the goals of the project are, so hopefully no one will be confused for long.
I have been joking that I wanted to name it Starman but that it was already taken. Actually I didn’t; I want people to find and use these modules. As far as I’m concerned, unless I can have
GSL
(I don’t especially want that) then I’m ok taking a toplevel that no one else will need or want. Seems that most people are turned off by a name that includes Perl? Fine, no one else will want it. (Many Python modules usepy
in the name.)In the end I hope that these modules help bring more math/science to Perl, and should I accomplish that I don’t care what the modules are called.
Joel, there are two typos in
https://metacpan.org/module/PerlGSL::Integration::SingleDim
First of all “INSTALLTION” should be “INSTALLATION”. Secondly, in
http://api.metacpan.org/source/JBERGER/PerlGSL-Integration-SingleDim-0.001/Build.PL
the repo is given as
repository => “http://github.com/jberger/PerlGSL-Integration-SingeDim”,
which should be SingleDim at the end.
Thanks Ben! I fixed those and the INSTALLTION in MultiDim as well. SingleDim will likely get another release soon, since I’m hoping to add the double-adaptive solver to the mix. This is good since I want the META links to the repo fixed. The typo in MultiDim may have to wait until there is something new in that lib.
How about making PerlGSL for beta-and-below quality modules, and when the graduate to a certain level of maturity (as decided by the community, or you as benevolent dictator) then move them into GSL? Anyway, congratulations!