Author ncoghlan
Recipients ncoghlan, serhiy.storchaka, vstinner
Date 2018-11-05.11:44:46
SpamBayes Score -1.0
Marked as misclassified Yes
Message-id <1541418286.62.0.788709270274.issue35134@psf.upfronthosting.co.za>
In-reply-to
Content
> To be honest, I'm not sure that I understand how "Py_LIMITED_API+0 >= 0x03050000" works and should be used.


It's described here: https://docs.python.org/3/c-api/stable.html

If a stable ABI consumer just declares "#define PY_LIMITED_API 1", then they'll get the original stable ABI as defined in Python 3.2.

If they don't care about versions prior to 3.6, they can instead declare "#define PY_LIMITED_API 0x03060000", and get access to the functions added to the stable ABI in 3.3, 3.4, 3.5, and 3.6.

For this PR though, I think it's OK to ignore that detail, as once all the internal APIs are in "Include/internal", and all the APIs that don't offer ABI stability guarantees are in "Include/TBD" (see note below), then the general rule to follow is that everything added to the headers directly in "Include/" needs a Py_LIMITED_API guard that matches the upcoming release.


Note: I wrote "TBD" rather than "pycapi" above, as "pycapi" sounds like the name of a preferred public API to me, rather than "code compiled against this API is not portable to later versions, and may not be portable to other implementations". Given the name of the macro, "Include/unlimited/*.h" may make sense, especially if those header files are all written to error out at compile time if PY_LIMITED_API is defined. "Include/unstable_abi/*.h" would be another self-describing name.
History
Date User Action Args
2018-11-05 11:44:46ncoghlansetrecipients: + ncoghlan, vstinner, serhiy.storchaka
2018-11-05 11:44:46ncoghlansetmessageid: <1541418286.62.0.788709270274.issue35134@psf.upfronthosting.co.za>
2018-11-05 11:44:46ncoghlanlinkissue35134 messages
2018-11-05 11:44:46ncoghlancreate