per-function jit compiler

Gabriel Genellina gagsl-py2 at yahoo.com.ar
Tue Apr 6 12:02:41 EDT 2010


En Tue, 06 Apr 2010 07:23:19 -0300, Luis M. González <luismgz at gmail.com>  
escribió:

> On 6 abr, 03:40, Chris Rebert <c... at rebertia.com> wrote:
>> 2010/4/5 Luis M. González <luis... at 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
>>
>
> 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.

That *is* exactly what psyco does. A specialized function (or block) is a  
pre-compiled block with a known combination of variable types, detected at  
runtime.
psyco has not been superseded by pypy, they're two separate projects.  
(psyco's author focus has migrated, though).

-- 
Gabriel Genellina




More information about the Python-list mailing list