[gdal-dev] Perl bindings in 2.0

Ari Jolma ari.jolma at gmail.com
Thu Mar 5 07:35:45 PST 2015


Folks,

I don't know what's the amount of use of the Perl bindings, my feeling 
is that it is not so much since there's not so much discussion on this 
list or elsewhere. Anyway, I use them and want to develop them further. 
Version 2.0 is chance to do some improvements, so I'm trying.

Perl bindings have quite a lot of Perl code on top of what Swig spits 
out. I like to think that has happened due to the difference between 
what C/C++ is good at and what a high level dynamic language like Perl 
is good at.

I have most trouble with OGR, probably because of the new concept of 
multiple geometry fields and lots of API for definitions (field and 
feature), which I think would perhaps be best hidden away and replaced 
with hashes etc. which are easy to use in Perl.

These are the main ideas that I have and which I'm trying to use as 
guidelines for the implementation, any comments are welcome:

- Prefer named parameters to strict lists. I.e., accept hashes (or 
hashrefs) as parameters and study their contents. This especially so in 
constructors.

- Names of concepts. This is a bit hard since for example OGR itself 
uses "Field" to mean both feature attribute and the definition of a 
feature attribute. Should the new geometry fields (also, somehow spatial 
attribute sounds better) be strictly distinct from non-geometry 
(non-spatial?) fields? For example in method CreateLayer, should there 
be a named parameter Fields or Fields and Geom(etry)Fields? BTW, 
abbreviated forms "GeomField" and "Defn" seem to be a part of GDAL 
vocabulary, perhaps I should stick to them and avoid as much as possible 
"spatial", "schema", "attribute", and others (Schema is already used in 
Perl bindings).

- Prefer string constants, i.e., "Point" instead of $Geo::OGR::wkbPoint. 
This is already in the bindings but I plan to make them automatic (the 
strings are taken from the code in initialization instead of being 
hard-coded) and add more support for them, for example class methods to 
list all constants of certain kind.

- Getters and Setters. Perl has a tradition of having dual purpose 
attribute methods, which is however questioned in Damian Conway's Perl 
Best Practices. I've introduced some into the bindings as alternatives 
but am in doubt now. Swig ties attributes and makes the objects 
hash-like but I don't like, one reason is because I prefer string constants.

- Use confess instead of croak. The stack trace gives a much better 
understanding of what went wrong in this case although I usually don't 
like them. I also plan to add many more checks into the bindings to 
avoid strange failures.

- In general simple is better, for example only one name for one 
concept, but it is quite hard to come up with simple and elegant design. 
I'm afraid that the current design is neither. Maybe the goal should be 
to make simple things simple with the bindings but complex things also 
possible.

Best,

Ari



More information about the gdal-dev mailing list