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. TheMULTIPLICITYbuild has a C structure that packages all the interpreter state. With multiplicity-enabled perls,PERL_IMPLICIT_CONTEXTis 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
MULTIPLICITYandPERL_IMPLICIT_CONTEXTare 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 MULTIPLICITYversus 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
MULTIPLICITYwas replaced withPERL_IMPLICIT_CONTEXTin the perl source? What would it break?