[PyQt] Clarifications on new versions of SIP/PyQt
Giovanni Bajo
rasky at develer.com
Mon Jan 18 11:36:31 GMT 2010
Il giorno lun, 18/01/2010 alle 11.33 +0000, Phil Thompson ha scritto:
> On Mon, 18 Jan 2010 12:11:20 +0100, Giovanni Bajo <rasky at develer.com>
> wrote:
> > Hi Phil,
> >
> > I read in the SIP 4.10 changelog:
> >
> > Added the -P command line option to build modules with "protected"
> > redefined to "public" if supported by the platform. This can result in
> > significantly smaller modules.
> >
> > Can you please elaborate on:
> >
> > * What consequences on user's code the -P flag has. Does it break
> > source code compatibility? What exactly is allowed when the -P flag is
> > specified, and forbidden otherwise?
> > * Why does it affect code size so much?
> >
> > Also, in PyQt changelog:
> >
> > Significantly reduced the size of the modules on Linux and MacOS/X.
> >
> > Is this related to the -P flag above? If so, does it mean that it is
> > active by default when compiling PyQt on Linux/Mac? If not, how was the
> > result achieved? Why it does not apply to Windows as well?
>
> Yes it's the same thing.
>
> Using the preprocessor to redefine "protected" as "public" is a common hack
> that allows C++ code to call protected methods from outside of a sub-class.
> It can only work if the name mangling scheme doesn't embed the access in
> the name of the method. In other words, the actual name in the shared
> library of the public void foo() is identical to the protected void foo().
> On Linux and MacOS this is the case - but it isn't on Windows.
>
> SIP has to be able to call protected methods from outside of a sub-class.
> It does this my generating extra code in the form of a sub-class and
> wrapper methods. By exploiting the hack SIP doesn't need to generate that
> extra code - which can be a significant saving.
>
> All this should be completely transparent to PyQt code.
Thanks for the clarification.
I now understand that -P can be used on any SIP-wrapped module without
ever affecting its Python user code. This is great news of course :)
Do you plan to ever turn -P on by default?
--
Giovanni Bajo
Develer S.r.l.
http://www.develer.com
More information about the PyQt
mailing list