On Jun 10, 6:43 pm, John Nagle <[EMAIL PROTECTED]> wrote:
> Josiah Carlson wrote:
> > Steven D'Aprano wrote:
>
> >> On Sat, 09 Jun 2007 22:52:32 +0000, Josiah Carlson wrote:
>
> >>> the only thing that optimization currently does in Python at present
> >>> is to discard docstrings
>
> >> Python, or at least CPython, does more optimizations than that. Aside
> >> from
> >> run-time optimizations like interned strings etc., there are a small
> >> number of compiler-time optimizations done.
>
> >> Running Python with the -O (optimize) flag tells Python to ignore
> >> assert statements. Using -OO additionally removes docstrings.
> ...
>
> > I would guess it is because some other data types may have side-effects.
> >  On the other hand, a peephole optimizer could be written to trim out
> > unnecessary LOAD_CONST/POP_TOP pairs.
>
> >> Some dead code is also optimized away:
>
> > Obviously dead code removal happens regardless of optimization level in
> > current Pythons.
>
> >> Lastly, in recent versions (starting with 2.5 I believe) Python
> >> includes a
> >> peephole optimizer that implements simple constant folding:
>
> > Constant folding happens regardless of optimization level in current
> > Pythons.
> > So really, assert and docstring removals.  Eh.
>
>     It's hard to optimize Python code well without global analysis.
> The problem is that you have to make sure that a long list of "wierd
> things", like modifying code or variables via getattr/setattr, aren't
> happening before doing significant optimizations.  Without that,
> you're doomed to a slow implementation like CPython.
>
>     ShedSkin, which imposes some restrictions, is on the right track here.
> The __slots__ feature is useful but doesn't go far enough.
>
>     I'd suggest defining "simpleobject" as the base class, instead of 
> "object",
> which would become a derived class of "simpleobject".   Objects descended
> directly from "simpleobject" would have the following restrictions:
>
>         - "getattr" and "setattr" are not available (as with __slots__)
>         - All class member variables must be initialized in __init__, or
>           in functions called by __init__.  The effect is like __slots__,
>           but you don't have to explictly write declarations.
>         - Class members are implicitly typed with the type of the first
>           thing assigned to them.  This is the ShedSkin rule.  It might
>           be useful to allow assignments like
>
>                 self.str = None(string)
>
>           to indicate that a slot holds strings, but currently has the null
>           string.
>         - Function members cannot be modified after declaration.  Subclassing
>           is fine, but replacing a function member via assignment is not.
>           This allows inlining of function calls to small functions, which
>           is a big win.
>         - Private function members (self._foo and self.__foo) really are
>           private and are not callable outside the class definition.
>
> You get the idea.  This basically means that "simpleobject" objects have
> roughly the same restrictions as C++ objects, for which heavy compile time
> optimization is possible.  Most Python classes already qualify for
> "simpleobject".  And this approach doesn't require un-Pythonic stuff like
> declarations or extra "decorators".
>
> With this, the heavy optimizations are possible.  Strength reduction.  
> Hoisting
> common subexpressious out of loops.  Hoisting reference count updates out of
> loops.  Keeping frequently used variables in registers.  And elimination of
> many unnecessary dictionary lookups.
>
> Python could get much, much faster.  Right now CPython is said to be 60X 
> slower
> than C.  It should be possible to get at least an order of magnitude over
> CPython.
>
>
                                        John Nagle

This is already done in RPython:

http://codespeak.net/pypy/dist/pypy/doc/coding-guide.html#restricted-python

I was at the PyCon It conference the other day and one of the
PyPy people claimed that RPython is up to 300X faster than Python.

    Michele Simionato

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to