What is the relationship between the Perl API macros MULTIPLICITY
and PERL_IMPLICIT_CONTEXT
?
According to perlguts
:
One macro controls the major Perl build flavor:
MULTIPLICITY
. TheMULTIPLICITY
build has a C structure that packages all the interpreter state. With multiplicity-enabled perls,PERL_IMPLICIT_CONTEXT
is also normally defined, and enables the support for passing in a "hidden" first argument that represents all three data structures.
(by the way, which "three data structures" are referred to here?)
I have noticed that when I build perl with usethreads
:
./Configure -des -Dusethreads
the macros PERL_IMPLICIT_CONTEXT
and MULTIPLICITY
will both be set (defined).
Also, in embedvar.h
there is a comment that may be relevant:
The following combinations of
MULTIPLICITY
andPERL_IMPLICIT_CONTEXT
are supported:
1) none
2) MULTIPLICITY # supported for compatibility
3) MULTIPLICITY && PERL_IMPLICIT_CONTEXTAll other combinations of these flags are errors.
only #3 is supported directly, while #2 is a special case of #3 (supported by redefining vTHX appropriately).
So, when writing XS code is there any difference in writing
#ifdef MULTIPLICITY
versus writing#ifdef PERL_IMPLICIT_CONTEXT
?What is the history behind the two variables? It seems like they today could be reduced to a single. For example, what would happen if all occurences of
MULTIPLICITY
was replaced withPERL_IMPLICIT_CONTEXT
in the perl source? What would it break?