from pypy.translator.interactive import Translation
class compdec:
def __init__(self, func):
self.func = func
self.argtypes = None
def __call__(self, *args):
argtypes = tuple(type(arg) for arg in args)
if argtypes != self.argtypes:
self.argtypes = argtypes
t = Translation(self.func)
t.annotate(argtypes)
self.cfunc = t.compile_c()
return self.cfunc(*args)
@compdec
def is_prime(n):
if n < 2:
return False
for i in xrange(2, n):
if n%i == 0:
return False
return True
print sum(is_prime(n) for n in xrange(100000))
i think that it would be easy to change the check/recompile to a dict lookup. that __call__ might also be compiled with rpython since args is always a tuple. that would add only 1 c function call overhead and preserve dynamic typing.
Tuesday, July 28, 2009
rpython and numpy
looks like at least a few people connected with pypy have an eye on numpy. there's a very small and limited demo in the svn right now. but other devs have said it is hard and not their main interest. i hope it at least remains possible, at some future date.
maybe more promising is some work on ufuncs by one of the enthought people. it shows a good example of how to use rpython to compile a function. maybe i can use this to autogenerate c code for scipy.weave.inline. here's the most relevant example:
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment