From: Armin R. <ar...@us...> - 2004-10-29 11:37:23
|
Update of /cvsroot/psyco/psyco/doc In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv17422/doc Modified Files: psycoguide.tex Log Message: Enhanced the support for compiling top-level modules, but disabled it temporarily until I figure out the remaining bug. Also need to figure out if it's really a good idea to compile top-levels in general. Index: psycoguide.tex =================================================================== RCS file: /cvsroot/psyco/psyco/doc/psycoguide.tex,v retrieving revision 1.22 retrieving revision 1.23 diff -C2 -d -r1.22 -r1.23 *** psycoguide.tex 7 Sep 2004 09:30:05 -0000 1.22 --- psycoguide.tex 29 Oct 2004 11:36:39 -0000 1.23 *************** *** 890,894 **** \item the \code{exec} statement --- in some cases you can use \function{eval} and/or \function{compile} instead, under the restrictions described in section \ref{patchedfunctions} ! \item top-level module code and the code defining a class\footnote{The methods themselves are fine; this only concerns the code that runs in order to define the class (generally only a bunch of \code{def} statements)} --- this is because Python's compiler can emit fast-variable-access bytecode only for function definitions \item functions with free or cell vars, which occur with Python's new nested scopes (as enabled by \samp{from __future__ import nested_scopes}); this concerns both the function whose local variable is made visible to a subfunction, and the subfunction using such a local variable --- 890,894 ---- \item the \code{exec} statement --- in some cases you can use \function{eval} and/or \function{compile} instead, under the restrictions described in section \ref{patchedfunctions} ! \item the code defining a class\footnote{The methods themselves are fine; this only concerns the code that runs in order to define the class (generally only a bunch of \code{def} statements)} (top-level module code can be executed by recent versions of Psyco). \item functions with free or cell vars, which occur with Python's new nested scopes (as enabled by \samp{from __future__ import nested_scopes}); this concerns both the function whose local variable is made visible to a subfunction, and the subfunction using such a local variable *************** *** 902,911 **** \begin{tableiii}{cl|l}{code}{Bytecode}{Instruction name}{Appears in} \lineiii{ 82}{\code{LOAD_LOCALS }}{(1) class definitions} ! \lineiii{ 84}{\code{IMPORT_STAR }}{(2) \code{from xx import *}} \lineiii{ 85}{\code{EXEC_STMT }}{(2) \code{exec xx}} \lineiii{ 86}{\code{YIELD_VALUE }}{(3) generators} ! \lineiii{ 90}{\code{STORE_NAME }}{(1) outside functions} ! \lineiii{ 91}{\code{DELETE_NAME }}{(1) outside functions} ! \lineiii{101}{\code{LOAD_NAME }}{(1) outside functions} \lineiii{134}{\code{MAKE_CLOSURE }}{(4) nested scopes} \lineiii{135}{\code{LOAD_CLOSURE }}{(4) nested scopes} --- 902,911 ---- \begin{tableiii}{cl|l}{code}{Bytecode}{Instruction name}{Appears in} \lineiii{ 82}{\code{LOAD_LOCALS }}{(1) class definitions} ! \lineiii{ 84}{\code{IMPORT_STAR }}{(5) \code{from xx import *}} \lineiii{ 85}{\code{EXEC_STMT }}{(2) \code{exec xx}} \lineiii{ 86}{\code{YIELD_VALUE }}{(3) generators} ! \lineiii{ 90}{\code{STORE_NAME }}{(5) class definitions} ! \lineiii{ 91}{\code{DELETE_NAME }}{(5) class definitions} ! \lineiii{101}{\code{LOAD_NAME }}{(5) class definitions} \lineiii{134}{\code{MAKE_CLOSURE }}{(4) nested scopes} \lineiii{135}{\code{LOAD_CLOSURE }}{(4) nested scopes} *************** *** 919,923 **** \begin{description} \item[(1)] ! Psyco can only accelerate functions. It can not accelerate class definitions (i.e.\ the execution of the body of the class statement -- i.e.\ the creation of the class object itself -- this does not prevent it from accelerating methods in the class). It cannot accelerate the module top-level code, so be sure to put your loops inside a function even in a simple script. These instructions can also sometimes appear in a function, e.g.\ when the function uses \code{from xx import *} or \code{exec xx}. \item[(2)] Functions using these constructs cannot be accelerated. --- 919,923 ---- \begin{description} \item[(1)] ! Psyco cannot accelerate class definitions, i.e.\ the execution of the body of the class statement -- i.e.\ the creation of the class object itself. This does not prevent it from accelerating methods in the class. \item[(2)] Functions using these constructs cannot be accelerated. *************** *** 926,929 **** --- 926,931 ---- \item[(4)] Using nested scopes (i.e.\ variables shared by a function and an inner sub-function) will prevent both the outer and the inner function to be accelerated. This too could be worked around if there is enough interest, at least for accelerating the unrelated parts of the functions -- the accesses to the shared variables themselves might be difficult to optimize. + \item[(5)] + These constructions are allowed when they appear at the module top-level, i.e.\ not in a function or in a class definition. \end{description} |