2011/5/31 Dag Sverre Seljebotn <d.s.seljeb...@astro.uio.no>:
> On 05/31/2011 01:07 PM, Vitja Makarov wrote:
>>
>> 2011/5/24 Stefan Behnel<stefan...@behnel.de>:
>>>
>>> Vitja Makarov, 23.05.2011 21:33:
>>>>
>>>> 2011/5/23 Stefan Behnel:
>>>>>
>>>>> However, once we really know which values change between yield calls,
>>>>> i.e.
>>>>> which ones need to be stored away, it will actually be less expensive
>>>>> in
>>>>> most cases. We currently pay the indirection penalty for each access,
>>>>> even
>>>>> read access, whereas the C compiler can then keep important variables
>>>>> in
>>>>> registers and only write them back once per yield.
>>>>>
>>>>
>>>> I think that all not NULL variables should be saved/restored inside
>>>> yield.
>>>> I can not really track changes only assignments.
>>>
>>> I mean "assignments" when I write "changes". When a variable is being
>>> assigned to, we should assume that its value changed. Users can be
>>> expected
>>> to be smart enough to avoid unnecessary assignments in most cases,
>>> there's
>>> no need to put work into optimising them away automatically.
>>>
>>>
>>>> for i in a:
>>>>     yield i  # j is NULL here
>>>> for j in b:
>>>>     yield j # a, b, i ,j should be saved/restored
>>>
>>> Right. However, in general, we can expect that most variables will have
>>> been
>>> initialised on a yield.
>>>
>>> We can still avoid storing away C typed variables that are not being used
>>> later on, because they are not reference counted.
>>>
>>> And if the user sets 'a' and 'i' to None between the loops, they won't
>>> need
>>> to be saved on the second yield either. But that's an optimisation, not a
>>> requirement.
>>>
>>
>> What about copying C++ structs and objects with constructor (and/or
>> overloaded = method)?
>> That wouldn't work well.
>
> Currently I believe C++ objects are only supported through pointers, which
> of course are copyable. If or when we support C++ objects on the stack, then
> we should definitely avoid copying them.
>
> If you declare a C++ class as a struct Cython-side then I think we should
> assume that we can freely invoke the copy constructor and assignment
> operator in this context.
>

May be it's better to declare struct with all the locals and then copy
it with memcpy()?

Btw cpp still wouldn't love it :(
So probably it's better to look forward for stack switching library...

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

Reply via email to