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