Note the change to XS(), and the addition of XSPROTO(), as something
authorNicholas Clark <nick@ccl4.org>
Mon, 17 Nov 2008 21:44:55 +0000 (21:44 +0000)
committerNicholas Clark <nick@ccl4.org>
Mon, 17 Nov 2008 21:44:55 +0000 (21:44 +0000)
incompatible. Note also that it's been around in 5.10.0 for nearly a
year, so one would expect any affected C++ modules to have adapted by
now.

p4raw-id: //depot/maint-5.8/perl@34871

pod/perl589delta.pod

index 9c176ce..e51f8c0 100644 (file)
@@ -9,8 +9,13 @@ the 5.8.9 release.
 
 =head1 Incompatible Changes
 
-There are no changes intentionally incompatible with 5.8.8. If any exist,
-they are bugs and reports are welcome.
+A particular construction in the source code of extensions written in C++
+may need changing. See L</"Changed Internals"> for more details. All
+extensions written in C, most written in C++, and all existing compiled
+extensions are unaffected. This was necessary to improve C++ support.
+
+Other than this, there are no changes intentionally incompatible with 5.8.8.
+If any exist, they are bugs and reports are welcome.
 
 =head1 Core Enhancements
 
@@ -1925,6 +1930,23 @@ silently exiting.)
 
 =head1 Changed Internals
 
+The perl sources can now be compiled with a C++ compiler instead of a C
+compiler. A necessary implementation details is that under C++, the macro
+C<XS> used to define XSUBs now includes an C<extern "C"> definition. A side
+effect of this is that B<C++> code that used the construction
+
+    typedef XS(SwigPerlWrapper);
+
+now needs to be written
+
+    typedef XSPROTO(SwigPerlWrapper);
+
+using the new C<XSPROTO> macro, in order to compile. C extensions are
+unaffected, although C extensions are encouraged to use C<XSPROTO> too.
+This change was present in the 5.10.0 release of perl, so any actively
+maintained code that happened to use this construction should already have
+been adapted. Code that needs changing will fail with a compilation error.
+
 C<set> magic on localizing/assigning to a magic variable will now only
 trigger for I<container magics>, i.e. it will for C<%ENV> or C<%SIG>
 but not for C<$#array>.