[Cython] CF based type inference

Robert Bradshaw robertwb at gmail.com
Wed May 9 00:12:29 CEST 2012


On Tue, May 8, 2012 at 6:47 AM, Vitja Makarov <vitja.makarov at gmail.com> wrote:
> 2012/5/8 Stefan Behnel <stefan_ml at behnel.de>:
>> Hi,
>>
>> Vitja has rebased the type inference on the control flow, so I wonder if
>> this will enable us to properly infer this:
>>
>>  def partial_validity():
>>    """
>>    >>> partial_validity()
>>    ('Python object', 'double', 'str object')
>>    """
>>    a = 1.0
>>    b = a + 2   # definitely double
>>    a = 'test'
>>    c = a + 'toast'  # definitely str
>>    return typeof(a), typeof(b), typeof(c)
>>
>> I think, what is mainly needed for this is that a NameNode with an
>> undeclared type should not report its own entry as dependency but that of
>> its own cf_assignments. Would this work?
>>
>> (Haven't got the time to try it out right now, so I'm dumping it here.)
>>
>
> Yeah, that might work. The other way to go is to split entries:
>
>  def partial_validity():
>   """
>   >>> partial_validity()
>   ('str object', 'double', 'str object')
>   """
>   a_1 = 1.0
>   b = a_1 + 2   # definitely double
>   a_2 = 'test'
>   c = a_2 + 'toast'  # definitely str
>   return typeof(a_2), typeof(b), typeof(c)
>
> And this should work better because it allows to infer a_1 as a double
> and a_2 as a string.

This already works, right? I agree it's nicer in general to split
things up, but not being able to optimize a loop variable because it
was used earlier or later in a different context is a disadvantage of
the current system.

- Robert


More information about the cython-devel mailing list