The way to a faster python [was Python IS slow !]

Markus Kohler markusk at bidra241.bbn.hp.com
Wed May 5 08:05:30 EDT 1999


Martijn Faassen <faassen at pop.vet.uu.nl> writes:

> Markus Kohler wrote:
> 
> [how to speed up Python - interpreter optimizations and JIT]
> 
> I've been thinking about something else. I'm not quite sure how feasible
> this is, though. The idea goes something like this:
> 
> * Subset Python; make a strict subset so that any code written for the
> subset can still run in Python proper. Mainly remove some of the
> dynamism.
> 

This is the way squeak a free Smalltalk implementation 
 works (www.squeak.org). The complete virtual machine (
the interpreter) including the garbage collector is written in a small subset
of Smalltalk which  is automatically translated to C. This has the big 
advantage that one can debug the whole VM withing squeak !

> * Add static typing info; initially by hand though some type inference
> can always be added later:
> 
> import StaticTypes
> 
> __types_foo = { "bar"  : StaticTypes.int,
>                 "baz"  : StaticTypes.int,
>                 Result : StaticTypes.int }
> 
> def foo(bar, baz)
>     return bar + baz
> 
> __types_hoi = { "message" : StaticTypes.string }
> 
> def hoi(message):
>     print "Hoi", message
> 
> __types_printlist = { "mylist" : StaticTypes.list(StaticTypes.string),
>                       "i"      : StaticTypes.string }
> 
> def printlist(mylist):
>     for i in mylist:
>         print i
> 
> __types_test = { "a" : StaticTypes.int }
> 
> class Test:
> 
>     __types_init = { "a" : StaticTypes.int }
>     def __init__(self, a):
>         self.a = a
> 
>     __types_get_a = { Result: StaticTypes.int }
>     def get_a(self):
>         return self.a
> 
> __types_useTest = { "arg" : StaticTypes.Class("Test"),
>                     Result: StaticTypes.int } 
> def useTest(arg):
>     return arg.get_a()
> 
> Note that this is all still perfectly executable by the Python
> interpreter.
> 
> * I propose we'd call this statically typed subset of Python 'Swallow',
> after the famous air speed velocity question. :)
> 
> * Parse the Swallow code with, for example, John Aycocks parsing
> framework (http://www.csr.UVic.CA/~aycock/python/). This can already
> parse Python. 
> 
> * Now combine this with the static typing info, and generate C code. The
> idea is that the Swallow subset is limited enough so that very efficient
> C code can be generated. Of course quite a lot of static typing info for
> the standard library is also needed to complete the process.

Good idea. 

> 
> * Also automatically generate interface C code for the places where the
> generated C code talks to Python proper and vice versa.
> 
> I know this is like Python2C, but with added static type info, and no
> attempt is made to translate all of Python; just a subset.
> 
> The idea is that much existing Python code is already swallow code, if
> type information is added. Lots more Python code isn't 'swallowable',
> and this can stay like it is. Development happens with the normal
> interpreter as Swallow code remains at all time executable by CPython;
> only when speed is desired people can add the type info and 'swallow'
> some of their functions. Basically it's a way to write C extensions in a
> Python subset, instead of in C. 
> 
> Later on we can try to add type inferencing and automatic swallowing of
> portions of code that are deemed swallowable.
> 
> I would imagine that a Swallow compiler would allow very significant
> speedups of code, with a minimum of developer hassle. A compiler of
> existing Python code would be even better, of course, but more difficult
> to do, a

Ans one big advantage is that one could debug the untranslated code,
if one would take care that all the is still executable python code.  
> 
> Of course all of this contains a lot of handwaving, but a least each
> step of the roadmap is readily imaginable. :)
> 
> Does Swallow seem useful to others? Any stumbling blocks that wreck this
> idea? I'd like to see some discussion; if people like the idea, perhaps
> we can even do some coding.
> 
> Regards,
> 
> Martijn


IMHO it's a great idea. 


Markus

-- 
Markus Kohler  mailto:markus_kohler at hp.com




More information about the Python-list mailing list