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