Stefan Behnel wrote:
> Dag Sverre Seljebotn wrote:
>> Stefan Behnel wrote:
>>> Dag Sverre Seljebotn wrote:
>>>> Stefan Behnel wrote:
>>>>> I also read in CEP 517 that resizing is not to be supported. Why not?
>>>>> It
>>>>> could just fail with an exception when it notices that there are live
>>>>> buffers on it.
>>>> It just seemed kind of useless if only Cython-allocated memory can be
>>>> resized, and not C arrays or memory in other Python objects. But we
>>>> could do it for Cython-allocated memory, perhaps by extending PEP 3118
>>>> with some Cython-specific flags etc.
>>> I don't understand what resizing has to do with PEP 3118 at all. You
>>> obviously wouldn't resize a buffer view but the memory object itself.
>>> The
>>> only link is that resizing would fail if you reduced the size of a
>>> memory
>>> object while there is a live buffer view on it.
>> I've been struggling to find the right terms for this the entire spring
>> -- perhaps the right term for CEP 517 is "typed memoryviews", although
>> which can allocate new memory when necesarry.
> 
> You keep adding features as we keep going. ;)
> 
> Then we have three types:
> 
> 1) a dynamic array type
> - allocates memory on creation
> - reallocates on (explicit) resizing, e.g. a .resize() method
> - supports PEP 3118 (and disables shrinking with live buffers)
> - returns a typed value on indexing
> - returns a typed array copy on slicing
> - behaves like a tuple otherwise
> 
> 2) a typed memory view
> - created on top of a buffer (or array)
> - never allocates memory (for data, that is)
> - creates a new view object on slicing
> - behaves like an array otherwise

This last point is dangerous as we seem to disagree about what an array is.

> 
> 3) a SIMD memory view
> - created on top of a buffer, array or memory view
> - supports parallel per-item arithmetic
> - behaves like a memory view otherwise

Good summary. Starting from this: I want int[:,:] to be the combination 
of 2) and 3) (the catch being I can't promise to implement the 3-part 
myself this time around, but I think somebody will pick it up eventually).

An issue which is not covered here is that when doing

cdef your-type-3) a, b, c
# assign b and c
a = b + c

then new memory must be created as the target of "b + c", and then 3) 
will be hard-coded to allocate something (which could likely be 1), but 
there will be no references to it anywhere it except through 3), so no 
resize can happen).

-- 
Dag Sverre
_______________________________________________
Cython-dev mailing list
[email protected]
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to