Best Practices for passing option hashes into XS

Simon Wistow simon at thegestalt.org
Sun Apr 28 16:33:03 BST 2013


On Sun, Apr 28, 2013 at 11:45:04AM +0100, James Laver said:
> I think you've basically got a first question you haven't asked. Are 
> you writing a C library that you want to interface with in perl or are 
> you writing an XS library? If the former, you should probably 
> translate them into a broader structure that includes all of the 
> options you're looking for (or pass them as plain parameters into the 
> remainder of the code). If the latter, you should stick with Perl 
> datatypes.

That's an interesting question and having thought about it for a 
while I have 3 reasons why I'm not happy doing that ...

Firstly, while technically the C code written for the module is never 
used anywhere else. However I didn't write it originally - I'm merely 
patching it - and it currently doesn't use any Perl datatypes anywhere 
else so I'm loathe to add Perl datatypes for that reason.

Secondly, I have also, several times in the past, wanted to appropriate 
C code I've written or observed in Perl modules (also Ruby, PHP and 
Python extensions) and use them elsewhere and the use of Perl Datatypes 
prevents that.

Lastly, an aesthetic choice. The language Perl is written in is 
technically C but really, it's not. It is great for writing Perl but 
it's not what you'd call pretty or easily accessible. 

Moreover it *looks* different to 'regular' C. The code I'm modifying is 
written in nice (to my eyes) lower_case C dialect. The code I'm adding 
is OpenSSL Camel_case and the juxtaposition makes me wince. Adding in a 
third style might be too much to bear.

If I was going to add a fourth (less well thought out) reason it would 
be that, like dates and string encodings, one should get ones data into 
a canonical form as close to the 'edge' as possible. In this case all my 
XS and Perl code is in the .xs file and all the C is in .c file and 
never the twain shall meet. I suppose this is just the second point 
again. 


More information about the london.pm mailing list