En Tue, 06 Apr 2010 07:23:19 -0300, Luis M. González <luis...@gmail.com>
escribió:
On 6 abr, 03:40, Chris Rebert <c...@rebertia.com> wrote:
2010/4/5 Luis M. González <luis...@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
--
http://mail.python.org/mailman/listinfo/python-list