libclass-xsaccessor-perl: defining PERL_CORE for external XS modules and ABI stability

Ansgar Burchardt ansgar at 43-1.org
Mon Aug 16 04:50:23 UTC 2010


Hi,

the last upstream release of libclass-xsaccessor-perl (1.07) contains
this change:

--8<---------------cut here---------------start------------->8---
--- XSAccessor.xs       (revision 61639)
+++ XSAccessor.xs       (working copy)
@@ -1,7 +1,33 @@
 #define PERL_NO_GET_CONTEXT
 #include "EXTERN.h"
 #include "perl.h"
+
+/*
+ * Quoting chocolateboy from his Method::Lexical module at 2009-02-08:
+ *
+ * for binary compatibility (see perlapi.h), XS modules perform a function call to
+ * access each and every interpreter variable. So, for instance, an innocuous-looking
+ * reference to PL_op becomes:
+ *
+ *     (*Perl_Iop_ptr(my_perl))
+ *
+ * This (obviously) impacts performance. Internally, PL_op is accessed as:
+ *
+ *     my_perl->Iop
+ *
+ * (in threaded/multiplicity builds (see intrpvar.h)), which is significantly faster.
+ *
+ * defining PERL_CORE gets us the fast version, at the expense of a future maintenance release
+ * possibly breaking things: http://www.xray.mpe.mpg.de/mailing-lists/perl5-porters/2008-04/msg00171.html
+ *
+ * Rather than globally defining PERL_CORE, which pokes its fingers into various headers, exposing
+ * internals we'd rather not see, just define it for XSUB.h, which includes
+ * perlapi.h, which imposes the speed limit.
+ */
+
+#define PERL_CORE
 #include "XSUB.h"
+#undef PERL_CORE
 
 #include "ppport.h"
 
--8<---------------cut here---------------end--------------->8---

I wonder whether it is safe to keep this in Debian as the XS modules depend
on perlapi-*, or if this does not guarantee that (internal) offsets do
not change and we should not define PERL_CORE for the Debian package.

Regards,
Ansgar




More information about the Perl-maintainers mailing list