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.)

8 Comments

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

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. via Devel::Declare). To me the question would be whether to use GSL, GSLx, Math::GSL, or Math::GSLx.

Regardless, congrats on the new release! :)

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.

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!

Leave a comment

About Joel Berger

user-pic As I delve into the deeper Perl magic I like to share what I can.