From: Luis M. González on 6 Apr 2010 02:32 This post gave me an idea: http://groups.google.com/group/comp.lang.python/msg/5d75080707104b76 What if I write a simple decorator to figure out the types of every function, and then we use it as a base for a simple method-jit compiler for python? example: def typer(f): def wrap(*args): a = f.func_code.co_varnames b = [type(i) for i in args] return dict(zip(a,b)) return wrap @typer def spam(a, b, c=3, d=4): pass >>> spam(8,'hello',9.9, 10) {'a': <type 'int'>, 'c': <type 'float'>, 'b': <type 'str'>, 'd':<type 'int'>} So by using this information, we record all the argument types used the first time each function/method is executed, and then we generate optimized code for them. From this point on, a guard should check if all arguments remain the same and, if so, the optimized code is run. Otherwise, just fall back to the interpreter. He! I have no idea how to implement it... Any guru out there? Luis
From: Luis M. González on 6 Apr 2010 06:23 On 6 abr, 03:40, Chris Rebert <c...(a)rebertia.com> wrote: > 2010/4/5 Luis M. González <luis...(a)gmail.com>: > > > > > > > This post gave me an idea:http://groups.google.com/group/comp.lang.python/msg/5d75080707104b76 > > > What if I write a simple decorator to figure out the types of every > > function, and then we use it as a base for a simple method-jit > > compiler for python? > > > example: > > > def typer(f): > > def wrap(*args): > > a = f.func_code.co_varnames > > b = [type(i) for i in args] > > return dict(zip(a,b)) > > return wrap > > > @typer > > def spam(a, b, c=3, d=4): > > pass > > >>>> spam(8,'hello',9.9, 10) > > {'a': <type 'int'>, 'c': <type 'float'>, 'b': <type 'str'>, 'd':<type > > 'int'>} > > > So by using this information, we record all the argument types used > > the first time each function/method is executed, and then we generate > > optimized code for them. > > >From this point on, a guard should check if all arguments remain the > > same and, if so, the optimized code is run. > > Otherwise, just fall back to the interpreter. > > > He! I have no idea how to implement it... > > Guido's been lending out his time machine again:http://psyco.sourceforge.net/introduction.html > > Cheers, > Chris > --http://blog.rebertia.com Well, psyco is a complex beast. Actually it's a Just-In-Time Specializer, not really a compiler at all (Guido's machine told me so). It's been superseded by pypy, which is a way more complex beast, and it's a tracing compiler (and many things more). What I mean is, why not using python's simple introspection capabilities (instead of partial evaluation, type inference or other complex mechanism) to gather type information? I can imagine that this, coupled with pyrex, cython or shedskin could give some results perhaps... by selectively compiling some function or all of them. But probably someone will throw Guido's time machine again at me. If it was that easier, someone would have done it already... I just wonder why this simple approach is not feasible. Luis
|
Pages: 1 Prev: per-method jit compiler Next: pass object or use self.object? |