Nikita Nemkin, 04.06.2013 12:17:
> On Tue, 04 Jun 2013 14:47:47 +0600, Stefan Behnel wrote:
>> Nikita Nemkin, 04.06.2013 10:29:
>>> I just wanted to say that this
>>> https://github.com/cython/cython/commit/a3ace265e68ad97c24ce2b52d99d45b60b26eda2#L1L73
>>>
>>> renaming seems totally unnecessary as it makes any array code
>>> verbose and ugly. I often have to create extra local variables
>>> just to avoid endless something.data.as_ints repetition.
>>
>> Are one-shot operations on arrays really so common for you that the
>> explicit "unpacking" step matters for your code?
> 
> I use array in most places where you would normally see bare pointer and
> malloc/PyMem_Malloc. Automatic memory management FTW.
> 
> Many people would do the same if they knew about arrays
> and a special support for them that Cython provides.
> (Personally, I had discovered it by browsing standard include .pxd files)
> 
> Array class members also have "self." prepended which does not help brevity.
> So, yeah, it matters. Sure I can live with overly verbose names,
> but there is certainly room for improvement.
> 
> ATM I have 96 cases of ".data.as_XXX" in my codebase and that's after
> folding some of them using local variables
> (like "cdef int* segments = self.segments.data.as_ints").

And the local assignment also resolves the pointer indirection for "self"
here, which the C compiler can't really reason about otherwise.


>>> What was the reason for ranaming? It would be really nice to
>>> reintroduce old names (_i, _d etc).
>>
>> IMHO, the explicit names read better and make it clear what happens.
> 
> Indexing makes it clear enough that, well, indexing happens.
> Direct array access is sort of magic anyway.
> Here is an example of unnecessary verbosity:
> 
>     while width + piDx.data.as_ints[start] < maxWidth:
>         width += piDx.data.as_ints[start]
>         start += 1

Agreed that it's more verbose than necessary, but my gut feeling is still:
if it's worth shorting, it's worth assigning. If it's not worth assigning,
it's likely not worth shortening either.

IIRC, the reason why there's a redundant ".data." bit in there is a)
because of C declaration issues and b) because we wanted to keep the
namespace impact on the Python array object interface as low as possible.


>> Also, I think the original idea was that most people shouldn't access the
>> field directly and use memory views and the buffer interface instead, at
>> least for user provided data. It might be a little different for arrays
>> that are only used internally.
> 
> When using buffer interface, it really doesn't matter if user have passed
> an array or ndarray or whatever. Buffer interface covers everything,
> array-specific declarations are irrelevant.
> 
> But when I know that the variable is an array, buffer declaration,
> acquisition and release code is dead weight (especially for class
> members which can't have buffer declaration attached to themselves,
> necessitating an extra local variable to declare a fast access view).

That's what I meant with "only used locally".

So, I do see your problem, but it's not obvious to me that it's worth doing
something about it. Especially not something as broad as duplicating the
direct access interface.

Stefan

_______________________________________________
cython-devel mailing list
cython-devel@python.org
http://mail.python.org/mailman/listinfo/cython-devel

Reply via email to