Stefan Behnel wrote:
> That makes me wonder if it's not worth using such an implementation for
> 
>     cdef dict d
>     ...
>     for (key|value|key,value) in d.iter(keys|values|items)():
>         ...
> 
> internally - but *only* for the ".iter*()" variants to avoid introducing
> problems with dict modification during iteration. That would be a pretty
> cool optimisation. The generic loop code we currently generate is huge
> compared to a straight call to PyDict_Next().
> 
> Maybe a tree transformation could replace the for-loops above with a new
> DictLoopNode that would generate the respective code.

+1, good idea -- though I'd definitely not have a DictLoopNode; instead 
one should use a regular WhileStatNode containing a SimpleCallNode 
calling PyDict_Next. The direction things should be taking is less loop 
node types, not more (e.g. transform ForInStatNode into WhileStatNode if 
an iterator is used). (See also: The copy&paste-style code duplication 
going on in the generate_..._code-implementations of the current looping 
nodes.)


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

Reply via email to