[pypy-dev] Confused about RPython
Niklaus Haldimann
nhaldimann at gmx.ch
Fri Jul 29 14:36:22 CEST 2005
Christian Tismer wrote:
> I see you want to write the array module at interplevel.
> This makes sense, applevel has problems here. interplevel
> with possibly give you problems as well, I guess, because
> I have no clue how to express the buffer interface for instance.
> We don't have pointers and too few basic types.
> If you stubleofver such problems, please don't hesitate to
> contact the list.
I am actually trying to write it in applevel, making sure it can be
geninterped. If I can do this in a resonable amount of time I might try
to rewrite some stuff on interplevel. You can see the current effort
here, BTW:
http://codespeak.net/svn/user/nik/array_py/trunk/src/array.py
I think the buffer interface is a no-brainer, but maybe I'm missing
something. Our buffer type is written at applevel, we have no obligation
at all to emulate CPython's C-based buffer interface. We can define our
own interface, and in fact the current buffer implementation sort of
does that. Hacking array support into the current buffer will be a
matter of 2-3 lines of code, AFAICT. More effort would be a waste of
time anyway, as buffer is as good as deprecated. ;)
> Well, I think my notation is a biut confusing, of course.
> Should have tagged nn-geninterpable code differently.
> The tag "NOT_RPYTHON" is used inside PyPyto signal stuff that
> we should not try to translate, the annotator will raise an exception
> if it sees such a thing, and so on.
> So I used the same tag to signal that "This applevel code is not
> suitable for geninterp". Of course, this is some kind of "applevel
> RPython" in the sense that it can be pured through geninterp
> to create an RPython interplevel module.
I see, that really clears things up a bit. Is it correct to say that
geninterping such an "applevel RPython" module guarantees that the
resulting interplevel code can in fact be translated? That sounds a bit
too much like magic to me.
> And this is all what it is saying. If you are writing on interp level,
> geninterp doesn't help. You need to translate to some target and see
> whether flowspace and rtyper are happy with it.
OK. Just to be a bit more explicit about this, I do something like:
>>> t = Translator(my_rpython_function)
>>> t.annotate([int])
And check that the inferred return type is not SomeObject. This
basically means that flowspace and rtyper are happy, right? What I don't
understand ATM is where the translator will get the above "[int]"
annotation hint from in the real world ...
Thanks for showing me the light so far. ;)
Cheers
Nik
More information about the Pypy-dev
mailing list