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