[Python-Dev] Constifying C API
Tres Seaver
tseaver at palladion.com
Sun Dec 18 20:52:46 EST 2016
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
On 12/18/2016 07:54 PM, Nick Coghlan wrote:
> On 18 December 2016 at 18:31, Serhiy Storchaka <storchaka at gmail.com>
> wrote:
>
>> Later I'm planning following changes:
>>
>> * Add the const qualifier to the result of functions that return
>> references to internal representation of immutable objects, like
>> PyBytes_AS_STRING() or PyUnicode_DATA(). While CPython internally
>> can modify the content of immutable objets, this is very dangerous,
>> because this can invalidates invariants and cached values.
>> Third-party code shouldn't do this.
>>
>> * Add the const qualifier to the format field of Py_buffer. It is a
>> reference to C string literal or to the content of bytes object.
>> Mutating its content is an error. Only _testbuffer overuses the
>> format field of internal Py_buffer object for owning a reference to
>> allocated memory. But this is not leaked outside.
>>
>> What are you think about this?
>>
>
> As long as it's on the default branch with appropriate notes in the C
> porting section of the 3.7 What's New, turning these kinds of runtime
> errors into compilation errors sounds like the right thing to do to
> me.
>
> One key aspect from my perspective is that code that is updated to
> correctly declare the destination storage as a const pointer will
> still compile against the old API variants that return a mutable
> pointer, so any problems this finds in third party code are likely to
> be resolved for older 3.x releases as well.
Agreed. Anything the compiler ralfs on after adding 'const' (where the
actual target must be immutable) already had the fuse smoldering. FWIW I
help maintain some *old* C extensions (fifteen+ years and counting), and
am as likely to be affected as anyone.
Tres
- --
===================================================================
Tres Seaver +1 540-429-0999 tseaver at palladion.com
Palladion Software "Excellence by Design" http://palladion.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1
iQIcBAEBAgAGBQJYVz1oAAoJEPKpaDSJE9HYNc0P/2ZfDQeWmecy/deL4mqvLh42
iZuyyXoYmsEvHWgTL1gCOK3isUAKn5MMDAk79ezGkbmrmerxV0EVCrIsQMaCBuhY
ypWxsPHa1nUpJpTuziHi452ETDq606nDgUXJnNUtR1xqVlFNpNskTYdexkxv4K5W
E+ANwNvE+/YZN7t8KmIcR8pczRGhWJ5X67+etG0KlJ0mDR13RIpUZs7OfTFsXRi1
YHYgI1uKKkphB/KdPxeQfN4G5CgiRK3fJ8sQO2ojJKt3xMqPJcmGG0KIHZi0waXA
Uqh+ukKE1tWDdBPYubv+4nlrtWQye6kX9gUu/gXYXM9C7h3u9B9otYXblNGqZAol
q6+QfnSmOCZkGeaGw+Gwzz+B2yQcz4phuaz1AirtYUA66s0vbLuKi+SNiVei2gzn
M/xd1HpZOxFVk/QkZYHlOW0k2F8o73ecWSONo1xTgi7pdjDrAALhbQ+7Z/dBHn0i
474VoRXcEqVwST87CqbEXyW82GexOppPGqi0jgeAFWJtb0HytuLv21l/h7XgX/TV
lmrxGAh6VGl2FOIQolgSNKaVQHsxh2xDq8lL7hGgXuDcI4fD3d+p6bu3tpN6nXMA
b4k0TAry7PfKASk0MJgU9aZCSFulDR8ghnx+nUte0OrDdd+nqaovtZcT1Y52glU/
FBw00PcU9+MWZ+zlQNfs
=/M++
-----END PGP SIGNATURE-----
More information about the Python-Dev
mailing list