[Cython] [cython-users] Cython .pxd introspection: listing defined constants
Stefan Behnel
stefan_ml at behnel.de
Mon Feb 21 19:26:52 CET 2011
Robert Bradshaw, 21.02.2011 19:11:
> On Sun, Feb 20, 2011 at 1:26 AM, Stefan Behnel wrote:
>> W. Trevor King, 20.02.2011 00:31:
>>>
>>> On Sat, Feb 19, 2011 at 02:04:16PM -0800, Robert Bradshaw wrote:
>>>>
>>>> On Sat, Feb 19, 2011 at 1:45 PM, W. Trevor King wrote:
>>>>>
>>>>> It is unclear to me what `cdef public struct` means. I think it
>>>>> should mean "Python bindings can alter this struct's definition",
>>>>> which doesn't make sense.
>>>>
>>>> I think it should mean "this struct is accessible from Python (as X)"
>>>
>>> Wouldn't that be "cdef readonly struct X"?
>>
>> The problem here is that "public" is used differently in different contexts
>> - usually "exported at the C level" in this kind of context, with the quirk
>> of meaning "modifiable at the Python level" for cdef class attributes.
>>
>> The potentially clearer "cpdef" means "overridable at the Python level" as
>> well as "visible at the Python level", so it doesn't quite match the second
>> meaning by itself.
>>
>> Structs won't be overridable at the Python level, I guess, so cpdef isn't
>> quite right. The intention here isn't to export them at the C level either,
>> so "public" isn't right.
>>
>> We could tweak the "cpdef" meaning into "cdef thing mapped to the Python
>> level, and overridable if supported in the given context", which would lead
>> to broader applicability. Then we could allow
>
> That's what I was thinking.
>
>> cpdef readonly struct ...
>>
>> I think that's a lot clearer than adding to the double meaning of "public".
>> I would also prefer if Python accessible cdef class attributes were defined
>> using "cpdef". We could potentially make that the preferred way in the
>> future?
>
> We could allow it, but -1 to disallowing "cdef class"
With "preferred way", I was suggesting that we could *deprecate*
cdef public int x
cdef readonly object y
for cdef class properties in favour of
cpdef int x
cpdef readonly object y
and change the documentation accordingly etc., so that at least new users
get used to the new way. The old way would likely continue to be supported
until Cython 2.0 or so, for the holy cow's sake...
Stefan
More information about the cython-devel
mailing list