libfuture.tex 2.52 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
\section{\module{__future__} ---
         Future statement definitions}

\declaremodule[future]{standard}{__future__}
\modulesynopsis{Future statement definitions}

\module{__future__} is a real module, and serves three purposes:

\begin{itemize}

\item To avoid confusing existing tools that analyze import statements
      and expect to find the modules they're importing.

\item To ensure that future_statements run under releases prior to 2.1
      at least yield runtime exceptions (the import of
      \module{__future__} will fail, because there was no module of
      that name prior to 2.1). 

\item To document when incompatible changes were introduced, and when they
      will be --- or were --- made mandatory.  This is a form of executable
      documentation, and can be inspected programatically via importing
      \module{__future__} and examining its contents.

\end{itemize}

26
Each statement in \file{__future__.py} is of the form:
27

Fred Drake's avatar
Fred Drake committed
28 29 30 31
\begin{alltt}
FeatureName = "_Feature(" \var{OptionalRelease} "," \var{MandatoryRelease} ","
                        \var{CompilerFlag} ")"
\end{alltt}
32

Fred Drake's avatar
Fred Drake committed
33 34 35
where, normally, \var{OptionalRelease} is less than
\var{MandatoryRelease}, and both are 5-tuples of the same form as
\code{sys.version_info}:
36 37 38 39 40 41 42 43 44 45

\begin{verbatim}
    (PY_MAJOR_VERSION, # the 2 in 2.1.0a3; an int
     PY_MINOR_VERSION, # the 1; an int
     PY_MICRO_VERSION, # the 0; an int
     PY_RELEASE_LEVEL, # "alpha", "beta", "candidate" or "final"; string
     PY_RELEASE_SERIAL # the 3; an int
    )
\end{verbatim}

Fred Drake's avatar
Fred Drake committed
46 47
\var{OptionalRelease} records the first release in which the feature
was accepted.
48

Fred Drake's avatar
Fred Drake committed
49 50 51
In the case of a \var{MandatoryRelease} that has not yet occurred,
\var{MandatoryRelease} predicts the release in which the feature will
become part of the language.
52

Fred Drake's avatar
Fred Drake committed
53 54
Else \var{MandatoryRelease} records when the feature became part of
the language; in releases at or after that, modules no longer need a
55
future statement to use the feature in question, but may continue to
Fred Drake's avatar
Fred Drake committed
56
use such imports.
57

Fred Drake's avatar
Fred Drake committed
58
\var{MandatoryRelease} may also be \code{None}, meaning that a planned
59 60 61 62 63
feature got dropped.

Instances of class \class{_Feature} have two corresponding methods,
\method{getOptionalRelease()} and \method{getMandatoryRelease()}.

Fred Drake's avatar
Fred Drake committed
64
\var{CompilerFlag} is the (bitfield) flag that should be passed in the
65 66 67 68 69
fourth argument to the builtin function \function{compile()} to enable
the feature in dynamically compiled code.  This flag is stored in the
\member{compiler_flag} attribute on \class{_Future} instances.

No feature description will ever be deleted from \module{__future__}.