[Python-Dev] What do PyAPI_FUNC & PyAPI_DATA mean?
"Martin v. Löwis"
martin at v.loewis.de
Tue Apr 24 09:31:20 CEST 2012
Am 23.04.2012 15:05, schrieb Kristján Valur Jónsson:
> IMHO, we are _much_ too generous at applying this to almost whatever
> gets exposed between .c files. I have created something called the
> "restricted" api for our custom python27.dll where I use different
> macros (PyAPI_RFUNC, pyAPI_RDATA) to mean that things aren't exported
> for "restricted" builds. We use it to remove some of the easier
> access points to the dll for hackers to exploit.
> Also, once declared exported this way, things become more bothersome
> to remove again, since once could always argue that someone out there
> is using these thigns.
For this, PyAPI_FUNC doesn't really matter. A symbol that is listed in
the header file is available on Unix even without such a declaration,
so listing it in the public header file is already the step that makes
it public, not specifying it as PyAPI_FUNC.
I agree that too much API is public, but the right approach is to rename
such API to _Py*, indicating to users that we don't want them to use it.
For existing API, that's tricky; for new API, I think it should be
private by default.
See also PEP 384.
More information about the Python-Dev