[Cython] CyFunction refactoring plan

Vitja Makarov vitja.makarov at gmail.com
Sun Oct 2 19:52:23 CEST 2011


2011/9/30 mark florisson <markflorisson88 at gmail.com>:
> On 30 September 2011 07:47, Vitja Makarov <vitja.makarov at gmail.com> wrote:
>> 2011/9/30 Vitja Makarov <vitja.makarov at gmail.com>:
>>> 2011/9/30 Robert Bradshaw <robertwb at math.washington.edu>:
>>>> On Thu, Sep 29, 2011 at 10:43 PM, Stefan Behnel <stefan_ml at behnel.de> wrote:
>>>>> Vitja Makarov, 30.09.2011 06:41:
>>>>>>
>>>>>> 2011/9/28 Vitja Makarov:
>>>>>>>
>>>>>>> I tried to build simple plan for ongoing cython function refactoring
>>>>>>>
>>>>>>> * Replace assignment synthesis with SingleAssignmentNode, where LHS is
>>>>>>> NameNode and RHS is PyCFunctionNode
>>>>>>> * Split function body into python wrapper and C function
>>>>>>> http://wiki.cython.org/enhancements/generators#Pythonfunctionrefactoring
>>>>>>>
>>>>>>> Then we can implement some features and optimizations:
>>>>>>>
>>>>>>> * Reduce difference between cdef and def functions
>>>>>>> * Store runtime evaluated default values inside CyFunction, ticket #674
>>>>>>> * Implement no-args super(), ticket #696
>>>>>>> * Function call inlining
>>>>>>
>>>>>> If nobody don't mind I would start with first one.
>>>>
>>>> I would love to see this happen.
>>>>
>>>>> Please go ahead. :)
>>>>>
>>>>> Note that you will encounter some problems when enabling name assignments
>>>>> for all named functions. I tried that at least once and it "didn't work",
>>>>> but I didn't take the time yet to investigate them further.
>>>>>
>>>>> I assume you are going to work on this in your own repo?
>>>>
>>>> Please also coordinate with Mark's work on function dispatching for
>>>> fused types.
>>>>
>>>
>>> I assume that that fused type functions are cdef ones so I think that
>>> should be easy to merge.
>>> On the other hand it's better to have Mark's branch merged into master.
>>>
>>> Mark, what is the state of your fused types branch?
>>> Is it possible to break it into smaller parts to ease reviewing and merging?
>>>
>>
>> It seems I meant memview branch not fusedtypes.
>
> There are 2 pending branches, _memview_rebase, which has support for
> memoryviews, and fusedtypes. The former is ready for merge, it's
> waiting to be reviewed. The fused types branch needs to subclass
> CyFunction (it basically modified the old binding function). There was
> also some duplicate functionality there, so I thought it'd be easier
> and more convenient to use the utility code loading there.
>
> Since it's not a strict dependency and it will be blocking progress, I
> will try to find some time to get it merge-ready for master.
>
> But no, it does cdef, cpdef and def methods, and it has some changes
> to all function nodes (FuncdefNode, CFuncdefNode and DefNode). These
> changes shouldn't be major though, but the logic in FusedFuncdefNode
> does differentiate between all the different functions in order to
> support them. Feel free to ask me about specifics any time.
>

I've moved def node assignment synthesis into
DefNodeAssignmentSynthesis transformation.

https://github.com/vitek/cython/commit/efacfed3c9cd8216b6c2100073a9df809b76675a

Instead of moving defnode into PyCFunctionNode I've inserted
assignment statement right after defnode.
This is much more easy and seems ok to me.

-- 
vitja.


More information about the cython-devel mailing list