[Cython] CF based type inference
Vitja Makarov
vitja.makarov at gmail.com
Tue May 21 15:14:48 CEST 2013
2013/5/21 mark florisson <markflorisson88 at gmail.com>
> On 21 May 2013 11:26, Vitja Makarov <vitja.makarov at gmail.com> wrote:
> > Hi!
> >
> > Recently I've started work on new type inference engine. Now it's almost
> > ready and I want to discuss it.
> >
> > It works like this: first infer type for each assignment then for whole
> > entry. It has some advantages over previous algorithm:
> > - it handles assignment cycles, see test_swap() for example
> > - it can infer type using info about assignments on the whole entry:
> >
> > a = 1
> > b = a
> > a = "str"
> >
> > a is python object and b is integer.
> >
> > Here are testcases that show some new cases it can solve:
> >
> https://github.com/vitek/cython/blob/_type_inference_new/tests/run/type_inference_new.pyx
> >
> > Here is branch for it
> > https://github.com/vitek/cython/tree/_type_inference_new
> >
> > --
> > vitja.
> >
> > _______________________________________________
> > cython-devel mailing list
> > cython-devel at python.org
> > http://mail.python.org/mailman/listinfo/cython-devel
> >
>
> Hey Vitja,
>
> Cool! How do you want to handle variable merge at control flow joins?
> Would you promote (backwards incompatible), use a union type, or
> object? E.g. what does this result in:
>
> x = 0
> for i in range(N):
> x += 0.2 * i
> print typeof(x)
Hi Mark,
Nothing changed in your example old algorithm was able to handle this
"simple" kind of cycles as well as new one:
def foo(int N):
x = 0
for i in range(N):
x += 0.2 * i
print typeof(x)
So this function (not that N is an integer here) will print 'dobule'.
With new algorithm we can go further:
def foo(int N):
x = 1
y = 0
for i in range(N):
x = x * 0.1 + y * 0.2
y = x * 0.3 + y * 0.4
print typeof(x), typeof(y)
Here both x and y will be inferred as double
--
vitja.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/cython-devel/attachments/20130521/6454e80b/attachment.html>
More information about the cython-devel
mailing list