[Python-ideas] optimized VM ideas

joe joeedh at gmail.com
Fri Jan 23 08:20:22 CET 2009


Ah, should've done more fact checking *before* posting the first mail.
 Actually SquirrelFish does compile to native code nowadays, in a
nicely simple way.

On Thu, Jan 22, 2009 at 11:59 PM, joe <joeedh at gmail.com> wrote:
> So, I've been kicking around some ideas for an optimized python VM.  I freely
> admit I'm an amateur at this, but I find the problem of making python code
> run faster fascinating.  My ideas arose from observing that google V8's JIT
> compiler and type system are much simpler compared to TraceMonkey, but is
> also faster, and also learning that SquirrelFish is allegedy faster than V8,
> even though it doesn't compile to native code at all (which V8 and I
> believe TraceMonkey both do).
>
> This leads me to believe that relatively simple, more general concepts in
> VM design can have a bigger impact then specific, highly complicated JIT
> solutions, in the context of dynamic languages that can't be easily typed
> at compile time.
>
> So I've thought of a few ideas for a more (new) streamlined python VM:
>
> * Simplify the cpython object model as much as possible, while still allowing
>  most of the power of the current model.
>
> * Either keep referencing counting, or experiment with some of the newer
>  techniques such as pointer escaping. Object models that exclusively rely
>  on cyclic GC's have many issues and are hard to get right.
>
> * Possibly modify the bytecode to be register-based, as in SquirrelFish.
>  Not sure if this is worth it with python code.
>
> * Use direct threading (which is basically optimizing switch statements to
>  be only one or two instructions) for the bytecode loop.
>
> * Remove string lookups for member access entirely, and replaced with a
>  system of unique identifyers.  The idea is you would use a hash in the
>  types to map a member id to an index.  Hashing ints is faster then strings,
>  and I've even thought about experimenting with using collapsed arrays instead
>  of hashes.  Of course, the design would still need to support string lookups
>  when necessary.  I've thought about this a lot, and I think you'd need the
>  same general idea as V8's hidden classes for this to work right (though
>  instead of classes, it'd just be member/unique id lookup maps).
>
> I'm not sure I'll have the time to anytime soon to prototype these ideas, but I
> thought I'd kick them out there and see what people say.  Note, I'm in no way
> suggesting any sort of change to the existing cpython VM (it's way, way too
> early for that kind of talk).
>
> references:
>
> v8's design: http://code.google.com/apis/v8/design.html
> squirrelfish's design:
> http://blog.mozilla.com/dmandelin/2008/06/03/squirrelfish/
>
> Joe
>



More information about the Python-ideas mailing list